我想为AWS EC2上的Docker守护程序使用单独的overlayfs文件系统卷。我已经能够通过登录并运行命令来手动配置和设置它。我现在想创建一个AWS AMI,它在启动时会自动执行此操作,因此我不必每次都自己做。
我曾尝试使用谷歌搜索,但似乎找不到已经执行此操作的AMI。谁能提出将其烘焙到我的自定义AMI中的最佳方法的建议?
最佳答案
我最终想出了自己的方法。我要发布结果以防万一
这对其他任何人都没有用。
创建一个AMI
假设已经安装了docker的基本AMI并使用systemctl进行
管理启动服务。我运行了以下命令以从
docker守护进程,从使用devicemapper到使用overlayfs。再说老/var/lib/docker/devicemapper
目录已删除,并且标志--graph=/mnt/
指定目录/mnt
将用于存储所有
docker 图像,容器等
sudo service docker stop
sudo rm -rf /var/lib/docker/devicemapper
sudo sed -i -e "/ExecStart/s/$/ --storage-driver=overlay --graph=\/mnt\//" /lib/systemd/system/docker.service
sudo systemctl daemon-reload
接下来,创建将在其中挂载文件系统的目录。更新资料
EC2实例启动时挂载的
/etc/fstab
。sudo mkdir -p /mnt
echo '/dev/xvdf /mnt ext4 defaults,nofail 0 2' | sudo tee --append /etc/fstab
通过这些更改创建一个新的Amazon AMI。我为此使用packer和
发现它很简单。
EBS快照
您将需要一个已经格式化的EBS快照,以将其附加到每个启动的EC2
实例。为此,我创建了一个具有新EBS卷的EC2实例,
格式化随附的EBS卷。 AWS website has documentation,
例如格式化为Ext4是:
sudo mkfs -t ext4 device_name
完成此操作后,您需要将EBS卷转换为EBS快照。
您可以通过以下方法执行此操作:进入AWS,然后单击“EC2”->“卷”(左
菜单)。然后选择附加到EC2实例的卷,然后选择“操作”
->“创建快照”。然后需要几分钟来创建快照。
启动实例
完成所有这些操作后,您应该具有以下功能:
/dev/xvdf
上安装设备。 然后,我使用以下
BlockDeviceMappings
配置将其挂载启动实例时将快照作为卷。替换所有大写值
与您的值(value)观。您应该使用创建的AMI启动实例。一世
使用了
DeleteOnTermination : true
是因为我不在乎docker我关闭实例后找到相关文件。
"BlockDeviceMappings": [
{
"DeviceName": "/dev/sdf",
"Ebs": {
"SnapshotId": "SNAPSHOT_ID",
"Encrypted": false,
"DeleteOnTermination": true,
"VolumeSize": VOL_SIZE
}
}
],
故障排除
/dev/xvdf
是否为已安装的设备,并根据需要进行相应的调整不。
AMI。