Docker from the scratch

Warum?

Docker bietet über https://hub.docker.com jede Menge „offizielle“ Repositorien an. In meinen Blogbeitrag hab ich gezeigt wie man ein bestehendes Image nutzen, oder durch Verändern des Dockerfiles ein eigenes Image erstellen kann. Dieses nutzt aber immer noch das offizielle Alpine Image.
Manchmal, seien es IT-Policies oder technische Gründe, will man wirklich von Grund auf (from the scratch) beginnen.
Oder es regnet einfach den ganzen Tag so wie heute.

Los gehts

Hier mal ein simpler Workflow mit dem derzeitigen Debian testing aka stretch

#Standard Image
debootstrap stretch stretchdir > /dev/null
#Oder besser ein wirklich minimales Image
debootstrap --variant=minbase stretch stretchdir > /dev/null

Testen des Baseimages mittels chroot

chroot stretch
#austeigen mittels exit

Image erstellen simpel

Erstellen eines Images und ausführen eines Befehls innerhalb des Containers.
Der Container wird danach beendet, Image bleibt bestehen

tar -C stretchdir -c . | docker import - stretch
~# docker run stretch cat /etc/debian_version
9.0
~# docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
85affea9f7a3 stretch "cat /etc/debian_v..." 6 seconds ago Exited (0) 5 seconds ago elated_pare

Image erstellen über ein Dockerfile


~# mkdir stretch-scratch
~# tar -C stretchdir . -czf stretch-scratch/rootfs.tgz
~# cd stretch-scratch/
~/stretch-scratch# ls -l
insgesamt 259228
-rw-r--r-- 1 root root 639 Mai 3 11:53 Dockerfile
-rw-r--r-- 1 root root 265441280 Mai 2 20:39 rootfs.tar
-rw-r--r-- 1 root root 44 Mai 3 11:57 supervisord.conf

Der inhalt des Dockerfiles

~/stretch-scratch# cat Dockerfile

FROM scratch
LABEL org.label-schema.vendor="migae21" \
org.label-schema.build-date="$BUILD_DATE" \
org.label-schema.name="minimal base images with Debian" \
org.label-schema.vcs-type="git" \
org.label-schema.vcs-url="https://github.com/migae21/strech-scratch" \
org.label-schema.schema-version="1.0rc1" \
operatingsystem="linux" \
kernelversion="4.9.0" \
arch="amd64"

ADD rootfs.tgz /
RUN apt-get update && \
apt-get -yq install supervisor
COPY supervisord.conf /etc/supervisor/conf.d/supervisord.conf
CMD ["/usr/bin/supervisord", "-n"]


~/stretch-scratch# cat supervisord.conf
[supervisord]
nodaemon=true
loglevel=debug

Build & Start


docker build . -t stretch
docker run -ti stretch --name stretch

Also jetzt warum das Ganze?

Es geht hier keinesfalls darum das Rad neu zu erfinden, oder dem kiss Prinzip untreu zu werden.
Vielmehr ist es ein Ausgangspunkt für weitere Artikel über Docker, die einige beachtenswerte Besonderheiten der Container aufzeigen. Als Beispiele seien mal folgende Diskussionsstränge genannt:
https://blog.docker.com/2014/06/why-you-dont-need-to-run-sshd-in-docker/
https://blog.docker.com/2014/06/why-you-dont-need-to-run-sshd-in-docker/#comment-1745
http://phusion.github.io/baseimage-docker/

Linkliste

http://goinbigdata.com/docker-run-vs-cmd-vs-entrypoint/
https://ericchiang.github.io/post/containers-from-scratch/
Moby (toolset for building dist/images)
https://github.com/moby/moby
Debian images build with moby
https://github.com/tianon/docker-brew-debian/

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.