diff options
| author | mo khan <mo.khan@gmail.com> | 2020-06-10 20:43:08 -0600 |
|---|---|---|
| committer | mo khan <mo.khan@gmail.com> | 2020-06-10 20:43:08 -0600 |
| commit | 6f65e7fa18a406c5b233d7d692186b302d594971 (patch) | |
| tree | 55b09e591e34c2f5c37f45af28332fff25e68339 | |
| parent | c5794d5b829ab12d09b535d8aaf2faad56cc6cf2 (diff) | |
build large image and small image
| -rw-r--r-- | README.md | 75 | ||||
| -rw-r--r-- | examples/001/dive-exec.sh | 6 | ||||
| -rw-r--r-- | examples/001/docker-exec.sh | 6 | ||||
| -rw-r--r-- | examples/001/docker-large-download.sh | 4 | ||||
| -rw-r--r-- | examples/002/Dockerfile | 8 | ||||
| -rw-r--r-- | examples/003/Dockerfile | 8 | ||||
| -rw-r--r-- | examples/003/run.sh | 8 |
7 files changed, 94 insertions, 21 deletions
@@ -5,12 +5,9 @@ date: 2020-06-10 --- # Developing with Docker +## Mo Khan -Mo Khan - -Backend Engineer - -Composition Analysis, GitLab +| Software Engineer | Composition Analysis | GitLab | # Agenda @@ -209,8 +206,13 @@ relative: true lang: docker ``` -```terminal8 -tree ./examples/001 +```bash +$ cat examples/001/hello.rb +``` +```file +path: examples/001/hello.rb +relative: true +lang: ruby ``` # Dockerfile - RUN @@ -267,26 +269,31 @@ docker ps --format "table {{.ID}}\t{{.Image}}\t{{.Status}}" # docker exec -it <imageid> /bin/sh ```terminal32 -docker exec -it $(docker ps | grep developing-with-docker:latest | awk '{ print $1 }' | tail -n1) /bin/sh +bash -i examples/001/docker-exec.sh ``` # dive +Useful for identifying bloat. +https://github.com/wagoodman/dive + +* Displays each layer +* Allows investigating files that are added/removed/changed in each layer + ```terminal32 -dive $(docker ps | grep developing-with-docker:latest | awk '{ print $1 }' | tail -n1) /bin/sh +bash examples/001/dive-exec.sh ``` -* Describe layers -* Downloading multiple layers in parallel vs 1 large layer - # Compression -More layers == more parallel downloads -Smaller layers == faster downloads per layer +* More layers == more parallel downloads +* Smaller layers == faster downloads per layer -# Compression (zstd) +```terminal16 +bash -i examples/001/docker-large-download.sh +``` -* Deflate files within layers +# docker build -t big-image:latest examples/002/ ```file path: examples/002/Dockerfile @@ -294,24 +301,50 @@ relative: true lang: docker ``` -# Compression (zstd) +```terminal32 +docker build -t big-image:latest examples/002/ +``` +# docker image ls + +```terminal8 +docker image ls --format "table {{.ID}}\t{{.Repository}}\t{{.Tag}}\t{{.Size}}" +``` + +# docker build -t small-image:latest examples/003/ + +* Collapse layers +* Cleanup unnecessary artifacts +* Deflate files within layers * Inflate files when container is launched ```file -path: examples/002/run.sh +path: examples/003/Dockerfile relative: true lang: docker ``` -# Compression +```file +path: examples/003/run.sh +relative: true +lang: sh +``` + +```terminal32 +docker build -t small-image:latest examples/003/ +``` -Before: +# docker image ls -After: +```terminal8 +docker image ls --format "table {{.ID}}\t{{.Repository}}\t{{.Tag}}\t{{.Size}}" +``` # Summary +* Keep each layer small +* More layers means more parallel downloads + # Fin Thank you for your time diff --git a/examples/001/dive-exec.sh b/examples/001/dive-exec.sh new file mode 100644 index 0000000..a14c43d --- /dev/null +++ b/examples/001/dive-exec.sh @@ -0,0 +1,6 @@ +#!/bin/sh + +set -e +image_id="$(docker image ls developing-with-docker | awk '{ print $3 }' | grep -v REPO | tail -n1)" +echo "$ dive $image_id" +dive "$image_id" diff --git a/examples/001/docker-exec.sh b/examples/001/docker-exec.sh new file mode 100644 index 0000000..39478b2 --- /dev/null +++ b/examples/001/docker-exec.sh @@ -0,0 +1,6 @@ +#!/bin/sh + +set -e + +image_id="$(docker ps | grep developing | awk '{ print $1 }' | tail -n1)" +docker exec -it "$image_id" /bin/sh diff --git a/examples/001/docker-large-download.sh b/examples/001/docker-large-download.sh new file mode 100644 index 0000000..659004c --- /dev/null +++ b/examples/001/docker-large-download.sh @@ -0,0 +1,4 @@ +#!/bin/sh + +docker rmi -f "$(docker images | grep 'license-management')" 2> /dev/null +docker pull registry.gitlab.com/gitlab-org/security-products/license-management:latest diff --git a/examples/002/Dockerfile b/examples/002/Dockerfile new file mode 100644 index 0000000..f875871 --- /dev/null +++ b/examples/002/Dockerfile @@ -0,0 +1,8 @@ +FROM debian:stable-slim +RUN apt-get update -y +RUN apt-get upgrade -y +RUN apt-get install -y git +RUN apt-get install -y ruby +RUN apt-get install -y zstd +RUN git clone --verbose https://github.com/spandx/cache.git /opt/db +WORKDIR /opt diff --git a/examples/003/Dockerfile b/examples/003/Dockerfile new file mode 100644 index 0000000..35b83ea --- /dev/null +++ b/examples/003/Dockerfile @@ -0,0 +1,8 @@ +FROM debian:stable-slim +ENV PACKAGES git ruby zstd +RUN apt-get update -y --no-install-recommends $PACKAGES \ + && git clone https://github.com/spandx/cache.git /opt/db \ + && tar --use-compress-program zstd -cf /opt/db.tar.zst /opt/db \ + && rm -fr /opt/db +COPY run.sh /run.sh +CMD ['/run.sh'] diff --git a/examples/003/run.sh b/examples/003/run.sh new file mode 100644 index 0000000..db1f294 --- /dev/null +++ b/examples/003/run.sh @@ -0,0 +1,8 @@ +#!/bin/sh + +set -ex + +tar -xf /opt/db.tar.zst + +cd /opt/db/.index +sh |
