我有一个基于Ubuntu基础映像构建的DockerFile。我还有以下命令指示我的容器进行更新:
RUN apt-get update
如果我在不同的时间点运行我的容器,我不能保证我的Ubuntu基本映像和每次使用apt-get update命令更新的相应包都是相同的。我怎样才能保证它始终保持不变?
答案 0 :(得分:3)
您应该在自己的基本映像中运行RUN apt-get update,然后使用已知标记将其发布/部署到dockerhub,例如:建造日期。然后在随后的图像中,您可以说出如下所示的内容。这样,即使您对Dockerfile进行了大量更改,也永远不会从依赖关系更新。
FROM me/ubuntu:18_11_2014
答案 1 :(得分:1)
首先,请务必注意,只有在您运行docker build
时才会更新图片,而不是docker run
。即便如此,Docker默认会缓存图层,如果上面的某些内容发生更改或您明确关闭了缓存,则只会重新运行apt-get update
行。
几乎不可能确保您的构建始终生成完全相同的图像,这是一个已知问题。您最好的办法是将版本号传递给apt-get,例如apt-get install -y nautilus=2.2.4-1
,对你来说应该足够好了。但是,请记住,已安装软件引入的任何依赖项可能已更改(依赖项通常指定为> =特定版本),这意味着映像仍可能更改。此外,请记住,在某些时候,旧的软件包将从Debian存储库中删除。
答案 2 :(得分:0)
只有在构建图像时才会执行该命令。
如果要在每次启动容器时运行命令,则应考虑使用CMD
语句而不是RUN
语句。