我想优化我的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个包。
发布于 2016-03-26 05:22:13
作为对以前答案的更新,当前的docker build接受传递环境变量(如http_proxy )的--build-arg,而不将其保存在结果图像中。
示例:
# get squid
docker run --name squid -d --restart=always \
--publish 3128:3128 \
--volume /var/spool/squid3 \
sameersbn/squid:3.3.8-11
# optionally in another terminal run tail on logs
docker exec -it squid tail -f /var/log/squid3/access.log
# get squid ip to use in docker build
SQUID_IP=$(docker inspect --format '{{ .NetworkSettings.IPAddress }}' squid)
# build your instance
docker build --build-arg http_proxy=http://$SQUID_IP:3128 .发布于 2014-02-28 22:26:44
只需使用中间/基础镜像:
基础Dockerfile文件,使用docker build -t custom-base或其他工具构建它:
FROM centos:6.4
RUN yum update -y
RUN yum install -y openssh-server vim
RUN sed -i -e 's:keepcache=0:keepcache=1:' /etc/yum.conf应用程序Dockerfile:
FROM custom-base
VOLUME ["/var/cache/yum/x86_64/6"]
EXPOSE 22发布于 2014-02-28 16:31:20
您应该使用缓存代理(f.e Http Replicator,squid-deb-proxy ...)或者Ubuntu的apt-cacher-ng来缓存安装包。我想,你可以把这个软件安装到主机上。
编辑:
选项1-缓存http代理-使用修改后的Dockerfile文件更简单的方法:
> cd ~/your-project
> git clone https://github.com/gertjanvanzwieten/replicator.git
> mkdir cache
> replicator/http-replicator -r ./cache -p 8080 --daemon ./cache/replicator.log --static 添加到Dockerfile (在第一个运行行之前):
ENV http_proxy http://172.17.42.1:8080/您应该有选择地不时清除缓存。
选项2-缓存透明代理,不修改Dockerfile:
> cd ~/your-project
> curl -o r.zip https://codeload.github.com/zahradil/replicator/zip/transparent-requests
> unzip r.zip
> rm r.zip
> mv replicator-transparent-requests replicator
> mkdir cache
> replicator/http-replicator -r ./cache -p 8080 --daemon ./cache/replicator.log --static您需要以某个用户(非root用户!)的身份启动复制器。
设置透明重定向:
> iptables -t nat -A OUTPUT -p tcp -m owner ! --uid-owner <replicator-user> --dport 80 -j REDIRECT --to-port 8080禁用重定向:
> iptables -t nat -D OUTPUT -p tcp -m owner ! --uid-owner <replicator-user> --dport 80 -j REDIRECT --to-port 8080这种方法是最透明和通用的,您的Dockerfile不需要修改。您应该有选择地不时清除缓存。
https://stackoverflow.com/questions/22030931
复制相似问题