E-Book, Deutsch, 510 Seiten
Reihe: Rheinwerk Computing
Öggl / Kofler Docker
4. Auflage 2023
ISBN: 978-3-8362-9648-9
Verlag: Rheinwerk
Format: EPUB
Kopierschutz: 0 - No protection
Das Praxisbuch für Entwickler und DevOps-Teams
E-Book, Deutsch, 510 Seiten
Reihe: Rheinwerk Computing
ISBN: 978-3-8362-9648-9
Verlag: Rheinwerk
Format: EPUB
Kopierschutz: 0 - No protection
Docker ist aus der modernen Softwareentwicklung nicht mehr
wegzudenken. Ob Sie Entwickler oder Administrator sind, ob Sie gerade
einsteigen oder bereits produktiv mit Software-Containern arbeiten:
Dieses Buch zeigt Ihnen nicht nur Docker und die Containerwelt, es
lässt Sie auch mit dem Troubleshooting und der Orchestrierung nicht
alleine. Inkl. Best Practices, umfangreichem Werkzeugkasten und vielen
Tipps zur Projektmigration, Container-Sicherheit, Docker ohne Root, Kubernetes, Docker Desktop, Podman und mehr.
Aus dem Inhalt:
- Konzepte und Grundlagen
- Docker-Kommandos
- Eigene Docker-Images
- Container-Sicherheit
- Webserver und Tools
- Datenbanksysteme
- Programmiersprachen
- Webapplikationen und CMS
- Praxisbeispiele: Webapplikation, Grafana, Gitlab und mehr
- Anwendungen migrieren
- Deployment
- Gitlab
- Continuous Integration und Continuous Delivery
- Orchestrierung mit Swarm und Kubernetes
- Docker in der Cloud: AWS, Azure, Google Cloud
Die Fachpresse zur Vorauflage:
c't: »Insgesamt ist das Buch eine runde Sache. Es wendet sich an Entwickler und Admins, ist aber streckenweise auch für Entscheider interessant.«
Bernd Öggl ist ein erfahrener Systemadministrator und Webentwickler. Bereits seit 2001 erstellt er für Kunden Websites, setzt individuelle Entwicklerprojekte um und gibt sein Wissen auf Konferenzen und in Publikationen weiter.
Autoren/Hrsg.
Weitere Infos & Material
Vorwort ... 11
TEIL I. Einführung ... 15
1. Hello World ... 17
1.1 ... Docker-Schnellinstallation ... 17
1.2 ... Apache mit PHP 8 ... 18
1.3 ... Node.js ... 21
1.4 ... Python ... 24
1.5 ... Fazit ... 25
2. Installation ... 27
2.1 ... Viele Wege führen zum Ziel ... 27
2.2 ... Docker-Installation unter Windows ... 31
2.3 ... Docker-Installation unter macOS ... 33
2.4 ... Docker-Installation unter Linux ... 34
2.5 ... Rootless Docker ... 38
2.6 ... Docker Desktop unter Linux ... 43
2.7 ... Podman installieren ... 45
3. Grundlagen ... 49
3.1 ... Grundlagen und Nomenklatur ... 49
3.2 ... Container ausführen ... 55
3.3 ... Container interaktiv verwenden ... 58
3.4 ... Portweiterleitung ... 65
3.5 ... Datenspeicherung in Volumes ... 68
3.6 ... Volumes mit Namen ... 75
3.7 ... Volumes in eigenen Verzeichnissen ... 76
3.8 ... Kommunikation zwischen mehreren Containern ... 78
3.9 ... Administration ... 85
4. Eigene Images ... 91
4.1 ... Hello, Dockerfile! ... 92
4.2 ... Dockerfile-Syntax ... 94
4.3 ... Ein eigenes Webserver-Image ... 100
4.4 ... Images in den Docker Hub hochladen ... 103
4.5 ... Multi-Arch-Images ... 106
4.6 ... Beispiel: Pandoc- und LaTeX-Umgebung als Image einrichten ... 109
5. Container-Setups mit »compose« ... 113
5.1 ... YAML-Syntax ... 115
5.2 ... Hello Compose! ... 116
5.3 ... Die Datei compose.yaml ... 123
5.4 ... Passwörter und andere Geheimnisse ... 131
5.5 ... Neue Projekte einrichten (docker init) ... 132
6. Tipps, Tricks und Interna ... 135
6.1 ... Docker Desktop und Podman Desktop ... 136
6.2 ... Visual Studio Code ... 139
6.3 ... Portainer ... 142
6.4 ... Pull-Limit im Docker Hub ... 144
6.5 ... Unterschiedliche CPU-Architekturen nutzen ... 149
6.6 ... Container automatisch starten ... 152
6.7 ... Docker-Interna ... 157
6.8 ... Podman-Interna ... 170
7. Kommandoreferenz ... 179
TEIL II. Werkzeugkasten ... 203
8. Alpine Linux ... 205
8.1 ... Merkmale ... 206
8.2 ... Paketverwaltung mit apk ... 209
9. Webserver und Co. ... 213
9.1 ... Apache HTTP Server ... 213
9.2 ... Nginx ... 219
9.3 ... Nginx als Reverse Proxy mit SSL-Zertifikaten von Let's Encrypt ... 222
9.4 ... Caddy ... 230
9.5 ... Node.js mit Express ... 232
9.6 ... HAProxy ... 237
9.7 ... Traefik-Proxy ... 239
10. Datenbanksysteme ... 245
10.1 ... MySQL und MariaDB ... 245
10.2 ... PostgreSQL ... 251
10.3 ... MongoDB ... 256
10.4 ... Redis ... 263
11. Programmiersprachen ... 267
11.1 ... JavaScript (Node.js) ... 267
11.2 ... Java ... 271
11.3 ... PHP ... 274
11.4 ... Ruby ... 280
11.5 ... Python ... 281
11.6 ... Go ... 288
12. Webapplikationen und CMS ... 297
12.1 ... WordPress ... 297
12.2 ... Nextcloud ... 305
12.3 ... Joomla ... 308
TEIL III. Praxis ... 311
13. Eine moderne Webapplikation ... 313
13.1 ... Die Anwendung ... 314
13.2 ... Das Frontend -- Vue.js ... 316
13.3 ... Der API-Server -- Node.js Express ... 326
13.4 ... Die MongoDB-Datenbank ... 336
13.5 ... Der Sessionspeicher -- Redis ... 341
14. Grafana ... 343
14.1 ... Grafana-Docker-Setup ... 344
14.2 ... Provisioning ... 354
14.3 ... Ein angepasstes Telegraf-Image ... 356
15. Modernisierung einer traditionellen Applikation ... 363
15.1 ... Die bestehende Applikation ... 364
15.2 ... Planung und Vorbereitung ... 366
15.3 ... Die Entwicklungsumgebung ... 380
15.4 ... Produktivumgebung und Migration ... 381
15.5 ... Updates ... 384
15.6 ... Tipps für die Umstellung ... 385
15.7 ... Fazit ... 386
16. GitLab ... 387
16.1 ... GitLab-Schnellstart ... 389
16.2 ... GitLab-Webinstallation ... 390
16.3 ... HTTPS über ein Reverse-Proxy-Setup ... 392
16.4 ... E-Mail-Versand ... 393
16.5 ... SSH-Zugriff ... 396
16.6 ... Volumes und Backup ... 397
16.7 ... Eigene Docker-Registry für GitLab ... 399
16.8 ... Die vollständige compose-Datei ... 401
16.9 ... GitLab verwenden ... 403
16.10 ... GitLab-Runner ... 407
16.11 ... Mattermost ... 410
17. Continuous Integration und Continuous Delivery ... 417
17.1 ... Die Website dockerbuch.info mit gohugo.io ... 418
17.2 ... Docker-Images für die CI/CD-Pipeline ... 423
17.3 ... Die CI/CD-Pipeline ... 426
18. Sicherheit ... 437
18.1 ... Softwareinstallation ... 437
18.2 ... Herkunft der Docker-Images ... 439
18.3 ... »root« in Docker-Images ... 442
18.4 ... Der Docker-Dämon ... 443
18.5 ... User Namespaces ... 445
18.6 ... cgroups ... 447
18.7 ... Secure Computing Mode ... 448
18.8 ... AppArmor-Sicherheitsprofile ... 449
19. Swarm ... 451
19.1 ... Docker Swarm ... 453
19.2 ... Docker Swarm in der Hetzner-Cloud ... 458
20. Kubernetes ... 469
20.1 ... Minikube ... 470
20.2 ... Amazon EKS (Elastic Kubernetes Service) ... 482
20.3 ... Microsoft AKS (Azure Kubernetes Service) ... 486
20.4 ... Google Kubernetes Engine ... 495
Index ... 505
Vorwort
Zu Beginn der 2000er-Jahre stellte Virtualisierungssoftware den Alltag vieler Entwickler auf den Kopf: Plötzlich war es möglich, auf einem Rechner Linux und Windows auszuführen, unkompliziert Programme in verschiedenen Umgebungen bzw. Web-Apps in alten Versionen von Webbrowsern auszuprobieren, verschiedene Software-Stacks in virtuellen Maschinen parallel zu installieren und zu testen und vieles mehr.
Natürlich spielen virtuelle Maschinen für Entwickler noch immer eine große Rolle; außerdem ist die Cloud in ihrer jetzigen Form ohne Virtualisierung gar nicht denkbar. Dennoch hat vor einigen Jahren ein Umbruch weg von virtuellen Maschinen hin zu Containern begonnen – und dieser Umbruch scheint sich mehr und mehr zu be~-schleunigen.
Container ermöglichen es, bestimmte Softwarekomponenten (Webserver, Programmiersprachen, Datenbanken) ohne den Overhead einer virtuellen Maschine auszuführen. Warum ein ganzes Betriebssystem (meist Linux) in eine virtuelle Maschine installieren, wenn es doch nur um eine ganz spezifische Funktion geht?
Selten trifft das Paradigma »weniger ist mehr« so gut zu wie auf die Container-Technologie. Das »weniger« drückt sich in unzähligen Vorteilen aus: Container sind viel schneller aufgesetzt als virtuelle Maschinen, lassen sich leichter auf verschiedenen Entwicklungssystemen replizieren, beanspruchen weniger Ressourcen und bieten wesentlich bessere Möglichkeiten zur Skalierung und Lastverteilung. Container sind insofern nicht nur ein Segen für Entwicklerteams, sondern bieten auch vollkommen neue Möglichkeiten im Deployment, also im produktiven Betrieb der entwickelten Lösung.
Docker oder Podman? Beides!
Der Firma Docker ist es mit ihrem gleichnamigen Produkt gelungen, dem Einsatz von Containern zum Durchbruch zu verhelfen. Docker ist aber bei Weitem nicht das einzige Container-System. Die interessanteste Alternative ist das von der Firma Red Hat entwickelte Programm Podman. Podman und Docker verfolgen zwar technisch leicht unterschiedliche Ideen, sind aber aus Anwendersicht weitestgehend kompatibel miteinander: Die Optionen zentraler Kommandos sind vollkommen identisch, für wichtige Konfigurationsdateien gilt dieselbe Syntax. Sie können also fast mühelos zwischen Docker und Podman wechseln.
Für Podman sprechen die unter Linux einfachere Installation und das liberalere Lizenzmodell. Während Red Hat das Geld mit seinen Enterprise-Produkten verdient und Podman einfach ein Teil davon ist, gibt es bei Docker diverse kostenpflichtige Zusatzangebote. Insbesondere ist der kostenlose Einsatz der grafischen Benutzeroberfläche Docker Desktop nur für Privatanwender und kleine Firmen erlaubt.
Wenn man regelmäßig die Zeitschrift c’t liest, bekommt man den Eindruck, Docker wäre sowieso schon seit Jahren tot und Podman längst sein Nachfolger. Die alljährlich von Stack Overflow durchgeführte große Umfrage unter allen Entwicklern zeigt das genaue Gegenteil: Mehr als die Hälfte aller professionellen Entwickler setzen Docker ein (57 %), aber nur 4 % Podman (Stand: Juni 2023).
Kleines Detail am Rande: Während Red Hat mit Podman unbestritten eine großartige Alternative zu Docker entwickelt hat, überlässt man das kostenintensive Hosting von Images großzügig der Firma Docker. Oder, anders formuliert: Auch wenn Sie Podman verwenden, werden Sie den Großteil der Images aus dem Docker Hub beziehen. Red Hat betreibt zwar eine eigene Image-Registry, aber dort werden nur Projekte aus dem Red-Hat-Universum gehostet.
Langer Rede kurzer Sinn: Wir behandeln in diesem Buch sowohl Docker als auch Podman. Dennoch gilt für uns Docker als der »Goldstandard«. Wenn Sie mit Podman arbeiten und ein Fehler auftritt, werden Sie sich immer die Frage stellen: Habe ich einen Fehler gemacht? Oder ist Podman schuld? Zumindest bei uns ging die Verteilung in die Richtung 99 % eigene Fehler, 1 % Podman-Inkompatibilität. Aber eine Restunsicherheit bleibt – und die wird mit Internetrecherchen selten besser. In der Vergangenheit gab es unzählige Inkompatibilitäten zwischen Docker und Podman. Auch wenn diese zumeist behoben sind, stoßen Sie natürlich weiterhin auf die diesbezüglichen Fehlerberichte im Internet. Beachten Sie immer das Veröffentlichungsdatum bzw. die angegebenen Versionsnummern!
Wozu dieses Buch?
In diesem Buch geben wir Ihnen eine Einführung in den Umgang mit Docker und einen Überblick über die wichtigsten Bausteine (Images), aus denen Sie eigene Container-Welten zusammensetzen können. Wir zeigen Ihnen anhand mehrerer großer Beispiele, wie Sie Docker in der Praxis einsetzen, und gehen ausführlich auf das Deployment in der Cloud ein.
Wir haben das Buch in drei Teile gegliedert:
-
Teil I stellt Docker vor. Sie lernen anhand vieler Beispiele, wie Sie die Kommandos docker bzw. podman sinnvoll einsetzen und wie die Syntax der Dateien Dockerfile und compose.yaml aussieht.
-
Teil II präsentiert wichtige Images, die als Basis für eigene Projekte dienen können. Dazu zählen unter anderem:
-
Alpine Linux
-
die Webserver Apache, Nginx und Caddy (inklusive Proxy-Setup mit Traefik sowie Let’s-Encrypt-Konfiguration)
-
die Datenbankserver MySQL/MariaDB, MongoDB, PostgreSQL und Redis
-
die Programmiersprachen Go, JavaScript (Node.js), PHP, Python und Ruby
-
die Webapplikationen WordPress, Joomla und Nextcloud
-
-
Teil II zeigt den Einsatz von Docker in der Praxis. Wir zeigen Ihnen sowohl, wie Sie moderne Webapplikationen mit Docker besonders effizient entwickeln, als auch, wie Sie vorhandene Projekte mit all ihren Altlasten in besser wartbare Docker-Projekte umwandeln.
Zwei Kapitel zur Nutzung von GitLab mit Docker und zu Continuous Integration (CI) und Continuous Delivery (CD) demonstrieren Ihnen neue Paradigmen und Hilfsmittel für das Entwickeln von Software im Team.
Auch das Deployment werden wir nicht vernachlässigen: Mit Docker Swarm und Kubernetes bringen Sie Ihre Docker-Projekte in die Cloud und profitieren von den dort gegebenen Möglichkeiten zur Skalierung. Eine Sammlung von Tipps stellt sicher, dass dabei die Sicherheit nicht zu kurz kommt.
Neu in der vierten Auflage
Für diese Auflage haben wir das Buch vollständig aktualisiert und das Installations~-kapitel mit seinen unzähligen Varianten übersichtlicher strukturiert. Wichtige inhaltliche Neuerungen sind:
-
mehr Podman-Beispiele und -Details
-
Docker und Podman Desktop: neue GUIs zur Container-Administration
-
Multi-Architecture-Builds: Images für Intel- und ARM-CPUs
-
Caddy: Nutzung des HTTPS-only-Webservers als Container
-
Go: kleines REST-Beispiel
Schöne neue Container-Welt
Wer Docker oder Podman einmal ausprobiert und kennengelernt hat, will nie wieder auf seine Funktionen verzichten. Lassen Sie sich von uns in eine neue Welt führen!
Bernd Öggl (https://webman.at)
Michael Kofler (https://kofler.info)
Materialien zum Buch
Auf der Webseite zu diesem Buch stehen folgende Materialien für Sie zum Download bereit:
-
alle Projektdateien
-
alle Codebeispiele
Gehen Sie auf https://www.rheinwerk-verlag.de/5742. Klicken Sie auf den Reiter Ma~-terialien zum Buch. Dort sehen Sie eine Liste der herunterladbaren Dateien samt einer Kurzbeschreibung. Klicken Sie auf den Button Herunterladen, um den Download zu starten.
GitHub
Wir verwenden Git zur Verwaltung unserer Beispieldateien. Deshalb finden Sie (eventuell bereits aktualisierte oder korrigierte) Beispieldateien auch auf GitHub:
https://github.com/docker-compendium/docker4-samples
Das Repository enthält eine Übersicht der einzelnen Kapitel mit den Links zu den entsprechenden Repositories mit Git-Sub-Modulen. Das bedeutet, dass Sie mit den folgenden Befehlen alle Beispiele von GitHub auf Ihren Computer laden können:
https://github.com/docker-compendium/docker4-samples.git
Sollten Sie Verbesserungsvorschläge haben, freuen wir uns natürlich über Pull-Re~-quests von Ihnen.
Testplattformen und Linux-Distributionen
Unsere Haupttestplattform für dieses Buch war Ubuntu Linux. Parallel dazu haben wir viele Beispiele auch unter Windows und macOS sowie unter Debian, Fedora und AlmaLinux ausprobiert.
Noch eine Anmerkung zu Red Hat: Wenn in diesem Buch von RHEL die Rede ist, dann ist damit nicht nur Red Hat Enterprise Linux in der Version 9...




