我在 docker 中创建了一个图像。在其中安装了 Ubuntu、JDK 和其他几个库。然后我退出容器并做了这样的提交
docker commit a7b95082f6ea anil-ubuntu
我又启动了容器
docker run -p 5901:5901 -t -i anil-ubuntu
这次我安装了 gradle 和其他几个库。然后退出容器并再次提交。
docker commit a7b95082f6ea anil-ubuntu
每次我提交时,都会创建一个新图像,并保留带有存储库和标签的旧图像。按照这个工作流程,我很快就会用完空间。这是使用 docker 的正确方法吗?我如何确保所有这些图像都消失。
我在 Windows 10 上使用 docker 版本 18.09.1 桌面
最佳答案
Docker 镜像不可变;一旦你创建了一个图像,你就永远不能再改变它。
创建图像的正确方法是使用 docker build
. Docker 有一个相当不错的 official tutorial on creating and running custom images ;虽然它是面向 Python 的,但这里的基本技术适用于任何语言。
使用 docker commit
几乎总是错的。 Dockerfile 只是您用于构建镜像的步骤的基本列表 – 开始 FROM
一些基本图像,COPY
在某些文件中,RUN
一些命令——通常编写 Dockerfile 就像写出构建图像所涉及的步骤一样容易。您还需要与需要此描述的其他人一起处理您的镜像,并且当您开始使用的基本镜像在六个月内有一个关键的安全修复时,您需要自己记住如何你 build 了它。
我通常找到的工作流程是:
- 在本地构建和测试我的应用程序,完全没有 Docker 参与。
- 编写一个 Dockerfile 来构建我的应用程序,其中没有任何开发或测试工具。检查它
docker run
在本地进行手动测试。将 Dockerfile 添加到我的源代码控制存储库。 - (可选但推荐)设置一个持续集成服务器和 Docker 注册表,以便在每次提交时,在本地单元测试通过后,都会构建一个新图像并
docker push
编辑。
是的,这会导致旧图像备份,但这并不是真正有害的。您可以使用 docker system prune
清理它们。
关于Docker如何修改现有图像,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54617070/