Docker如何修改现有映像

时间:2019-02-10 13:52:02

标签: 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桌面

1 个答案:

答案 0 :(得分:2)

Docker映像是不可变的;创建图像后,就无法再更改了。

创建图像的正确方法是使用sample._id。 Docker有一个相当不错的official tutorial on creating and running custom images;尽管它是面向Python的,但此处的基本技术适用于任何语言。

使用docker build几乎总是错误的。 Dockerfile只是用于构建映像的步骤的基本清单–开始docker commit一些基础映像,FROM一些文件,COPY一些命令–通常,轻松编写Dockerfile就像写出构建文本图像所涉及的步骤一样。您还需要与其他人一起处理需要此描述的图像,因此,当您从基础图像开始六个月内完成关键安全修复程序时,您需要自己记住如何你建造的。

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

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

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