Docker基础映像状态复制

时间:2014-11-18 10:30:15

标签: docker

我有一个基于Ubuntu基础映像构建的DockerFile。我还有以下命令指示我的容器进行更新:

RUN apt-get update

如果我在不同的时间点运行我的容器,我不能保证我的Ubuntu基本映像和每次使用apt-get update命令更新的相应包都是相同的。我怎样才能保证它始终保持不变?

3 个答案:

答案 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语句。