代码之家  ›  专栏  ›  技术社区  ›  Anil

Docker如何修改现有图像

  •  0
  • Anil  · 技术社区  · 6 年前

    我在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的正确方法吗?如何确保所有这些图像都消失?

    我在Windows10上使用Docker 18.09.1版桌面

    1 回复  |  直到 6 年前
        1
  •  1
  •   David Maze    6 年前

    Docker图像是 不变的 ;一旦创建了一个图像,就不能再更改它。

    创建图像的正确方法是使用 docker build . Docker有一个很好的 official tutorial on creating and running custom images ;虽然它是面向Python的,但是这里的基本技术适用于任何语言。

    使用 docker commit 几乎总是错的。Dockerfile只是一个基本的步骤列表,用于构建图像开始 FROM 一些基础图像, COPY 在一些文件中, RUN 有些命令和编写dockerfile通常和编写文本图像的步骤一样容易。您还需要与其他人一起处理需要此描述的图像,因此,当您开始使用的基础图像在六个月内有一个关键的安全修复时,您需要记住如何构建它。

    我通常发现的工作流程是:

    1. 在本地构建和测试我的应用程序, 没有码头工人参与 .
    2. 编写一个构建我的应用程序的dockerfile,其中不包含任何开发或测试工具。检查一下 docker run 就地手动测试。将dockerfile添加到我的源代码管理存储库中。
    3. (可选,但推荐)设置一个持续集成服务器和Docker注册表,以便在每次提交时,在本地单元测试通过后,构建一个新映像,并 docker push 预计起飞时间。

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

    推荐文章