如何在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快照。

然后,我使用以下BlockDeviceMappingsconfiguration在启动实例时将此快照安装为卷。 将全部大写值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。