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. «
Inhaltsverzeichnis
Vorwort . . . 11TEIL 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 . . . 179TEIL 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 . . . 23910. Datenbanksysteme . . . 245 10. 1 . . . MySQL und MariaDB . . . 245 10. 2 . . . PostgreSQL . . . 251 10. 3 . . . MongoDB . . . 256 10. 4 . . . Redis . . . 26311. 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 . . . 28812. Webapplikationen und CMS . . . 297 12. 1 . . . WordPress . . . 297 12. 2 . . . Nextcloud . . . 305 12. 3 . . . Joomla . . . 308TEIL III. Praxis . . . 31113. 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 . . . 34114. Grafana . . . 343 14. 1 . . . Grafana-Docker-Setup . . . 344 14. 2 . . . Provisioning . . . 354 14. 3 . . . Ein angepasstes Telegraf-Image . . . 35615. 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 . . . 38616. 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 . . . 41017. 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 . . . 42618. 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 . . . 44919. Swarm . . . 451 19. 1 . . . Docker Swarm . . . 453 19. 2 . . . Docker Swarm in der Hetzner-Cloud . . . 45820. 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