docker和packer有何不同?配置图像时我应该选择哪一个?

时间:2017-11-07 23:55:53

标签: docker docker-compose dockerfile packer

包装工和码头工人有何不同?提供/维护哪一个更容易/最快?为什么?拥有docker文件的优点和缺点是什么?

3 个答案:

答案 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

Dockers Dockerfile

Docker使用Dockerfile来管理构建,这些构建具有一组特定的指令和有关如何构建容器的规则。

图像是分层构建的。每个FROM RUN ADD COPY命令都会修改Docker镜像中包含的图层。可以缓存这些层,这有助于加快构建。每个层也可以单独寻址,这有助于在多个图像共享图层时使用磁盘和下载。

Dockerfiles有一点学习曲线,最好查看一些official Docker images的练习。

Packers Docker builder

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)

  • 与打包程序相比,docker配置更易于学习
  • 与打包程序相比,docker配置更难以强制执行我想做的事情
  • 开发后,
  • 创建图像的速度差异可忽略不计
      由于缓存,
    • docker在开发过程中 速度更快
  • 即使不使用docker,守护进程也会消耗一些系统资源
    • 少数几个进程作为 the 守护程序
    • 运行

我在Windows上进行了开发,尽管我的目标是运行图像的LINUX服务器。 除了在Windows上运行docker的可行性之外,在开发过程中这不是问题。

  • docker守护程序为其自身保留各种TCP端口范围
    • 每次重新启动系统或重新启动守护程序时,范围可能会更改
    • 唯一的错误消息是:can't use that port!,但不是为什么不能

顺便说一句,解决方法用于:

  • 关闭虚拟机监控程序
  • 重启
  • 保留您希望主机系统看到的公共端口
  • 打开虚拟机监控程序
  • 重启

但是,在Windows上运行打包程序,我发现的问题是,我想使用的预配程序ansible不能在Windows上运行。

叹气。

所以我最终还是不得不在LINUX系统上运行打包程序。

仅仅因为我感到不正当,我写了Dockerfile,所以我可以使用该映像从Windows工作站的Docker容器中同时运行packeransible

答案 2 :(得分:0)

Docker使用Dockerfile构建映像。 这些可以运行(Docker容器)。

Packer还会生成图像。但是您不需要Dockerfile。您还可以选择使用诸如Ansible之类的预配器,它可以创建更多可自定义的图像。它不用于运行这些图像。