包装工和码头工人有何不同?提供/维护哪一个更容易/最快?为什么?拥有docker文件的优点和缺点是什么?
答案 0 :(得分:30)
Docker是一个用于构建,分发和运行Docker containers的系统。容器可以在Linux和Windows上运行。
Packer是一个自动构建系统,用于管理容器和虚拟机的映像创建。它会输出一个图像,然后您可以在所需的平台上运行该图像。
对于v1.1,这包括 - Alicloud ECS,Amazon EC2,Azure,CloudStack,DigitalOcean,Docker,Google Cloud,Hyper-V,LXC,LXD,1& 1,OpenStack,Oracle OCI,Parallels,ProfitBricks,QEMU, Triton,VirtualBox,VMware
Docker使用Dockerfile
来管理构建,这些构建具有一组特定的指令和有关如何构建容器的规则。
图像是分层构建的。每个FROM
RUN
ADD
COPY
命令都会修改Docker镜像中包含的图层。可以缓存这些层,这有助于加快构建。每个层也可以单独寻址,这有助于在多个图像共享图层时使用磁盘和下载。
Dockerfiles有一点学习曲线,最好查看一些official Docker images的练习。
Packer不需要Dockerfile
来构建容器图像。它从指定的基本图像开始(如FROM
)。 Packer然后允许您在该图像之上运行名为"Provisioners"的标准系统配置工具。像Ansible,Chef,Salt,Shells脚本等等。
然后,此图像将作为单个图层导出,因此与Dockerfile构建相比,您将失去图层缓存/寻址优势。
Packer允许对构建容器进行一些修改,比如在--privileged
运行或在构建时安装卷,Docker构建将不允许。
如果您想为多个平台构建图像并使用相同的设置,那么您可能希望使用Packer。如果存在provisioner,它还可以轻松使用现有的构建脚本。
答案 1 :(得分:3)
扩展Which one is easier/quickest to provision/maintain and why? What is the pros and cons of having a docker file?
通过学习和使用两者的个人经验,我发现:(YMMV)
我在Windows上进行了开发,尽管我的目标是运行图像的LINUX服务器。 除了在Windows上运行docker的可行性之外,在开发过程中这不是问题。
can't use that port!
,但不是为什么不能顺便说一句,解决方法用于:
但是,在Windows上运行打包程序,我发现的问题是,我想使用的预配程序ansible不能在Windows上运行。
叹气。
所以我最终还是不得不在LINUX系统上运行打包程序。
仅仅因为我感到不正当,我写了Dockerfile
,所以我可以使用该映像从Windows工作站的Docker容器中同时运行packer
和ansible
。
答案 2 :(得分:0)
Docker使用Dockerfile构建映像。 这些可以运行(Docker容器)。
Packer还会生成图像。但是您不需要Dockerfile。您还可以选择使用诸如Ansible之类的预配器,它可以创建更多可自定义的图像。它不用于运行这些图像。