我最终自己弄清楚了如何做到这一点。我发布我的结果以防万一
这对其他人有用。
创建 AMI
假设一个基础 AMI 已经安装了 docker 并使用 systemctl
管理启动服务。我运行以下命令从
docker daemon 从使用 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”->“卷”(左
菜单)。然后选择附加到 EC2 实例的卷并选择“Actions”
->“创建快照”。然后需要几分钟时间来创建快照。
启动实例
完成所有这些后,您应该拥有以下内容:
- AMI 期望在
/dev/xvdf 安装设备。
- 配置为将其图形数据库保存到 /mnt 下的卷的 Docker 守护程序。
- Ex4 格式的 EBS 快照用作此卷。
然后我使用以下BlockDeviceMappings 配置来挂载它
启动实例时将快照作为卷。替换所有大写值
与你的价值观。您应该使用您创建的 AMI 来启动实例。我
使用DeleteOnTermination : true 因为我不关心码头工人
关闭实例后的相关文件。
"BlockDeviceMappings": [
{
"DeviceName": "/dev/sdf",
"Ebs": {
"SnapshotId": "SNAPSHOT_ID",
"Encrypted": false,
"DeleteOnTermination": true,
"VolumeSize": VOL_SIZE
}
}
],
疑难解答