在 docker 中更新包是要走的路吗?

问题描述

我最近一直在摆弄 Docker 并尝试使用这个 image。我刚刚了解了 ENTRYPOINT 是什么以及 Docker 的几个新命令,但后来我想:如果我想更新该映像的 NMAP 版本怎么办?我继续尝试了 apt 的东西,然后我意识到它是在 Alpine 上构建的,而使用 apk 却发现它没有安装,我不知道为什么。

也许这张图片的主人删除了它?如果是这样,我是否应该能够对已安装的软件包执行更新,还是图像维护者的任务?

解决方法

正如您共享的映像的 dockerfile 中所见,它以 alpine linux 映像作为基础映像,并且没有任何 apk 删除步骤。此外,它在 dockerfile 的开头有两个参数,然后用于在此映像中安装 nmap:

ARG nmap_ver=7.91

ARG build_rev=4

这意味着你可以下载这个 Dockerfile,在本地将这个 Dockerfile 中的版本更改为你想要的版本,然后构建一个镜像:

docker build -t nmap_myversion .

然后用你自己的镜像运行一个容器:

docker run -d --name my_nmap nmap_myversion

要回答您的问题,在已创建的映像中更新软件不是一个好方法,因为它会在您的 docker 容器中创建一个新层,该层将在容器删除后丢失。 最好的选择是在图像中完成此操作。很好的例子是这个 nmap 图像是如何创建的(参见上面的 Dockerfile)