docker - 基于容器更新图像

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

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

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


慕哥9229398
浏览 145回答 2
2回答

青春有我

我安装的所有新软件和软件包都被清除了 - 因为它们没有在 dockerfile 中指定这是一个错误:修复它。作为一般规则,您不应在容器的交互式 shell 中安装软件。正如您所注意到的,当容器退出时,您将丢失所有工作,并且由于您没有在 Dockerfile 中写下内容,因此您的同事或生产环境无法重现您所做的工作。我建议采用以下工作流程:完全不使用 Docker 构建一个可以工作的应用程序。确保所有语言级依赖项都记录在适当的文件 ( package.json, setup.py, requirements.txt) 中。您应该能够在干净的环境中使用源代码树和适当的语言运行时运行您的应用程序。编写一个 Dockerfile 来安装语言运行时、任何所需的主机库依赖项和您的应用程序。生成的图像应该是完全独立的;你永远不需要docker exec进入它来做事。当您更新应用程序时,在本地运行其测试,然后是docker build新映像,删除旧容器和docker run新容器。如果您浏览 SO 码头工人问题,您会看到许多类似“请在问题中包含您的 Dockerfile”的评论。这是构建图像的一种直接且可重复的方式,您现在可以与您的同事分享,或者在六个月后与您自己分享。你永远不应该使用docker commit:这是一个为自己设置一个非常特殊的图像的方法,你不记得你是如何构建的,因此永远无法更新,一旦你有一个关键的安全更新或你需要的新软件,这将是一个问题安装。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python