Docker如何修改现有图像

标签 docker

我在 docker 中创建了一个图像。在其中安装了 Ubuntu、JDK 和其他几个库。然后我退出容器并做了这样的提交

docker commit a7b95082f6ea anil-ubuntu

我又启动了容器

docker run -p 5901:5901 -t -i anil-ubuntu

这次我安装了 gradle 和其他几个库。然后退出容器并再次提交。

 docker commit a7b95082f6ea anil-ubuntu

enter image description here

每次我提交时,都会创建一个新图像,并保留带有存储库和标签的旧图像。按照这个工作流程,我很快就会用完空间。这是使用 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 了它。

我通常找到的工作流程是:

  1. 在本地构建和测试我的应用程序,完全没有 Docker 参与
  2. 编写一个 Dockerfile 来构建我的应用程序,其中没有任何开发或测试工具。检查它 docker run在本地进行手动测试。将 Dockerfile 添加到我的源代码控制存储库。
  3. (可选但推荐)设置一个持续集成服务器和 Docker 注册表,以便在每次提交时,在本地单元测试通过后,都会构建一个新图像并 docker push编辑。

是的,这会导致旧图像备份,但这并不是真正有害的。您可以使用 docker system prune 清理它们。

关于Docker如何修改现有图像,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54617070/

相关文章:

python - 确定 docker 镜像的操作系统分布

python - Windows 客户端无法与在 linux docker 容器中运行的服务器通信

docker - 如何在 Github 操作中为计算引擎虚拟机拉取 Docker 镜像?

docker - Docker 内运行的网站的主机名

javascript - 在 CircleCI 上的 Nightwatch 测试期间选择要上传的文件(图像)

docker - 如何从 dockerfile 构建奇异容器

ruby-on-rails - 如何检查docker容器内的ruby版本

java - Docker 禁用重启失败

docker - nginx:在/etc/nginx/conf.d/default.conf:1中不允许使用[emerg] “http”指令

Docker 内部 docker : volume is mounted, 但空