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

时间:2019-06-16 16:33:12

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

我正在尝试构建一个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 个答案:

答案 0 :(得分:2)

  1. 您应该在打包程序之外构建docker映像。我看不出为什么需要烘焙AMI并在烘焙AMI的过程中创建docker映像的原因。

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

  3. 我认为您不需要使用Packer来执行此操作,而只需使用EC2用户数据功能就可以做到这一点。

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

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

注意:

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

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