我想为 AWS EC2 上的 Docker 守护程序使用单独的 overlayfs 文件系统卷。我已经能够通过登录并运行命令来手动配置和设置它。我现在想创建一个在启动时自动执行此操作的 AWS AMI,这样我就不必每次都自己执行此操作。
我试过用谷歌搜索这个,但我似乎找不到一个 AMI 已经这样做了。谁能就将其烘焙到我的自定义 AMI 中的最佳方式提出建议?
最佳答案
我最终自己弄清楚了如何做到这一点。我发布我的结果以防万一 这对其他任何人都有用。
创建 AMI
假设一个基础 AMI 已经安装了 docker 并使用 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
接下来创建将挂载文件系统的目录。更新
/etc/fstab
EC2实例启动时挂载
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”->“Volumes”(左 菜单)。然后选择附加到 EC2 实例的卷并选择“操作” -> “创建快照”。然后需要几分钟时间来创建快照。
启动实例
完成所有这些后,您应该拥有以下内容:
- AMI 期望在
/dev/xvdf
中安装设备。 - Docker 守护进程配置为将其图形数据库保存到/mnt 下的卷。
- 用作此卷的 Ex4 格式的 EBS 快照。
然后我使用以下 BlockDeviceMappings
配置来挂载它
启动实例时将快照作为卷。替换所有大写值
与你的值(value)观。您应该使用您创建的 AMI 来启动实例。我
使用 DeleteOnTermination : true
因为我不关心 docker
关闭实例后的相关文件。
"BlockDeviceMappings": [
{
"DeviceName": "/dev/sdf",
"Ebs": {
"SnapshotId": "SNAPSHOT_ID",
"Encrypted": false,
"DeleteOnTermination": true,
"VolumeSize": VOL_SIZE
}
}
],
疑难解答
- 确保使用可以使用 EBS 卷的基本 AMI
- 确保您的 EBS 卷已格式化为文件系统,例如Ext4
- 检查
/dev/xvdf
是否为挂载设备,如果有则相应调整 不是。 - 查看我的 packer github repository对于我用来构建我的命令 AMI。
关于amazon-web-services - 如何在 AWS EC2 上启动时为 Docker 守护程序相关文件使用单独的文件系统,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36657108/