Skip to content

Instantly share code, notes, and snippets.

@rheinwein
Created January 11, 2017 19:48
Show Gist options
  • Save rheinwein/9c9bee12074911ad9e50be77d5f3409a to your computer and use it in GitHub Desktop.
Save rheinwein/9c9bee12074911ad9e50be77d5f3409a to your computer and use it in GitHub Desktop.
--cache-test test

Validating expected behavior when using --cache-test and building an image from a cache source that does not have a local parent chain.

Pull image from remote source

cache-test $ docker pull rheinwein/cache-test
Using default tag: latest
latest: Pulling from rheinwein/cache-test
557a0c95bfcd: Pull complete 
98a89d507c56: Pull complete 
Digest: sha256:b371d0ae80c1002120b20d07266d4afb5d3d5d0660b4324b27268a2bcbcdee7d
Status: Downloaded newer image for rheinwein/cache-test:latest
cache-test $ docker images
REPOSITORY             TAG                 IMAGE ID            CREATED              SIZE
rheinwein/cache-test   latest              5c5adeb44f12        About a minute ago   1.11 MB

Verify that the parent chain is <missing>

cache-test $ docker history rheinwein/cache-test
IMAGE               CREATED              CREATED BY                                      SIZE                COMMENT
5c5adeb44f12        About a minute ago   /bin/sh -c touch some-file                      0 B                 
<missing>           About a minute ago   /bin/sh -c #(nop)  ENV BAR=baz                  0 B                 
<missing>           About a minute ago   /bin/sh -c #(nop)  ENV FOO=bar                  0 B                 
<missing>           4 days ago           /bin/sh -c #(nop)  CMD ["sh"]                   0 B                 
<missing>           4 days ago           /bin/sh -c #(nop) ADD file:a02309eb1d0650f...   1.11 MB             

...and that we've definitely got layers that should use the cache (they match)

cache-test $ cat Dockerfile
FROM busybox@sha256:ae007bdb45fc0d56e3d705b97640ac24844bcc9ce4c8b8493f216a57ab6af0d5
ENV FOO=bar
ENV BAR=baz
RUN touch some-file

Build the image with the --cache-from flag referencing the pulled image

cache-test $ docker build --cache-from rheinwein/cache-test -t rheinwein/cache-test .
Sending build context to Docker daemon 2.356 MB
Step 1/4 : FROM busybox@sha256:ae007bdb45fc0d56e3d705b97640ac24844bcc9ce4c8b8493f216a57ab6af0d5
sha256:ae007bdb45fc0d56e3d705b97640ac24844bcc9ce4c8b8493f216a57ab6af0d5: Pulling from library/busybox
557a0c95bfcd: Already exists 
Digest: sha256:ae007bdb45fc0d56e3d705b97640ac24844bcc9ce4c8b8493f216a57ab6af0d5
Status: Downloaded newer image for busybox@sha256:ae007bdb45fc0d56e3d705b97640ac24844bcc9ce4c8b8493f216a57ab6af0d5
 ---> 8a4698b1752b
Step 2/4 : ENV FOO bar
 ---> Using cache
 ---> 299c99f89afd
Step 3/4 : ENV BAR baz
 ---> Using cache
 ---> 60f06037a15e
Step 4/4 : RUN touch some-file
 ---> Using cache
 ---> 5c5adeb44f12
Successfully built 5c5adeb44f12
cache-test $ docker images
REPOSITORY             TAG                 IMAGE ID            CREATED             SIZE
rheinwein/cache-test   latest              5c5adeb44f12        2 minutes ago       1.11 MB
busybox                <none>              8a4698b1752b        4 days ago          1.11 MB

It works! ⭐️

Try the same process, but use a saved/loaded image instead of a pulled image

cache-test $ docker save rheinwein/cache-test > cache-test.tar
cache-test $ docker rmi $(docker images -q)
Untagged: rheinwein/cache-test:latest
Untagged: rheinwein/cache-test@sha256:b371d0ae80c1002120b20d07266d4afb5d3d5d0660b4324b27268a2bcbcdee7d
Deleted: sha256:5c5adeb44f124a68caa1079296f228e4c0f6010ee0e2bf52dce6d745f3121e14
Deleted: sha256:607fd9f84db6cd48296b724abe4eb5a3ceb5a8d51679b5dceea121609fec11d5
Deleted: sha256:60f06037a15ecf48ccca87d77efeecdaf86b4d565546d70b40fd47927a299800
Deleted: sha256:299c99f89afd719ce76bad0c6f7982ee4fe4276f00b836a44c9a9c0ff89e69dc
Untagged: busybox@sha256:ae007bdb45fc0d56e3d705b97640ac24844bcc9ce4c8b8493f216a57ab6af0d5
Deleted: sha256:8a4698b1752b8142df16b73eca10c8b03fbd2ccbbd03cfd47882f04ace12de66
Deleted: sha256:c85de82f7789ba8696cf905ea603deccc1b082db21181117e1f74d1dd77adf47

Load the image

cache-test $ docker load -i cache-test.tar 
c85de82f7789: Loading layer [==================================================>] 1.312 MB/1.312 MB
049a6e712954: Loading layer [==================================================>] 1.536 kB/1.536 kB
Loaded image: rheinwein/cache-test:latest
cache-test $ docker images
REPOSITORY             TAG                 IMAGE ID            CREATED             SIZE
rheinwein/cache-test   latest              5c5adeb44f12        3 minutes ago       1.11 MB

Verify that our caching expectations are valid

cache-test $ docker history rheinwein/cache-test
IMAGE               CREATED             CREATED BY                                      SIZE                COMMENT
5c5adeb44f12        3 minutes ago       /bin/sh -c touch some-file                      0 B                 
<missing>           3 minutes ago       /bin/sh -c #(nop)  ENV BAR=baz                  0 B                 
<missing>           3 minutes ago       /bin/sh -c #(nop)  ENV FOO=bar                  0 B                 
<missing>           4 days ago          /bin/sh -c #(nop)  CMD ["sh"]                   0 B                 
<missing>           4 days ago          /bin/sh -c #(nop) ADD file:a02309eb1d0650f...   1.11 MB             

Rebuild with the --cache-from flag

cache-test $ docker build --cache-from rheinwein/cache-test -t rheinwein/cache-test .
Sending build context to Docker daemon 3.683 MB
Step 1/4 : FROM busybox@sha256:ae007bdb45fc0d56e3d705b97640ac24844bcc9ce4c8b8493f216a57ab6af0d5
sha256:ae007bdb45fc0d56e3d705b97640ac24844bcc9ce4c8b8493f216a57ab6af0d5: Pulling from library/busybox
557a0c95bfcd: Already exists 
Digest: sha256:ae007bdb45fc0d56e3d705b97640ac24844bcc9ce4c8b8493f216a57ab6af0d5
Status: Downloaded newer image for busybox@sha256:ae007bdb45fc0d56e3d705b97640ac24844bcc9ce4c8b8493f216a57ab6af0d5
 ---> 8a4698b1752b
Step 2/4 : ENV FOO bar
 ---> Using cache
 ---> 299c99f89afd
Step 3/4 : ENV BAR baz
 ---> Using cache
 ---> 60f06037a15e
Step 4/4 : RUN touch some-file
 ---> Using cache
 ---> 5c5adeb44f12
Successfully built 5c5adeb44f12

This also works ⭐️

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment