【问题标题】:How to use a separate file system for the Docker daemon related files at start up on AWS EC2如何在 AWS EC2 上启动时为 Docker 守护程序相关文件使用单独的文件系统
【发布时间】:2025-12-06 13:50:02
【问题描述】:

我想为 AWS EC2 上的 Docker 守护程序使用单独的 overlayfs 文件系统卷。通过登录并运行命令,我已经能够自己手动配置和设置它。我现在想创建一个在启动时自动执行此操作的 AWS AMI,因此我不必每次都自己执行此操作。

我已经尝试在谷歌上搜索,但我似乎无法找到已经执行此操作的 AMI。谁能提供将其烘焙到我的自定义 AMI 中的最佳方法的建议?

【问题讨论】:

    标签: amazon-web-services amazon-ec2 docker amazon-ami


    【解决方案1】:

    我最终自己弄清楚了如何做到这一点。我发布我的结果以防万一 这对其他人有用。

    创建 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
        }
      }
    ],
    

    疑难解答

    • 确保使用可以使用 EBS 卷的基础 AMI
    • 确保您的 EBS 卷已格式化为文件系统,例如分机4
    • 检查/dev/xvdf是否是挂载的设备,如果 不是。
    • 请参阅我的packer github repository,了解我用来构建我的 AMI。

    【讨论】:

      最近更新 更多