Einführung Docker
Datum: 28. Juli 2022
Ziel: erste Schritte mit der Container-Anwendungsvirtualisierung „docker“
Linux-Distribution: Debian 11
Installation
Siehe dazu hier unter https://www.rosehosting.com/blog/how-to-install-docker-on-debian-11/
Container-Abbilder suchen
Um z.B. nach der Debian-artigen Distribution „devuan“ zu suchen:
root@d11:~# docker search devuan
NAME DESCRIPTION STARS OFFICIAL AUTOMATED
vpgrp/devuan Docker images of Devuan. 3
qxip/devuan Devuan Docker base image 2
debitux/devuan Devuan GNU+Linux is a fork of Debian without… 1 [OK]
dyne/devuan Devuan GNU+Linux base Docker images 1 [OK]
vptech/devuan Docker images of Devuan. 1
rockyluke/devuan Docker images of Devuan. 1
dan0mau/devuan-ascii-apache2-php7.3-aws-npm-jobs 0
dan0mau/devuan-ascii-apache2-php7.3-aws-npm 0
dan0mau/devuan-ascii-jenkins-slave 0
dan0mau/devuan-ascii-gearman-server 0
markizano/devuan https://devuan.org/ 0
lpenz/devuan-beowulf-amd64 Devuan GNU/Linux beowulf/ceres for amd64 0
dan0mau/devuan-ascii-apache2-php7.1-aws 0
lpenz/devuan-beowulf-armhf-minbase Devuan GNU/Linux beowulf/ceres for armhf, mi… 0
dan0mau/devuan-ascii-apache2-php7.1-aws-npm 0
dan0mau/devuan-ascii-consul-template-haproxy 0
debitux/devuan-rdp Devuan testing distribution with openbox, te… 0 [OK]
gvieri/devuan my docker images of linux "devuan" 0
sharlak/devuan Devuan Jessie base image 0
dan0mau/devuan This is a base image for Devuan jessie, simi… 0
dan0mau/devuan-ascii-consul 0
dan0mau/devuan-consul-template-haproxy 0
dan0mau/devuan-zookeeper 0
dan0mau/devuan-ascii-jenkins-slave-old 0
dan0mau/devuan-redis 0
root@d11:~#
Siehe dazu auch https://docs.docker.com/engine/reference/commandline/search/
Container erstellen
Devuan mit sysVinit
Nach einem ersten Versuch mittels docker run hello-world
laden wir uns vom soeben gefundenen Repo „dyne/devuan“ das Image „beowulf“ herunter, wobei daraus sogleich ein Container erstellt und an den Start gebracht wird:
root@d11:~# docker run -it --name mydevuan dyne/devuan:beowulf bash
Unable to find image 'dyne/devuan:beowulf' locally
beowulf: Pulling from dyne/devuan
a8cdb2b8b104: Pull complete
5186d5863148: Pull complete
32368578c07e: Pull complete
f8a2a883a678: Pull complete
a328eb17d430: Pull complete
031593785b54: Pull complete
28a6a8653ad0: Pull complete
5851909203bb: Pull complete
71ffbb18846f: Pull complete
c3ac7f2b2c43: Pull complete
98188074ba9c: Pull complete
Digest: sha256:087ca834c811bc5391633132caba9c690446f8defc7d6d84f272e69a3e4a930b
Status: Downloaded newer image for dyne/devuan:beowulf
[root@5a8d3d3dda62:~]#
Wir befinden uns nunmehr schon im laufenden Container, wo wir uns umsehen und ein paar administrative Dinge tun:
[root@5a8d3d3dda62:~]# ## Nachsehen, welche Distri am Start ist:
[root@5a8d3d3dda62:~]# cat /etc/os-release
PRETTY_NAME="Devuan GNU/Linux 3 (beowulf)"
NAME="Devuan GNU/Linux"
VERSION_ID="3"
VERSION="3 (beowulf)"
VERSION_CODENAME=beowulf
ID=debian
ID_LIKE=debian
HOME_URL="https://www.devuan.org/"
SUPPORT_URL="https://devuan.org/os/community"
BUG_REPORT_URL="https://bugs.devuan.org/"
[root@5a8d3d3dda62:~]#
[root@5a8d3d3dda62:~]# cat /etc/issue
Devuan GNU/Linux 3 \n \l
[root@5a8d3d3dda62:~]#
[root@5a8d3d3dda62:~]# # Pruefen, welches Init-System vorliegt:
[root@5a8d3d3dda62:~]# ps -A
PID TTY TIME CMD
1 pts/0 00:00:00 tini
7 pts/0 00:00:00 bash
8 pts/0 00:00:00 ps
[root@5a8d3d3dda62:~]#
[root@5a8d3d3dda62:~]# dpkg -l | grep init
ii init-system-helpers 1.56+nmu1+devuan3 all helper tools for all init systems
ii initscripts 2.93-8+devuan1 amd64 scripts for initializing and shutting down the system
ii insserv 1.18.0-2 amd64 boot sequence organizer using LSB init.d script dependency information
ii lsb-base 10.2019051400 all Linux Standard Base init script functionality
ii ncurses-base 6.1+20181013-2+deb10u2 all basic terminal type definitions
ii sysvinit-core 2.93-8+devuan1 amd64 System-V-like init utilities
ii sysvinit-utils 2.93-8+devuan1 amd64 System-V-like utilities
[root@5a8d3d3dda62:~]#
[root@5a8d3d3dda62:~]# ## System updaten:
[root@5a8d3d3dda62:~]# # >> apt-get update && apt-get -y upgrade
[root@5a8d3d3dda62:~]#
[root@5a8d3d3dda62:~]# date
Thu Jul 28 10:03:33 UTC 2022
[root@5a8d3d3dda62:~]#
[root@5a8d3d3dda62:~]# ## Zeitzone setzen:
[root@5a8d3d3dda62:~]# ls -l /etc/localtime
lrwxrwxrwx 1 root root 27 Jul 28 10:03 /etc/localtime -> /usr/share/zoneinfo/Etc/UTC
[root@5a8d3d3dda62:~]#
[root@5a8d3d3dda62:~]# ln -sf /usr/share/zoneinfo/Europe/Berlin /etc/localtime
[root@5a8d3d3dda62:~]#
[root@5a8d3d3dda62:~]# ls -l /etc/localtime
lrwxrwxrwx 1 root root 33 Jul 28 12:06 /etc/localtime -> /usr/share/zoneinfo/Europe/Berlin
[root@5a8d3d3dda62:~]#
[root@5a8d3d3dda62:~]# date
Thu Jul 28 12:06:15 CEST 2022
[root@5a8d3d3dda62:~]#
Von einer anderen Konsole aus, die wir auf dem Debian 11 Host starten (außerhalb des Containers), zeigt sich der laufende Container nun so:
root@d11:~# docker container ls
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
5a8d3d3dda62 dyne/devuan:beowulf "/tini -- bash" 41 seconds ago Up 40 seconds mydevuan
root@d11:~#
Weitere Container
Wir wollen nun weitere Images herunterladen, die zum nutzbringenden Container werden, wobei sie dann auch sogleich an den Start gehen.
Debian mit Nginx
Hier bekommen wir den Webserver Nginx mit einem Debian-Image an den Start:
docker run -it --name debianwebserv nginx bash
=== ==================== ----- ====
Downl. Container-Namen Name aus-
und vergeben des zuführende
starten Images Application
Tiny Core Linux
Ein heißer Tipp ist Tiny Core Linux, das besonders klein ist; es bringt als Application keine bash
mit, sondern nur die einfache sh
:
docker run -it --name mytinycore arkii/tinycorelinux:latest sh
Debian mit System V Initialization Daemon
Eine weitere Idee ist, nach einem Container Ausschau zu halten, der das Starten von Daemons mittels der alten SysVinit-Methode vornimmt:
root@d11:~# docker search sysvinit
NAME DESCRIPTION STARS OFFICIAL AUTOMATED
minimum2scp/baseimage Debian sid image with sysvinit + sshd, rsysl… 3 [OK]
minimum2scp/baseimage-buster Debian buster image with sysvinit + sshd, rs… 1
sysvinit/ansible 0
sysvinit/kubia 0
minimum2scp/baseimage-stretch Debian stretch image with sysvinit + sshd, r… 0 [OK]
webtatic/centos6 CentOS 6 docker images that support SysVinit… 0
root@d11:~#
Wir werden dabei sogar fündig, wobei hier aber wichtig ist, unter https://registry.hub.docker.com/r/minimum2scp/baseimage-buster nachzulesen, wie der Container zu starten ist - damit der Container in den Hintergrund geht und den ssh-Daemon startet, ist speziell -d -p 2222:22
von Belang:
root@d11:~# docker run -d -p 2222:22 --name sysVssh minimum2scp/baseimage-buster
d4b17ef8d33d01b7957aab3b191ebe8d861a5bc3a6225234a4cd0696c945c2ed
root@d11:~#
root@d11:~# # >> und schon läuft er...
Mit der folgenden Zeile können wir uns auf den laufenden Container aufschalten und auf Entdeckungsreise gehen:
root@d11:~# docker exec -it sysVssh bash
root@d4b17ef8d33d:/#
root@d4b17ef8d33d:/# # Im Container
root@d4b17ef8d33d:/# ps -A
PID TTY TIME CMD
1 ? 00:00:00 init
512 ? 00:00:00 rsyslogd
537 ? 00:00:00 cron
546 ? 00:00:00 sshd
561 pts/0 00:00:00 bash
567 pts/0 00:00:00 ps
root@d4b17ef8d33d:/#
root@d4b17ef8d33d:/#
root@d4b17ef8d33d:/# runlevel
N 2
root@d4b17ef8d33d:/#
root@d4b17ef8d33d:/# ls -l /sbin/init
-rwxr-xr-x 1 root root 53016 Feb 15 2019 /sbin/init
root@d4b17ef8d33d:/#
root@d4b17ef8d33d:/# ls -l /sbin/telinit
lrwxrwxrwx 1 root root 4 Feb 15 2019 /sbin/telinit -> init
root@d4b17ef8d33d:/#
root@d4b17ef8d33d:/# telinit 1 # <<<< telinit bewirkt, dass 'exit' ausgeführt wird
root@d4b17ef8d33d:/# exit
root@d11:~#
root@d11:~#
root@d11:~# # Wir schalten uns wieder auf:
root@d11:~# docker exec -it sysVssh bash
root@d4b17ef8d33d:/#
root@d4b17ef8d33d:/# runlevel
S 2
root@d4b17ef8d33d:/#
Wie in oben genannten Link zu lesen ist, kann ein Login mittels
ssh -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no -p 2222 debian@localhost
erfolgen. Das Passwort des Benutzers ‚debian‘ lautet ebenfalls ‚debian‘, er kann sudo
ohne Passworteingabe benutzen.
Tests / Kontrolle
Grundlegender Funktionstest:
docker version
docker run hello-world
Vorhandene Abbilder auflisten:
docker image ls
Laufende Container auflisten:
docker container ls
Alle Container auflisten, auch die gestoppt sind:
docker container ls -a
Laufende Container mitsamt „total file Size“ auflisten:
docker ps -s
Container verwalten
Container löschen:
docker rm tinycorelinux
Container stoppen:
docker stop mydevuan
Container im Hintergrund starten:
docker start mydevuan
Im Hintergrund laufenden Container „mydevuan“ eine bash
als Anwendung ausführen, die sich allerdings interaktiv im Terminal zeigen soll:
docker exec -it mydevuan bash
Hyperlinks
Weitere gute Links zu Grundlagen, Tipps und Tricks:
https://pages.cms.hu-berlin.de/cms-webtech/gitlab-documentation/docs/docker-einfuehrung/
https://epcced.github.io/2020-12-08-Containers-Online/03-running-containers/index.html
https://nickjanetakis.com/blog/docker-tip-61-difference-betweeen-docker-create-start-and-run
https://www.ionos.de/digitalguide/server/knowhow/docker-container-volumes/