【发布时间】:2014-03-28 15:55:56
【问题描述】:
我想优化我的 Dockerfile。我希望将缓存文件保存在磁盘中。
但是,我在运行docker build . 时发现它总是尝试从网络中获取每个文件。
我希望在构建期间共享我的缓存目录(例如 /var/cache/yum/x86_64/6)。
但是,它只适用于docker run -v ...。
有什么建议吗?(在这个例子中,只安装了 1 个 rpm,在实际情况下,我需要安装数百个 rpm)
我的 Dockerfile 草案
FROM centos:6.4
RUN yum update -y
RUN yum install -y openssh-server
RUN sed -i -e 's:keepcache=0:keepcache=1:' /etc/yum.conf
VOLUME ["/var/cache/yum/x86_64/6"]
EXPOSE 22
第二次,我想构建一个类似的图像
FROM centos:6.4
RUN yum update -y
RUN yum install -y openssh-server vim
我不想再次从 internat 获取 openssh-server(它很慢)。在我的实际情况下,它不是一个包,大约是 100 个包。
【问题讨论】:
-
只是为了确保我正确理解了这个问题:如果你运行该 Dockerfile 两次,第二次会很快,对吧?如果没有,您的 Docker 设置可能有问题,因为这应该可以正常工作。但是,如果您的问题是关于“我如何构建多个 Dockerfile 并拥有一个共同的 yum/apt 缓存”,那么情况就不同了 :-)
-
所提出的问题是特定于 CentOS 的,但对于使用 Debian 及其衍生产品的读者,请参阅 docs.docker.com/examples/apt-cacher-ng
-
你可以做一个通用的基础镜像,并从 mybaseimage 使用它,但我相信你说的是缓存代理,那是另一回事(例如 apt-cacher,或积极的代理缓存),或者您可以在构建 Dockerfile 之前下载所有包并添加它们。