summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authormo khan <mo.khan@gmail.com>2020-06-10 20:43:08 -0600
committermo khan <mo.khan@gmail.com>2020-06-10 20:43:08 -0600
commit6f65e7fa18a406c5b233d7d692186b302d594971 (patch)
tree55b09e591e34c2f5c37f45af28332fff25e68339
parentc5794d5b829ab12d09b535d8aaf2faad56cc6cf2 (diff)
build large image and small image
-rw-r--r--README.md75
-rw-r--r--examples/001/dive-exec.sh6
-rw-r--r--examples/001/docker-exec.sh6
-rw-r--r--examples/001/docker-large-download.sh4
-rw-r--r--examples/002/Dockerfile8
-rw-r--r--examples/003/Dockerfile8
-rw-r--r--examples/003/run.sh8
7 files changed, 94 insertions, 21 deletions
diff --git a/README.md b/README.md
index c7507dc..5b91e18 100644
--- a/README.md
+++ b/README.md
@@ -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