如何在AWS EC2上启动Docker守护进程相关文件时使用单独的文件系统
我想为AWS EC2上的Docker守护程序使用单独的overlayfs文件系统卷。 我已经能够通过login并运行命令来手动configuration和设置。 我现在想创build一个在启动时自动执行此操作的AWS AMI,所以我不必每次都要这样做。
我试过Googlesearch,但我似乎无法find一个AMI这样做了。 任何人都可以提供一个关于将这个烘焙成我的自定义AMI的最佳途径的build议?
我结束了自己如何做到这一点。 我发布我的结果,以防其他任何人使用。
创build一个AMI
假设已经安装了docker并使用systemctl来pipe理启动服务的基本AMI。 我运行了以下命令,从使用devicemapper的docker守护进程切换到使用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
接下来创build文件系统将被安装的目录。 更新EC2实例启动时挂载的/etc/fstab
。
sudo mkdir -p /mnt echo '/dev/xvdf /mnt ext4 defaults,nofail 0 2' | sudo tee --append /etc/fstab
用这些更改创build一个新的亚马逊AMI。 我用这个打包器 ,发现它非常简单。
EBS快照
您需要一个已经格式化的EBS快照才能连接到每个启动的EC2实例。 我通过创build带有新EBS卷的EC2实例来完成此操作,格式化附加的EBS卷。 AWS网站有文档 ,例如格式为Ext4的是:
sudo mkfs -t ext4 device_name
完成此操作后,您需要将EBS卷转换为EBS快照。 您可以通过进入AWS并单击“EC2” – >“卷”(左菜单)来完成此操作。 然后select附加到EC2实例的卷,然后select“操作” – >“创build快照”。 这将需要几分钟来创build快照。
启动一个实例
一旦你完成了这一切,你应该有以下几点:
- AMI希望挂载在
/dev/xvdf
上的设备。 - Docker守护进程configuration为将其graphics数据库保存到/ mnt下的卷。
- 用作此卷的Ex4格式的EBS快照。
然后,我使用以下BlockDeviceMappings
configuration在启动实例时将此快照安装为卷。 将全部大写值replace为您的值。 您应该使用您创build的AMI来启动实例。 我使用了DeleteOnTermination : true
因为在closures实例后,我并不关心DeleteOnTermination : true
相关的文件。
"BlockDeviceMappings": [ { "DeviceName": "/dev/sdf", "Ebs": { "SnapshotId": "SNAPSHOT_ID", "Encrypted": false, "DeleteOnTermination": true, "VolumeSize": VOL_SIZE } } ],
故障排除
- 确保使用可以使用EBS卷的基本AMI
- 确保您的EBS卷被格式化为文件系统,例如Ext4
- 检查
/dev/xvdf
是否为已安装的设备,如果不是,则进行相应的调整。 - 看我的打包机github存储库的命令我用来build立我的AMI。