Einführung
Docker vereinfacht die Verwaltung von Anwendungsprozessen in Containern. Obwohl Container in gewisser Weise virtuellen Maschinen ähneln, sind sie leichter und ressourcenschonender. Dadurch können Entwickler eine Anwendungsumgebung in mehrere isolierte Dienste aufteilen.
Bei Anwendungen, die von mehreren Diensten abhängen, kann es schnell unhandlich werden, alle Container für den gemeinsamen Start, die Kommunikation und das Herunterfahren zu orchestrieren. Docker Compose ist ein Tool, mit dem Sie Anwendungsumgebungen mit mehreren Containern basierend auf Definitionen ausführen können, die in einer YAML-Datei festgelegt sind. Es verwendet Dienstdefinitionen, um vollständig anpassbare Umgebungen mit mehreren Containern zu erstellen, die Netzwerke und Datenvolumen gemeinsam nutzen können.
In dieser Anleitung zeigen Sie, wie Sie Docker Compose auf einem Ubuntu 20.04-Server installieren und wie Sie mit der Verwendung dieses Tools beginnen.
Voraussetzungen
Um diesem Artikel zu folgen, benötigen Sie:
- Zugriff auf einen lokalen Ubuntu 20.04-Computer oder Entwicklungsserver als Nicht-Root-Benutzer mit sudo-Berechtigungen. Wenn Sie einen Remote-Server verwenden, ist es ratsam, eine aktive Firewall installiert zu haben. Um diese einzurichten, lesen Sie bitte unseren Leitfaden zur Ersteinrichtung des Servers für Ubuntu 20.04.
- Docker wird auf Ihrem Server oder lokalen Computer installiert, indem Sie die Schritte 1 und 2 befolgen von How To Install and Use Docker on Ubuntu 20.04.
Hinweis: Dieses Tutorial führt Sie durch die Installation von Docker Compose v1, das docker-compose
verwendet . Beginnend mit Docker Compose v2 ist Docker zur Verwendung von compose
migriert CLI-Plug-in-Befehl, wie in unserer neuesten Ubuntu 22.04-Version dieses Tutorials dokumentiert, und weg vom ursprünglichen docker-compose
. Während sich die Installation unterscheidet, beinhaltet die eigentliche Verwendung im Allgemeinen das Weglassen des Bindestrichs von docker-compose
Aufrufe, um docker compose
zu werden . Vollständige Kompatibilitätsdetails finden Sie in der offiziellen Docker-Dokumentation zur Befehlskompatibilität zwischen dem neuen compose
und das alte docker-compose
.
Schritt 1 – Installieren von Docker Compose
Um sicherzustellen, dass Sie die aktuellste stabile Version von Docker Compose erhalten, laden Sie diese Software aus dem offiziellen Github-Repository herunter.
Bestätigen Sie zunächst die neueste Version, die auf der Seite mit den Veröffentlichungen verfügbar ist. Zum Zeitpunkt des Schreibens dieses Artikels ist die aktuellste stabile Version 1.29.2
.
Der folgende Befehl lädt 1.29.2
herunter Geben Sie die ausführbare Datei frei und speichern Sie sie unter /usr/local/bin/docker-compose
, wodurch diese Software als docker-compose
global zugänglich gemacht wird :
- sudo curl -L "https://github.com/docker/compose/releases/download/1.29.2/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
Legen Sie als Nächstes die richtigen Berechtigungen fest, damit die Datei docker-compose
Befehl ist ausführbar:
- sudo chmod +x /usr/local/bin/docker-compose
Um zu überprüfen, ob die Installation erfolgreich war, können Sie Folgendes ausführen:
- docker-compose --version
Sie sehen eine Ausgabe ähnlich der folgenden:
Outputdocker-compose version 1.29.2, build 5becea4c
Docker Compose ist jetzt erfolgreich auf Ihrem System installiert. Im nächsten Abschnitt erfahren Sie, wie Sie eine docker-compose.yml
einrichten Datei und bringen Sie mit diesem Tool eine containerisierte Umgebung zum Laufen.
Schritt 2 – Einrichten einer docker-compose.yml
Datei
Um zu demonstrieren, wie man eine docker-compose.yml
einrichtet -Datei erstellen und mit Docker Compose arbeiten, erstellen Sie eine Webserverumgebung mit dem offiziellen Nginx-Image von Docker Hub, der öffentlichen Docker-Registrierung. Diese containerisierte Umgebung dient einer einzelnen statischen HTML-Datei.
Beginnen Sie, indem Sie ein neues Verzeichnis in Ihrem Home-Ordner erstellen und dann dorthin wechseln:
- mkdir ~/compose-demo
- cd ~/compose-demo
Richten Sie in diesem Verzeichnis einen Anwendungsordner ein, der als Dokumentenstamm für Ihre Nginx-Umgebung dient:
- mkdir app
Erstellen Sie mit Ihrem bevorzugten Texteditor eine neue index.html
Datei innerhalb der app
Ordner:
- nano app/index.html
Fügen Sie den folgenden Inhalt in diese Datei ein:
~/compose-demo/app/index.html<!doctype html>
<html lang="en">
<head>
<meta charset="utf-8">
<title>Docker Compose Demo</title>
<link rel="stylesheet" href="https://cdn.jsdelivr.net/gh/kognise/water.css@latest/dist/dark.min.css">
</head>
<body>
<h1>This is a Docker Compose Demo Page.</h1>
<p>This content is being served by an Nginx container.</p>
</body>
</html>
Speichern und schließen Sie die Datei, wenn Sie fertig sind. Wenn Sie nano
verwenden , können Sie dies tun, indem Sie CTRL+X
eingeben , dann Y
und ENTER
zu bestätigen.
Als nächstes erstellen Sie die docker-compose.yml
Datei:
- nano docker-compose.yml
Fügen Sie den folgenden Inhalt in Ihre docker-compose.yml
ein Datei:
version: '3.7'
services:
web:
image: nginx:alpine
ports:
- "8000:80"
volumes:
- ./app:/usr/share/nginx/html
Die docker-compose.yml
Datei beginnt normalerweise mit version
Definition. Dadurch wird Docker Compose mitgeteilt, welche Konfigurationsversion Sie verwenden.
Sie haben dann die services
-Block, in dem Sie die Dienste einrichten, die Teil dieser Umgebung sind. In Ihrem Fall haben Sie einen einzigen Dienst namens web
. Dieser Dienst verwendet den nginx:alpine
image und richtet eine Portumleitung mit den ports
ein Richtlinie. Alle Anfragen auf Port 8000
des Hosts machine (das System, auf dem Sie Docker Compose ausführen) wird zum web
umgeleitet Container auf Port 80
, wo Nginx ausgeführt wird.
Die volumes
-Direktive erstellt ein gemeinsam genutztes Volume zwischen dem Hostcomputer und dem Container. Dadurch wird die lokale app
geteilt Ordner mit dem Container, und das Volume befindet sich unter /usr/share/nginx/html
innerhalb des Containers, der dann den Standarddokumentstamm für Nginx überschreibt.
Speichern und schließen Sie die Datei.
Sie haben eine Demoseite und eine docker-compose.yml
eingerichtet -Datei, um eine containerisierte Webserverumgebung zu erstellen, die ihr dient. Im nächsten Schritt richten Sie diese Umgebung mit Docker Compose ein.
Schritt 3 – Docker Compose ausführen
Mit der docker-compose.yml
Datei vorhanden ist, können Sie jetzt Docker Compose ausführen, um Ihre Umgebung aufzurufen. Der folgende Befehl lädt die erforderlichen Docker-Images herunter und erstellt einen Container für web
service und führen Sie die containerisierte Umgebung im Hintergrundmodus aus:
- docker-compose up -d
Docker Compose sucht zuerst nach dem definierten Image auf Ihrem lokalen System, und wenn es das Image nicht finden kann, lädt es das Image von Docker Hub herunter. Sie sehen eine Ausgabe wie diese:
OutputCreating network "compose-demo_default" with the default driver
Pulling web (nginx:alpine)...
alpine: Pulling from library/nginx
cbdbe7a5bc2a: Pull complete
10c113fb0c77: Pull complete
9ba64393807b: Pull complete
c829a9c40ab2: Pull complete
61d685417b2f: Pull complete
Digest: sha256:57254039c6313fe8c53f1acbf15657ec9616a813397b74b063e32443427c5502
Status: Downloaded newer image for nginx:alpine
Creating compose-demo_web_1 ... done
Hinweis: Wenn Sie bezüglich des Docker-Sockets auf einen Berechtigungsfehler stoßen, bedeutet dies, dass Sie Schritt 2 von How To Install and Use Docker on Ubuntu 20.04 übersprungen haben. Wenn Sie zurückgehen und diesen Schritt abschließen, werden Berechtigungen zum Ausführen von Docker-Befehlen ohne sudo
aktiviert .
Ihre Umgebung läuft jetzt im Hintergrund. Um zu überprüfen, ob der Container aktiv ist, können Sie Folgendes ausführen:
- docker-compose ps
Dieser Befehl zeigt Ihnen Informationen über die laufenden Container und ihren Status sowie alle derzeit vorhandenen Portumleitungen:
Output Name Command State Ports
----------------------------------------------------------------------------------
compose-demo_web_1 /docker-entrypoint.sh ngin ... Up 0.0.0.0:8000->80/tcp
Sie können jetzt auf die Demo-Anwendung zugreifen, indem Sie Ihren Browser entweder auf localhost:8000
verweisen wenn Sie diese Demo auf Ihrem lokalen Computer ausführen, oder your_server_domain_or_IP:8000
wenn Sie diese Demo auf einem Remote-Server ausführen.
Sie sehen eine Seite wie diese:
Das freigegebene Volume, das Sie innerhalb der docker-compose.yml
eingerichtet haben Datei hält Ihre app
Ordnerdateien mit dem Dokumentenstammverzeichnis des Containers synchronisieren. Wenn Sie Änderungen an index.html
vornehmen Datei, werden sie automatisch vom Container abgeholt und somit in Ihrem Browser angezeigt, wenn Sie die Seite neu laden.
Im nächsten Schritt erfahren Sie, wie Sie Ihre containerisierte Umgebung mit Docker Compose-Befehlen verwalten.
Schritt 4 – Machen Sie sich mit Docker Compose-Befehlen vertraut
Sie haben gesehen, wie Sie eine docker-compose.yml
einrichten Datei und bringen Sie Ihre Umgebung mit docker-compose up
hoch . Sie werden nun sehen, wie Sie Docker Compose-Befehle verwenden, um Ihre containerisierte Umgebung zu verwalten und mit ihr zu interagieren.
Um die von Ihrem Nginx-Container erstellten Protokolle zu überprüfen, können Sie die logs
verwenden Befehl:
- docker-compose logs
Sie sehen eine Ausgabe ähnlich der folgenden:
OutputAttaching to compose-demo_web_1
web_1 | /docker-entrypoint.sh: /docker-entrypoint.d/ is not empty, will attempt to perform configuration
web_1 | /docker-entrypoint.sh: Looking for shell scripts in /docker-entrypoint.d/
web_1 | /docker-entrypoint.sh: Launching /docker-entrypoint.d/10-listen-on-ipv6-by-default.sh
web_1 | 10-listen-on-ipv6-by-default.sh: Getting the checksum of /etc/nginx/conf.d/default.conf
web_1 | 10-listen-on-ipv6-by-default.sh: Enabled listen on IPv6 in /etc/nginx/conf.d/default.conf
web_1 | /docker-entrypoint.sh: Launching /docker-entrypoint.d/20-envsubst-on-templates.sh
web_1 | /docker-entrypoint.sh: Configuration complete; ready for start up
web_1 | 172.22.0.1 - - [02/Jun/2020:10:47:13 +0000] "GET / HTTP/1.1" 200 353 "-" "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/83.0.4103.61 Safari/537.36" "-"
Wenn Sie die Ausführung der Umgebung anhalten möchten, ohne den aktuellen Status Ihrer Container zu ändern, können Sie Folgendes verwenden:
- docker-compose pause
OutputPausing compose-demo_web_1 ... done
So setzen Sie die Ausführung nach einer Pause fort:
- docker-compose unpause
OutputUnpausing compose-demo_web_1 ... done
Die stop
Der Befehl beendet die Ausführung des Containers, zerstört jedoch keine mit Ihren Containern verknüpften Daten:
- docker-compose stop
OutputStopping compose-demo_web_1 ... done
Wenn Sie die mit dieser containerisierten Umgebung verbundenen Container, Netzwerke und Volumes entfernen möchten, verwenden Sie die down
Befehl:
- docker-compose down
OutputRemoving compose-demo_web_1 ... done
Removing network compose-demo_default
Beachten Sie, dass dadurch das von Docker Compose verwendete Basis-Image nicht entfernt wird, um Ihre Umgebung hochzufahren (in Ihrem Fall nginx:alpine
). ). Auf diese Weise, wenn Sie Ihre Umgebung mit einem docker-compose up
wieder hochfahren , wird der Prozess viel schneller sein, da sich das Image bereits auf Ihrem System befindet.
Falls Sie auch das Basis-Image von Ihrem System entfernen möchten, können Sie Folgendes verwenden:
- docker image rm nginx:alpine
OutputUntagged: nginx:alpine
Untagged: nginx@sha256:b89a6ccbda39576ad23fd079978c967cecc6b170db6e7ff8a769bf2259a71912
Deleted: sha256:7d0cdcc60a96a5124763fddf5d534d058ad7d0d8d4c3b8be2aefedf4267d0270
Deleted: sha256:05a0eaca15d731e0029a7604ef54f0dda3b736d4e987e6ac87b91ac7aac03ab1
Deleted: sha256:c6bbc4bdac396583641cb44cd35126b2c195be8fe1ac5e6c577c14752bbe9157
Deleted: sha256:35789b1e1a362b0da8392ca7d5759ef08b9a6b7141cc1521570f984dc7905eb6
Deleted: sha256:a3efaa65ec344c882fe5d543a392a54c4ceacd1efd91662d06964211b1be4c08
Deleted: sha256:3e207b409db364b595ba862cdc12be96dcdad8e36c59a03b7b3b61c946a5741a
Hinweis :Eine ausführlichere Referenz zu Docker-Befehlen finden Sie in unserem Leitfaden zur Installation und Verwendung von Docker.
Schlussfolgerung
In diesem Handbuch haben Sie gesehen, wie Sie Docker Compose installieren und eine containerisierte Umgebung basierend auf einem Nginx-Webserver-Image einrichten. Sie haben auch gesehen, wie Sie diese Umgebung mit Compose-Befehlen verwalten.
Für eine vollständige Referenz aller verfügbaren docker-compose
Befehle finden Sie in der offiziellen Dokumentation.
Wenn Sie an weiteren Verwendungsmöglichkeiten von Docker Compose interessiert sind, lesen Sie So installieren Sie WordPress mit Docker Compose und So sichern Sie eine containerisierte Node.js-Anwendung mit Nginx, Let’s Encrypt und Docker Compose.