I attended a four part Docker 101 Training course at Virginia Tech. This post contains notes on part 3 of 4.
Understanding what’s in an image:
$ docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 6027bb44a67d zookeeper "/docker-entrypoint.…" 7 weeks ago Up 2 days 2181/tcp, 2888/tcp, 3888/tcp hyku_zoo1_1 6a9585f4b0bc zookeeper "/docker-entrypoint.…" 7 weeks ago Up 2 days 2181/tcp, 2888/tcp, 3888/tcp hyku_zoo2_1 5bd742a7314c zookeeper "/docker-entrypoint.…" 7 weeks ago Up 2 days 2181/tcp, 2888/tcp, 3888/tcp hyku_zoo3_1
$ docker image history zookeeper IMAGE CREATED CREATED BY SIZE COMMENT 397be0d8fa45 7 weeks ago /bin/sh -c #(nop) CMD ["zkServer.sh" "start… 0B <missing> 7 weeks ago /bin/sh -c #(nop) ENTRYPOINT ["/docker-entr… 0B <missing> 7 weeks ago /bin/sh -c #(nop) COPY file:5cb6c695778a88d6… 941B <missing> 7 weeks ago /bin/sh -c #(nop) ENV PATH=/usr/local/sbin:… 0B <missing> 7 weeks ago /bin/sh -c #(nop) EXPOSE 2181/tcp 2888/tcp … 0B <missing> 7 weeks ago /bin/sh -c #(nop) VOLUME [/data /datalog] 0B <missing> 7 weeks ago /bin/sh -c #(nop) WORKDIR /zookeeper-3.4.12 0B <missing> 7 weeks ago |2 DISTRO_NAME=zookeeper-3.4.12 GPG_KEY=586E… 60MB <missing> 7 weeks ago /bin/sh -c #(nop) ARG DISTRO_NAME=zookeeper… 0B <missing> 7 weeks ago /bin/sh -c #(nop) ARG GPG_KEY=586EFEF859AF2… 0B <missing> 7 weeks ago /bin/sh -c set -ex; adduser -D "$ZOO_USE… 4.82kB <missing> 7 weeks ago /bin/sh -c #(nop) ENV ZOO_USER=zookeeper ZO… 0B <missing> 7 weeks ago /bin/sh -c apk add --no-cache bash s… 4.21MB <missing> 7 weeks ago /bin/sh -c set -x && apk add --no-cache o… 77.8MB <missing> 7 weeks ago /bin/sh -c #(nop) ENV JAVA_ALPINE_VERSION=8… 0B <missing> 7 weeks ago /bin/sh -c #(nop) ENV JAVA_VERSION=8u171 0B <missing> 2 months ago /bin/sh -c #(nop) ENV PATH=/usr/local/sbin:… 0B <missing> 2 months ago /bin/sh -c #(nop) ENV JAVA_HOME=/usr/lib/jv… 0B <missing> 2 months ago /bin/sh -c { echo '#!/bin/sh'; echo 'set… 87B <missing> 2 months ago /bin/sh -c #(nop) ENV LANG=C.UTF-8 0B <missing> 7 months ago /bin/sh -c #(nop) CMD ["/bin/sh"] 0B <missing> 7 months ago /bin/sh -c #(nop) ADD file:093f0723fa46f6cdb… 4.15MB
Create a tar of a Docker image:
$ docker image save zookeeper | tar x - $ ls -latr total 32 -rw-r--r-- 1 janicekim staff 92 Dec 31 1969 repositories -rw-r--r-- 1 janicekim staff 667 Dec 31 1969 manifest.json drwxr-xr-x 5 janicekim staff 160 Jun 16 05:16 f489fb9bc024e38efcd28c3d574b04568ad8db2ecf4e04f850e230b52970c5b4 drwxr-xr-x 5 janicekim staff 160 Jun 16 05:16 bc689ee72c370143bedbce7354c4ab6d875c9ff0770fa5fc30767e43eefe5f69 drwxr-xr-x 5 janicekim staff 160 Jun 16 05:16 b7c8de9af3495335f18f0ed1dde5f34a589d06d84e25c7fe75eb2987a8e5205a drwxr-xr-x 5 janicekim staff 160 Jun 16 05:16 8c3cedd6ec82ada9c5ffbbdce49e2e004bf3e9f8af1d0c986af084ee555e6f5b drwxr-xr-x 5 janicekim staff 160 Jun 16 05:16 498654318d0999ce36c7b90901ed8bd8cb63d86837cb101ea1ec9bb092f44e59 -rw-r--r-- 1 janicekim staff 7338 Jun 16 05:16 397be0d8fa458782ea28b39e9a7480272519c522f6416ee3cae2efe204f324d3.json drwxr-xr-x 5 janicekim staff 160 Jun 16 05:16 26353606c6538cd3386157cf987e132c9809e0b8fa413fe9a6f35b20a0884ccc drwxr-xr-x 5 janicekim staff 160 Jun 16 05:16 146c29a4165a3791184d9b4631a0f0488f8eb4a282d606ed53b484fbf14de7fe drwxr-xr-x 7 janicekim staff 224 Aug 10 12:17 .. drwxr-xr-x 12 janicekim staff 384 Aug 10 14:33 .
Look at the generated manifest:
$ cat manifest.json | python -m json.tool [ { "Config": "397be0d8fa458782ea28b39e9a7480272519c522f6416ee3cae2efe204f324d3.json", "Layers": [ "498654318d0999ce36c7b90901ed8bd8cb63d86837cb101ea1ec9bb092f44e59/layer.tar", "f489fb9bc024e38efcd28c3d574b04568ad8db2ecf4e04f850e230b52970c5b4/layer.tar", "26353606c6538cd3386157cf987e132c9809e0b8fa413fe9a6f35b20a0884ccc/layer.tar", "8c3cedd6ec82ada9c5ffbbdce49e2e004bf3e9f8af1d0c986af084ee555e6f5b/layer.tar", "b7c8de9af3495335f18f0ed1dde5f34a589d06d84e25c7fe75eb2987a8e5205a/layer.tar", "146c29a4165a3791184d9b4631a0f0488f8eb4a282d606ed53b484fbf14de7fe/layer.tar", "bc689ee72c370143bedbce7354c4ab6d875c9ff0770fa5fc30767e43eefe5f69/layer.tar" ], "RepoTags": [ "zookeeper:latest" ] } ]
-
- Each layer shows actual filesystem changes
- The layers are unioned together, they provide a full filesystem
- Each layer can add files as needed
- Files in “higher” layers replace the same file in “lower” layers
- Deleted files are represented in a layer as a “whiteout” file
- Whiteout files are only used by the filesystem driver and not visible in the merged filesystem
Popular Base Distributions
- Ubuntu/Debian – larger and familiar, results in larger image size
- Alpine Linux – smaller results in smaller image size