Docker基本映像状态复制
我有一个DockerFile,它是从Ubuntu的基本映像构建的。我还有以下命令指示容器执行更新:Docker基本映像状态复制,docker,Docker,我有一个DockerFile,它是从Ubuntu的基本映像构建的。我还有以下命令指示容器执行更新: RUN apt-get update 如果我在不同的时间点运行我的容器,我不能保证我的Ubuntu基本映像和每次使用apt get update命令更新的相应包是相同的。如何保证它始终保持不变?该命令仅在生成映像时执行。 如果您想在每次启动容器时运行一个命令,则应该考虑使用 CMD< /COM>语句,而不是运行一个。 < P>您应该在自己的基础映像中运行RunAPT get更新,然后用已知的标记
RUN apt-get update
如果我在不同的时间点运行我的容器,我不能保证我的Ubuntu基本映像和每次使用apt get update命令更新的相应包是相同的。如何保证它始终保持不变?该命令仅在生成映像时执行。
如果您想在每次启动容器时运行一个命令,则应该考虑使用<代码> CMD< /COM>语句,而不是<代码>运行<代码>一个。 < P>您应该在自己的基础映像中运行RunAPT get更新,然后用已知的标记(例如,构建日期)发布/部署到DoCKHub。然后在随后的图像中,你可以说下面这行。这样,即使您对Dockerfile进行了大量更改,您也永远不会从下面更新依赖项
FROM me/ubuntu:18_11_2014
首先,需要注意的是,只有运行
docker build
,图像才会更新,而不是通过docker run
。即使如此,Docker默认情况下也会缓存层,apt get update
行只有在上面的内容发生更改或您明确关闭缓存时才会重新运行
几乎不可能确保构建始终生成完全相同的映像,这是一个已知的问题。您最好将版本号传递给apt get,例如,
apt get install-y nautilus=2.2.4-1
,这对您来说应该足够好了。但是,请记住,由安装的软件拉入的任何依赖项都可能已更改(依赖项通常被指定为>=特定版本),这意味着映像仍有可能更改。另外,请记住,在某些时候,旧的软件包只会从Debian repos中删除。您的容器映像只有在您构建它们或提交更改时才会更改。您能否澄清一下,在您的示例中,with
应该是from
吗?您是否希望事情每天都发生变化(例如,获取安全修复)还是长期保持不变(例如,避免意外的不兼容)?