docker build使用来自注册表的先前构建缓存

时间:2017-12-07 14:30:42

标签: docker continuous-deployment docker-build

我正在配置竹子构建计划来构建泊坞窗图像。使用AWS ECS作为注册表。构建计划是这样的;

  • 拉出最新的标签

    docker pull xxx.dkr.ecr.eu-west-1.amazonaws.com/myimage:latest
    
  • 使用最新代码构建图片

    docker build -t myimage:latest .
    
  • 标记图像(ECS必需)

    docker tag -f myimage:latest xxx.dkr.ecr.eu-west-1.amazonaws.com/myimage:latest
    
  • 将图片推送到注册表

    docker push xx.dkr.ecr.eu-west-1.amazonaws.com/myimage:latest
    

因为构建任务每次都在不同的新构建引擎/服务器上运行,所以它没有本地缓存​​。

当我在Dockerfile上没有更改任何内容并再次执行它(在另一台服务器上)时,我希望docker使用本地缓存(来自docker pull)并且不再执行每一行。但它每次都试图建立图像。我也期待当我在文件底部更改某些内容时,它将使用缓存并仅执行最新的行,但我不确定这一点。

我是否知道错误或对方法有任何意见?

1 个答案:

答案 0 :(得分:4)

你在考虑使用squid proxy吗? ?

编辑:万一你不想去上面的官方网站,这里是快速设置squid代理(基于debian)

apt-get install squid-deb-proxy

然后通过打开

更改squid配置以创建更大的空间
/etc/squid/squid.conf

并将#cache_dir ufs /var/spool/squid替换为cache_dir ufs /var/spool/ squid 10000 16 256 然后你去,一个10.000 MB的缓存空间

然后将代理地址指向dockerfile ,, 这是一个带有squid代理的dockerfile的例子

以yum和apt-get为基础的发行版:

  

基于apt-get的发行版

`FROM debian
RUN apt-get update -y && apt-get install net-tools
RUN echo "Acquire::http::Proxy \"http://$( \
route -n | awk '/^0.0.0.0/ {print $2}' \
):8000\";" \ > /etc/apt/apt.conf.d/30proxy
RUN echo "Acquire::http::Proxy::ppa.launchpad.net DIRECT;" >> \
/etc/apt/apt.conf.d/30proxy
CMD ["/bin/bash"]`
  基于yum的发行版

`FROM centos:centos7
RUN yum update -y && yum install -y net-tools
RUN echo "proxy=http://$(route -n | \
awk '/^0.0.0.0/ {print $2}'):3128" >> /etc/yum.conf
RUN sed -i 's/^mirrorlist/#mirrorlist/' \
/etc/yum.repos.d/CentOS-Base.repo
RUN sed -i 's/^#baseurl/baseurl/' \
/etc/yum.repos.d/CentOS-Base.repo
RUN rm -f /etc/yum/pluginconf.d/fastestmirror.conf
RUN yum update -y
CMD ["/bin/bash"]`

假设您在aws注册表中安装squid代理,只有第一个版本会从互联网上获取数据,其余(另一个服务器)构建应该来自缓存的squid代理。

此技术基于本书 docker in practice 技术57,其中tittle 设置包缓存以加快构建速度

我不认为没有任何第三方软件的docker中有缓存功能..也许有,我只是不知道它。 。我不确定,, 如果我错了,请纠正我。