[[Vorlage(Getestet, )]] {{{#!vorlage Wissen [:Pakete installieren: Installation von Programmen] [:Programme_starten: Starten von Programmen] [:Terminal: Ein Terminal öffnen] [:mit Root-Rechten arbeiten:] [:Editor: Einen Editor öffnen] }}} [[Inhaltsverzeichnis()]] [https://www.docker.com/ Docker] {en} ist ein Entwicklerwerkzeug zur Anwendungsbereitstellung. Mit ihm lassen sich definierte Umgebungen erzeugen und durch [:Virtualisierung:] universell einsetzen. Eine populäre Alternative für Docker stellt [https://podman.io/ Podman] {en} dar, welches viele Docker-Funktionen unterstützt und einige Vorteile bietet. So können Container in sog. "Pods" zusammengefasst werden, was für dezentralisierte Anwendungen interessant ist. Außerdem werden die Container per [wikipedia:Systemaufruf:] gestartet und laufen im [wikipedia:Userspace:], während Docker seine Aufgaben an mit Root-Rechten ausgestattete Hintegrunddienste delegiert, was ein potentielles Sicherheitsrisiko birgt. = Installation = Die Ubuntu-Distribution stellt inoffizielle Docker-Pakete bereit, die mit den offiziellen Paketen von Docker in Konflikt geraten können. Sie müssen ggf. vor Installation der offiziellen Version von Docker Engine deinstalliert werden. Die inoffiziellen Pakete, die deinstalliert werden müssen, sind: {{{ docker.io docker-compose docker-compose-v2 docker-doc podman-docker }}} Außerdem hängt Docker Engine von `containerd` und `runc` ab. Docker Engine bündelt diese Abhängigkeiten in einem Paket: `containerd.io`. Wenn `containerd` oder runc zuvor installiert wurde, müssen sie deinstalliert werden, um Konflikte mit den Versionen zu vermeiden, die mit Docker Engine verbunden sind. Dazu muss folgender Befehl ausgeführt werden: {{{#!vorlage Befehl sudo apt-get remove docker.io docker-doc docker-compose docker-compose-v2 podman-docker containerd runc }}} [[Vorlage(Fremdquelle-auth, https://download.docker.com/linux/ubuntu/gpg)]] [[Vorlage(Fremdquelle, https://download.docker.com/linux/ubuntu, focal, jammy, noble, oracular, main)]] Für die Docker Community Edition sind folgende Pakete zu installieren. [1] {{{#!vorlage Paketinstallation docker-ce containerd.io }}} Möchte man Docker ohne [:sudo:] starten, so muss man sich mit folgenden Befehlen [2] mit Root-Rechten [3] zur Gruppe `docker` hinzufügen: {{{#!vorlage Befehl sudo groupadd docker sudo usermod -aG docker $USER }}} Es ist auch möglich, Docker ohne Root-Rechte laufen zu lassen, was allerdings mit einigen Einschränkungen der Funktionsweise einhergeht. Siehe dazu die Docker-Dokumentation, [https://docs.docker.com/engine/security/rootless/ "Rootless mode"] {en}. Soll Docker bei jedem Systemstart von [:systemd:] mit gestartet werden, so kann man folgende Befehle [2] mit Root-Rechten [3] ausführen: {{{#!vorlage Befehl sudo systemctl enable docker.service sudo systemctl enable containerd.service }}} Anschließend startet man den Rechner neu. = Benutzung = == Test == Zur Prüfung ob alles korrekt eingerichtet ist, kann mit folgendem Befehl [2] eine Instanz mit [wikipedia:Hallo-Welt-Programm:] gestartet werden. {{{#!vorlage Befehl docker run hello-world }}} == Images == Mit dem folgenden Befehl [2] kann man sich vorgefertigte Varianten zum Herunterladen auflisten lassen. {{{#!vorlage Befehl docker search ubuntu }}} Wir laden testweise mit folgendem Befehl das offizielle Image herunter. {{{#!vorlage Befehl docker pull ubuntu }}} Mit folgendem Befehl können wir alle auf dem System verfügbaren Abbilder ansehen. {{{#!vorlage Befehl docker images }}} Um einen Container aus dem Abbild zu starten und in die [:Root:]-Konsole zu springen, geben wir Folgendes ein: {{{#!vorlage Befehl docker run -it ubuntu }}} In einem zweiten Terminalfenster geben wir folgenden Befehl ein, um die aktiven Container anzuzeigen. {{{#!vorlage Befehl docker ps }}} Um auch den bereits beendeten Hallo-Welt-Container anzuzeigen, können wir folgenden Parameter ergänzen. {{{#!vorlage Befehl docker ps -a }}} Mit dem folgenden Befehl gefolgt von der Container-ID oder dem Namen können wir den Container beenden {{{#!vorlage Befehl docker stop }}} und mit dem Äquivalent auch wieder starten. {{{#!vorlage Befehl docker start }}} Um den Container wieder aus dem System zu löschen, geben wir Folgendes ein: {{{#!vorlage Befehl docker rm }}} == Dockerfile == Ein wichtiger Verwendungszweck ist das automatisierte Einrichten von Container-Images. Dafür werden Baupläne erstellt und in einem sogenannten '''Dockerfile''' abgespeichert. Beispielhaft soll die Startseite des [:Wiki:] heruntergeladen und von einem Webserver bereitgestellt werden. Hierfür folgende Datei mit dem Dateinamen '''Dockerfile''' anlegen. [5] {{{ # Verwende Apache 2 Webserver und Ubuntu als Basis. FROM ubuntu/apache2:latest # Paketliste aktualisieren und Programme installieren. RUN apt-get update && apt-get install -y wget && apt-get clean # Erstelle ein Verzeichnis zum Ablegen der HTML-Dateien. RUN mkdir -p /var/www/html/wiki # Die Startseite von des ubuntuusers.de Wiki herunterladen und im Apache Verzeichnis ablegen. RUN wget --no-parent --convert-links --adjust-extension --page-requisites \ https://wiki.ubuntuusers.de/ -P /var/www/html/wiki # Setze die heruntergeladene Startseite als Standardseite ein. RUN mv /var/www/html/wiki/wiki.ubuntuusers.de/index.html /var/www/html/ # Den Standard Webserver Port öffnen. EXPOSE 80 # Starte den Webserver im Vordergrund. CMD ["/usr/sbin/apache2ctl", "-D", "FOREGROUND"] }}} Folgenden Befehl [2] in dem Ordner ausführen, wo das '''Dockerfile''' gespeichert wurde. {{{#!vorlage Befehl docker build -t ubuntuusers-image . }}} Zum Starten des frisch erstellten Abbildes folgenden Befehl eingeben. Diesmal erhält der Container einen Namen, um ihn besser wiederzufinden, und eine Portfreigabe wird konfiguriert. {{{#!vorlage Befehl docker run --name ubuntuusers-mirror -d -p 8080:80 ubuntuusers-image }}} Unter http://localhost:8080/ wird nun die Seite von dem [:Apache:]-Webserver innerhalb des Containers bereitgestellt. Zum Beenden folgenden Befehl eingeben: {{{#!vorlage Befehl docker stop ubuntuusers-mirror }}} = Links = * [https://docs.docker.com/ Docker Docs] {en} #tag: Server