Docker 图片越来越大了
Docker image is getting bigger and bigger
现在我正在试验 Docker。
我已经“安装”了一个 Docker Debian 镜像。
在这个Debian环境中,我安装了一个应用程序。
现在,我每天晚上都这样做:
- docker stop(停止容器)
- docker 提交(使容器成为
图片)
- docker保存(把图片保存到文件中,我这样做是为了备份
当前工作)
- docker 运行(启动容器)
如您所见,我尝试创建一个“备份解决方案”。
效果很好。但问题是,备份文件每天都在变得越来越大。
即使几天不碰容器。
以前不到10GB,现在已经20GB了。
这是为什么?我做错了什么?
非常感谢
Docker 图像会保存您每次提交的“差异”,以及图像的所有先前版本。这意味着您的过程可以保证稳定地增加最终图像的大小。为避免这种情况,您应该使用 docker export
而不是 docker save
(它接收容器作为参数,而不是图像)。
使用 docker commit
通常不是最佳做法。在 Docker 的 Build and run your image 教程等地方描述的 Docker 文件系统将让您编写一个文件,列出所有需要 运行 构建图像的命令.您可以将该文件签入源代码管理,并且 运行 docker build
每当您需要重新创建图像时。
如果 Dockerfile
与应用程序的源代码一起签入,您可以签出应用程序源的旧版本并从那里重新 docker build
图像。没有特别需要保存图像的二进制副本。
在技术层面上,docker commit
创建的图像总是包含原始图像,加上一个额外的 层,即容器中发生的任何变化。如果您重复 docker commit
,即使您删除或覆盖文件,每张图片都将始终比之前的图片大。 (典型的 Docker 图像小于 1 GB,并且根据应用程序 运行 时间和基础图像,通常在 100-200 MB 范围内。)
我遇到了同样的问题,直到我发现这是因为在 docker save
之后图像 tar
文件是在同一文件夹中生成的。
下次再次构建时,tar
文件也会包含在下一个图像中。
在我的 .dockerignore
中添加 *.tar
后,现在可以正常工作了。
现在我正在试验 Docker。
我已经“安装”了一个 Docker Debian 镜像。 在这个Debian环境中,我安装了一个应用程序。
现在,我每天晚上都这样做:
- docker stop(停止容器)
- docker 提交(使容器成为 图片)
- docker保存(把图片保存到文件中,我这样做是为了备份 当前工作)
- docker 运行(启动容器)
如您所见,我尝试创建一个“备份解决方案”。
效果很好。但问题是,备份文件每天都在变得越来越大。 即使几天不碰容器。
以前不到10GB,现在已经20GB了。
这是为什么?我做错了什么?
非常感谢
Docker 图像会保存您每次提交的“差异”,以及图像的所有先前版本。这意味着您的过程可以保证稳定地增加最终图像的大小。为避免这种情况,您应该使用 docker export
而不是 docker save
(它接收容器作为参数,而不是图像)。
使用 docker commit
通常不是最佳做法。在 Docker 的 Build and run your image 教程等地方描述的 Docker 文件系统将让您编写一个文件,列出所有需要 运行 构建图像的命令.您可以将该文件签入源代码管理,并且 运行 docker build
每当您需要重新创建图像时。
如果 Dockerfile
与应用程序的源代码一起签入,您可以签出应用程序源的旧版本并从那里重新 docker build
图像。没有特别需要保存图像的二进制副本。
在技术层面上,docker commit
创建的图像总是包含原始图像,加上一个额外的 层,即容器中发生的任何变化。如果您重复 docker commit
,即使您删除或覆盖文件,每张图片都将始终比之前的图片大。 (典型的 Docker 图像小于 1 GB,并且根据应用程序 运行 时间和基础图像,通常在 100-200 MB 范围内。)
我遇到了同样的问题,直到我发现这是因为在 docker save
之后图像 tar
文件是在同一文件夹中生成的。
下次再次构建时,tar
文件也会包含在下一个图像中。
在我的 .dockerignore
中添加 *.tar
后,现在可以正常工作了。