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