更新 docker 中的包是否可行?
Is updating a package inside a docker the way to go?
我最近一直在摆弄 Docker 并尝试这个 image。我刚刚了解了什么是 ENTRYPOINT 以及 Docker 的几个新命令,但后来我想:如果我想更新该图像的 NMAP 版本怎么办?我继续尝试 apt 的东西,然后我意识到它是在 Alpine 上构建的,wchich 使用 apk 并发现它没有安装,我不知道为什么。
也许这张图片的所有者删除了它?如果是这样,我应该能够对安装的软件包执行更新,还是图像维护者的任务?
从您分享的 dockerfile 图像中可以看出,它以高山 linux 图像作为基础图像,并且没有任何 apk 的删除步骤。它还在 docker 文件的开头有两个参数,然后用于在该映像中安装 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)
我最近一直在摆弄 Docker 并尝试这个 image。我刚刚了解了什么是 ENTRYPOINT 以及 Docker 的几个新命令,但后来我想:如果我想更新该图像的 NMAP 版本怎么办?我继续尝试 apt 的东西,然后我意识到它是在 Alpine 上构建的,wchich 使用 apk 并发现它没有安装,我不知道为什么。
也许这张图片的所有者删除了它?如果是这样,我应该能够对安装的软件包执行更新,还是图像维护者的任务?
从您分享的 dockerfile 图像中可以看出,它以高山 linux 图像作为基础图像,并且没有任何 apk 的删除步骤。它还在 docker 文件的开头有两个参数,然后用于在该映像中安装 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)