Docker基本镜像状态复制

我有一个DockerFile从Ubuntu的基础形象构build。 我也有以下命令,指示我的容器进行更新:

RUN apt-get update 

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

您应该在您自己的基本映像中运行apt apt-get update,然后使用已知标记(例如构builddate)将其发布/部署到dockerhub。 然后在你的后续图像中,你可以像下面这行一样说。 这样,即使您对Dockerfile进行了大量更改,也不会有依赖关系从您下面更新。

 FROM me/ubuntu:18_11_2014 

首先,重要的是要注意,只有在运行docker build ,而不是docker run ,才会更新图像。 即使这样,默认情况下,Docker会caching图层, apt-get update行将只在其上方发生更改或者明确closurescaching时重新运行。

几乎不可能确保你的版本始终产生完全相同的图像,这是一个已知的问题。 你最好的select是把一个版本号传给apt-get,例如apt-get install -y nautilus=2.2.4-1 ,这对你来说应该是足够好的了。 但是,请记住,安装的软件引入的任何依赖关系可能已经改变(依赖关系通常被指定为> =特定版本),这意味着图像仍然可能改变。 另外,请记住,在某些时候,旧的软件包将被简单地从Debian软件仓库中删除。

该命令仅在构build图像时执行。 如果要在每次启动容器时运行命令,则应考虑使用CMD语句,而不要使用RUN