如何使用 Hashicorp Packer 创建在启动时运行 docker 映像的 EC2 映像?



我正在尝试构建一个 Amazon AMI,其中包含作为守护程序运行的 docker,运行具有从主机装载的卷的特定映像,并在 docker 映像中安装一些软件和数据(将登陆装载的卷)。我希望生成的 AMI 在启动时使用相同的挂载卷运行相同的 docker 映像。 目标是构建一个 EC2 映像,该映像使用预构建的 docker 映像,其他用户可以在 EC2 外部使用该映像来执行相同的安装过程,以使非 Amazon 用户能够重现该过程。AMI部分是为了方便一组用户获得简单的用户体验。

我过去曾将 Packer 用于类似的事情(https://github.com/seandavi/terraform-can/tree/master/packer),但我想介绍 docker 部分,并且不清楚采取的方法。任何示例或指针都值得赞赏,但该过程似乎是:

内部打包器构建:

  1. 安装 Docker 引擎
  2. 使用装载的卷运行 Docker 映像
  3. Docker exec 到映像中,以将软件和数据安装到装载的卷中

如何通过打包程序设置 AMI,以便在构建后启动 AMI 时运行与挂载卷相同的映像?

  1. 你应该在 packer 之外构建你的 docker 镜像。我看不出您需要烘焙 AMI 并在烘焙 AMI 的过程中创建 docker 映像的原因。

  2. 您可以使用 AMI/EC2 的用户数据部分在实例首次启动时启动 docker 容器。

  3. 我认为您不需要使用 Packer 来执行此操作,您应该能够通过使用 EC2 用户数据功能来做到这一点。

  4. 如果您确实需要构建/烘焙 AMI,请查看以下内容: https://www.packer.io/docs/builders/amazon-ebs.html#user_data 这应该可以帮助您设置相关的 docker 运行命令。

即使您决定不单独构建 docker 映像,用户数据仍然能够帮助您运行所需的所有命令。

注意:

一个。您需要在 docker 容器启动时附加卷,我不知道事后附加它的方法。

b. 用户数据脚本仅在首次启动实例时运行。如果您的实例要启动和停止,您需要编写相关脚本/使用 upstart/systemd 来让它在每次实例重启时启动。

最新更新