docker基于包含更新图像

2024-04-25 09:53:08 发布

您现在位置:Python中文网/ 问答频道 /正文

每当我使用docker容器时,我发现随着项目的增长,不可避免地需要安装新的python包、节点模块和opencv等整个api。在

但是当我重建一个docker镜像时,我安装的所有新软件和软件包都会被清除掉——因为它们没有在dockerfile中指定。在

有没有办法用我所做的新安装自动更新dockerfile,或者创建一个存储apt-get包的卷?在


Tags: 模块项目dockerdockerfileapiget镜像节点
2条回答

all of the new software and packages that I installed get wiped out - as they are not specified in the dockerfile

这是一个错误:修复它。在

一般来说,您不应该在容器中的交互式shell中安装软件。正如您所注意到的,当容器退出时,您将丢失所有的工作,而且由于您还没有在Dockerfile中写下东西,所以您的同事或您的生产环境没有好的方法来重现您所做的工作。在

我建议工作流程如下:

  1. 不使用Docker构建一个工作应用程序。确保所有的语言级依赖项都记录在适当的文件(package.jsonsetup.pyrequirements.txt)中。您应该能够使用源代码树和适当的语言运行库在干净的环境中运行应用程序。

  2. 编写一个Dockerfile来安装语言运行时、任何必需的主机库依赖项和应用程序。生成的图像应该是完全自包含的;您不应该需要docker exec来做事情。

  3. 更新应用程序时,在本地运行其测试,然后docker build新映像,删除旧容器,docker run个新容器。

如果你浏览一下SO问题,你会看到很多评论,内容大致是“请在问题中包含你的Dockerfile”。六个月后,你可以和你的同事分享一个可复制的形象。你不应该使用docker commit:这是一个为你自己设置一个非常特殊的映像的方法,你不记得你是如何构建的,因此永远无法更新,一旦你有了一个关键的安全更新或需要安装的新软件,这将是一个问题。在

我想docker commit可能对你的案子有帮助

请查看以下示例:

  • 从基本“高山”图像创建容器
  • 在容器中添加一个tmp文件
  • 使用“docker commit”并从中创建一个新映像
  • 从具有先前添加的文件的自定义映像启动一个新容器

[node1] (local) root@192.168.0.8 ~
$ docker ps -a
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS               NAMES
[node1] (local) root@192.168.0.8 ~

$ docker images
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
alpine              latest              196d12cf6ab1        2 months ago        4.41MB
[node1] (local) root@192.168.0.8 ~$ docker run -it alpine /bin/sh
/ # date > /tmp/now.txt
/ # cat /tmp/now.txt
Thu Nov 22 08:16:50 UTC 2018
/ # exit
[node1] (local) root@192.168.0.8 ~


$ docker ps -a
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS                     PORTS               NAMES
6e0913313df1        alpine              "/bin/sh"           25 seconds ago      Exited (0) 4 seconds ago                       practical_knuth
[node1] (local) root@192.168.0.8 ~
$ docker commit 6e0913313df1 custom-alpine:123
sha256:188d17ff3c5577ee858a6d71fbad410bb142fa818e11d0c965cdc634280512e2
[node1] (local) root@192.168.0.8 ~
$ docker images
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
custom-alpine       123                 188d17ff3c55        4 seconds ago       4.41MB
alpine              latest              196d12cf6ab1        2 months ago        4.41MB
[node1] (local) root@192.168.0.8 ~


$ docker history custom-alpine:123
IMAGE               CREATED             CREATED BY                                      SIZE                COMMENT
188d17ff3c55        15 seconds ago      /bin/sh                                         72B
196d12cf6ab1        2 months ago        /bin/sh -c #(nop)  CMD ["/bin/sh"]              0B
<missing>           2 months ago        /bin/sh -c #(nop) ADD file:25c10b1d1b41d46a1…   4.41MB
[node1] (local) root@192.168.0.8 ~


$ docker run -it custom-alpine:123 /bin/sh
/ # cat /tmp/now.txt
Thu Nov 22 08:16:50 UTC 2018
/ # date
Thu Nov 22 08:18:46 UTC 2018
/ # exit
[node1] (local) root@192.168.0.8 ~
$

相关问题 更多 >