我正在创建可以在我的项目中重复使用的图像,并希望将其推送到 Docker Hub。
我最初以为我只需要创建一个文件夹,放入正确的 Dockerfile 和一些附加文件(例如配置)并推送它。
然后我意识到我还必须先基于这个 Dockerfile 创建一个镜像。
那么,我想 Docker Hub 会保存我在本地创建的镜像吧?因此,镜像可能会很大,比如几 GB?
请解释一下我运行时到底推动了什么docker push name/repo
。
答案1
理解的一个好开端是查看 Docker 的图像和容器概述。
总结一下 - Docker 建立在分层文件系统。 中的每个命令都会Dockerfile
添加、写入或修改文件,这些文件将作为更改存储到下面的层中。此过程使重新使用基本容器变得容易(因为层不会被修改) - 并且在命令没有更改时有效地重建图像。
这些文件系统层(加上构成图像的其他元数据)就是推送到 Docker Hub 的内容。
因此,图像可以非常大,比如千兆字节?
一个小的 Dockerfile 通常会创建一个更大的镜像,那么为什么不只上传 Dockerfile 呢?我认为原因是一致性。Dockerfile 通常以FROM debian
或FROM alpine
开头,也可能以 之类的版本标记开头FROM python:3.5
。但是,当该标记后面的图像发生变化时,您将从同一个 Dockerfile 构建不同的图像。在某些时候,构建可能会破坏应用程序,或导致细微的错误。但是,由于所有文件系统层都隐藏在 Docker Hub 上,因此每次运行的都是同一个二进制图像。