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

Abh*_*raj 33 packer docker dockerfile docker-compose

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

Mat*_*att 41

Docker是一个用于构建,分发和运行Docker容器的系统.容器可以在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

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

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

Dockerfiles有一点学习曲线,最好查看一些官方的Docker图像,以便遵循实践.

包装工Docker建设者

Packer不需要Dockerfile构建容器映像.它从指定的基本图像开始(如FROM).Packer然后允许您在该图像的顶部运行名为"Provisioners"的标准系统配置工具.像Ansible,Chef,Salt,Shells脚本等等.然后,这个图像将作为单个图层导出,因此与Dockerfile构建相比,您将失去图层缓存/寻址优势.

Packer允许对构建容器进行一些修改,比如--privileged在构建时运行或安装卷,Docker构建将不允许.

如果您想为多个平台构建图像并使用相同的设置,那么您可能希望使用Packer的时间.如果有一个配置器,它还可以很容易地使用现有的构建脚本.

  • @ user239558 Packer没有实现docker build用来加速重复构建的层缓存。 (3认同)
  • 回复:“packer 不需要 Dockerfile”——但它确实需要至少一个“*.json”文件,并且根据您选择的“builder”和“provisioner”,通常还需要更多配置文件;例如,ansible 使用 yaml 文件进行配置。镜像内所需的内容文件(如 *.crt)在 Packer 和 docker 中是相同的。因此,尽管 Dockerfile 是整体式的,但加壳器配置却更加模块化。 (2认同)

Jes*_*olm 10

扩展哪一个更容易/最快地配置/维护,为什么?拥有 docker 文件有哪些优点和缺点?

从个人学习和使用两者的经验来看,我发现:(YMMV)

  • docker 配置比 packer 更容易学习
  • docker 配置比 packer 更难强制执行我想要的操作
  • 开发后,创建图像的速度差异可以忽略不计
  • 由于缓存,docker 在开发过程中速度更快
  • 即使不使用 docker,docker 守护进程也会消耗一些系统资源
  • 有一些进程作为守护进程运行

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

  • docker守护进程为自己保留各种TCP端口范围
  • 每次重新启动系统或重新启动守护程序时,范围可能会发生变化
  • 唯一的错误消息是这样的:can't use that port!但不是为什么它不能

顺便说一句,解决方法是:

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

然而,在 Windows 上运行 packer 时,我发现的问题是我想要使用的配置程序 ansible 无法在 Windows 上运行。

叹。

所以我最终不得不在 LINUX 系统上运行 packer。

只是因为我感觉很反常,所以我写了一个,Dockerfile这样我就可以使用该图像在 docker 容器中从我的 Windows 站运行packer两者。ansible