在AWS的背景下:
AMI用于打包软件,可以部署在EC2上。 Docker还可用于打包软件,也可以部署到EC2。
两者之间的差异以及如何在它们之间做出选择?
答案 0 :(得分:20)
AMI是一张图片。这是一台可以从中启动新实例的整机。 docker容器更轻巧便携。 Docker容器应该可以在提供者之间传输,而AMI不是(容易)。
AMI基本上是VM映像。 Docker容器是打包的迷你映像,可在隔离环境中的某些VM上运行。
答案 1 :(得分:5)
此链接包含有关Docker和AMI之间差异的详细信息: - https://forums.docker.com/t/how-would-you-differentiate-between-docker-vs-ec2-image/1235/2
答案 2 :(得分:0)
尽管这不能直接回答问题,但是可以提供一些背景知识。
一种方法是,使用Amazon AMI(或可以是任何AMI)启动EC2实例,然后在其之上运行docker容器(具有所有依赖项)。通过这种方法,泊坞窗映像会随着时间的流逝而膨胀,并且容器会随着时间的流逝而漂移。另外,应用程序启动和运行所花费的时间更多,因为必须启动Ec2,而docker必须启动应用程序服务器。
另一种方法是“不可变Ec2实例”。使用这种方法,您可以将Amazon AMI作为基础并安装所有依赖项(使用Shell脚本或Ansible)并将其烘焙到AMI中。我们使用Hashicorp Packer,这是一个了不起的工具。由于AMI中已经安装了所有依赖项(java8,tomcat,war文件等),因此可以大大缩短应用程序启动和运行所花费的时间。
对于生产用例,请使用Packer创建AMI,并使用Terraform启动云资源以使用此AMI。在詹金斯管道中将所有这些联系在一起。