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

How can I use Hashicorp Packer to creat EC2 image that runs docker image on startup?

我正在尝试构建一个包含 docker 运行ning 作为守护进程的 Amazon AMI,运行s 一个带有来自主机的已安装卷的特定映像,并安装一些软件和 docker 图像中的数据(将落在已安装的卷中)。我希望生成的 AMI 在启动时使用相同的安装卷 运行 相同的 docker 图像。目标是构建一个使用预构建 docker 图像的 EC2 图像,其他用户可以在 EC2 外部使用该图像来执行相同的安装过程,以使非亚马逊用户能够重现该过程。 AMI块是为了方便一组用户有一个简单的用户体验。

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

内部打包程序构建:

  1. 安装docker引擎
  2. 运行 docker 已安装卷的图像
  3. docker 执行映像以将软件和数据安装到装载的卷

如何通过加壳器将 AMI 设置为 运行 在构建后启动 AMI 时安装卷的相同图像?

  1. 您应该在加壳程序之外构建您的 docker 映像。我看不出您需要烘焙 AMI 的原因,并且在烘焙 AMI 的过程中创建 docker 图像。

  2. 您可以使用 AMI/EC2 的 user-data 部分,以便能够在实例首次启动时启动 docker 容器。

  3. 我认为您不需要使用 Packer 来执行此操作,您应该能够通过使用 EC2 user-data 功能来执行此操作。

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

即使您决定不单独构建 docker 映像,user-data 仍然能够帮助您 运行 您需要的所有命令。

注:

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

b。 User-Data 脚本仅在实例首次启动时 运行。如果您的实例要启动和停止,您需要编写相关的 script/use upstart/systemd 以使其在每次实例重新启动时启动。