Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

docker build using previous build caches from registry

I'm configuring a bamboo build plan to build docker images. Using AWS ECS as registry. Build plan is something like this;

  • pull the latest tag

    docker pull xxx.dkr.ecr.eu-west-1.amazonaws.com/myimage:latest
    
  • build image with latest tag

    docker build -t myimage:latest .
    
  • tag the image (necessary for ECS)

    docker tag -f myimage:latest xxx.dkr.ecr.eu-west-1.amazonaws.com/myimage:latest
    
  • Push the image to the registry

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

Because build tasks run on different and fresh build engines/servers every time, It doesn't have local cache.

When I don't change anything at Dockerfile and execute it again(at another server), I would expect docker to use local cache(comes from docker pull) and doesn't execute each line again. But it tries to build image everytime. I was also expecting that when I change something at the bottom of the file, it's going to use cache and executes only the latest line, but I'm not sure about this.

Do I know something wrong or are there any opinions on approach?

like image 234
code_ada Avatar asked Dec 07 '17 14:12

code_ada


People also ask

Does docker pull cache?

Pulling cached imagesThe Docker daemon checks the Container Registry cache and fetches the images if it exists. If your daemon configuration includes other Docker mirrors, the daemon checks each one in order for a cached copy of the image.

How do I move docker images from one registry to another?

In order to transfer a Docker image from one server to another, what you need to do is first export the image to a file, then copy that file over from your current server to the new one using scp or rsync and finally load the image to your new server.

Does docker build push to registry?

The built image is then pushed to the Docker Hub registry. You can still use docker push to push pre-built images to repositories with Automated Builds configured. If you have automated tests configured, these run after building but before pushing to the registry.

Where is docker build cache stored?

The cache uses the same storage driver as used for image layers. Metadata is stored in databases at /var/lib/docker/buildkit . When using overlay2 driver the layer itself is in /var/lib/docker/overlay2/<ID>/diff/ . For <ID> , see below. /var/lib/docker can vary depending on data-root in your dockerd configuration.


1 Answers

are you considering using squid proxy ?

edit : in case you dont want to go to the official website above, here is quick setup on squid proxy (debian based)

apt-get install squid-deb-proxy

and then change the squid configuration to create a larger space by open up

/etc/squid/squid.conf

and replace #cache_dir ufs /var/spool/squid with cache_dir ufs /var/spool/ squid 10000 16 256 and there you go,, a 10.000 MB worth of cache space

and then point the proxy address in dockerfile,, here is a example of dockerfile with squid proxy

yum and apt-get based distro:

apt-get based distro

`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 based distro

`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"]`

lets say you install squid proxy in your aws registry,,only the first build would fetch the data from the internet the rest (another server) build should be from the squid proxy cached. .

this technique based on book docker in practice technique 57 with tittle set up a package cache for faster build

i dont think there is a cache feature in docker without any third party software.. maybe there is and i just dont know it. .im not sure,, just correct me if im wrong. .

like image 63
Fendi jatmiko Avatar answered Oct 19 '22 02:10

Fendi jatmiko