我想为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实例的卷,然后选择“操作”
->“创建快照”。然后需要几分钟来创建快照。

启动实例

完成所有这些操作后,您应该具有以下功能:
  • 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。
  • 08-08 02:10
    查看更多