![Docker:docker 镜像包含什么?为了在机器之间传递保存的镜像,我必须将它们与源代码一起传递吗?](https://linux22.com/image/1592229/Docker%EF%BC%9Adocker%20%E9%95%9C%E5%83%8F%E5%8C%85%E5%90%AB%E4%BB%80%E4%B9%88%EF%BC%9F%E4%B8%BA%E4%BA%86%E5%9C%A8%E6%9C%BA%E5%99%A8%E4%B9%8B%E9%97%B4%E4%BC%A0%E9%80%92%E4%BF%9D%E5%AD%98%E7%9A%84%E9%95%9C%E5%83%8F%EF%BC%8C%E6%88%91%E5%BF%85%E9%A1%BB%E5%B0%86%E5%AE%83%E4%BB%AC%E4%B8%8E%E6%BA%90%E4%BB%A3%E7%A0%81%E4%B8%80%E8%B5%B7%E4%BC%A0%E9%80%92%E5%90%97%EF%BC%9F.png)
我已经复制了在一台机器上创建的图像,并将该图像复制到另一台机器上。(使用 docker save -o [images.tar] 命令保存 docker 图像)
然后我在另一台机器上使用 docker loader 命令。为了运行这些镜像,我是否必须将源代码、Dockerfile 和 docker-compose.yml 文件与镜像一起传递?
答案1
Dockerfile 是用于创建镜像的指令。创建该镜像后,其他人无需 Dockerfile 即可运行该镜像。
图像本身应该包含运行应用程序的所有组件,如二进制文件、库和任何脚本(如果您有像 JavaScript 这样的解释语言,这就是您的源代码)。
docker-compose.yml 是关于如何运行镜像的配置。其中包括发布端口的位置以及如何挂载卷等设置,这些设置并不包含在镜像本身中。
因此,如果您已经复制了图像,那么运行它所需的只是 docker-compose.yml。
请注意,我不建议使用保存/加载来传输图像。您会发现已经发货的相同图层再次被传输。相反,即使在断开连接的环境中,也可以使用注册服务器,方法是运行自己的注册表。这会跟踪哪些层是新的,并加快传输速度,同时减少图像所使用的磁盘空间。