Einführung
Docker ist ein hervorragendes Tool zur Automatisierung der Bereitstellung von Linux-Anwendungen in Software-Containern. Um jedoch das Potenzial dieser Anwendung voll auszuschöpfen, sollte jede Komponente einer Anwendung in einem eigenen Container ausgeführt werden. Bei komplexen Anwendungen mit vielen Komponenten kann es schnell unhandlich werden, alle Container für das gemeinsame Starten, Kommunizieren und Herunterfahren zu orchestrieren.
Die Docker-Community hat eine beliebte Lösung namens Fig entwickelt, mit der Sie eine einzige YAML-Datei verwenden können, um alle Docker-Container und -Konfigurationen zu orchestrieren. Dies wurde so populär, dass das Docker-Team beschloss, Docker Compose basierend auf der Fig-Quelle zu erstellen, die jetzt veraltet ist. Mit Docker Compose können Benutzer die Prozesse von Docker-Containern einfacher orchestrieren, einschließlich des Startens, Herunterfahrens und Einrichtens von Verknüpfungen und Volumes innerhalb von Containern.
In diesem Tutorial zeigen wir Ihnen, wie Sie die neueste Version von Docker Compose installieren, um Multi-Container-Anwendungen auf einem Debian 9-Server zu verwalten.
Voraussetzungen
Um diesem Artikel zu folgen, benötigen Sie:
-
Ein Debian 9-Server und ein Nicht-Root-Benutzer mit Sudo-Rechten. Diese initial Server-Setup mit Debian 9-Tutorial erklärt, wie dies eingerichtet wird.
-
Docker installiert mit den Anweisungen aus * Schritt 1 * und * Schritt 2 * von How To Installieren und Verwenden von Docker unter Debian 9
Schritt 1 - Installieren von Docker Compose
Obwohl wir Docker Compose aus den offiziellen Debian-Repositorys installieren können, gibt es mehrere Nebenversionen hinter der neuesten Version, sodass wir es aus dem GitHub-Repository von Docker installieren werden. Der folgende Befehl unterscheidet sich geringfügig von dem auf der Seite Releases. Indem Sie das Flag "+ -o " verwenden, um die Ausgabedatei zuerst anzugeben, anstatt die Ausgabe umzuleiten, wird durch diese Syntax vermieden, dass bei Verwendung von " sudo +" ein Fehler mit verweigerter Berechtigung auftritt.
Wir überprüfen die current release und aktualisieren sie gegebenenfalls im folgenden Befehl:
sudo curl -L https://github.com/docker/compose/releases/download//docker-compose-`uname -s`-`uname -m` -o /usr/local/bin/docker-compose
Als Nächstes legen wir die Berechtigungen fest:
sudo chmod +x /usr/local/bin/docker-compose
Dann überprüfen wir, ob die Installation erfolgreich war, indem wir die Version überprüfen:
docker-compose --version
Dies wird die von uns installierte Version ausdrucken:
Outputdocker-compose version , build f46880fe
Nachdem wir Docker Compose installiert haben, können wir ein Beispiel für "Hello World" ausführen.
Schritt 2 - Ausführen eines Containers mit Docker Compose
Die öffentliche Docker-Registrierung, Docker Hub, enthält ein Hello World-Image zur Demonstration und zum Testen. Es zeigt die minimale Konfiguration, die erforderlich ist, um einen Container mit Docker Compose auszuführen: eine YAML-Datei, die ein einzelnes Image aufruft. Wir werden diese minimale Konfiguration erstellen, um unseren "+ Hallo-Welt +" - Container auszuführen.
Zunächst erstellen wir ein Verzeichnis für die YAML-Datei und verschieben es in das folgende Verzeichnis:
mkdir hello-world
cd hello-world
Dann erstellen wir die YAML-Datei:
nano docker-compose.yml
Fügen Sie den folgenden Inhalt in die Datei ein, speichern Sie die Datei und beenden Sie den Texteditor:
docker-compose.yml
my-test:
image: hello-world
Die erste Zeile in der YAML-Datei wird als Teil des Containernamens verwendet. Die zweite Zeile gibt an, welches Bild zum Erstellen des Containers verwendet werden soll. Wenn wir den Befehl "+ docker-compose up" ausführen, wird nach einem lokalen Bild mit dem von uns angegebenen Namen "+ hello-world" gesucht. Mit dieser Option speichern und schließen wir die Datei.
Wir können Bilder auf unserem System mit dem Befehl + docker images +
manuell betrachten:
docker images
Wenn überhaupt keine lokalen Bilder vorhanden sind, werden nur die Spaltenüberschriften angezeigt:
OutputREPOSITORY TAG IMAGE ID CREATED SIZE
Jetzt, während wir uns noch im Verzeichnis "+ ~ / hello-world +" befinden, führen wir den folgenden Befehl aus:
docker-compose up
Wenn bei der ersten Ausführung des Befehls kein lokales Image mit dem Namen "+ Hallo-Welt" vorhanden ist, wird es von Docker Compose aus dem öffentlichen Repository von Docker Hub abgerufen:
OutputPulling my-test (hello-world:)...
latest: Pulling from library/hello-world
9db2ca6ccae0: Pull complete
Digest: sha256:4b8ff392a12ed9ea17784bd3c9a8b1fa3299cac44aca35a85c90c5e3c7afacdc
Status: Downloaded newer image for hello-world:latest
. . .
Nachdem Sie das Bild gezogen haben, erstellt "+ docker-compose +" einen Container, hängt ihn an und führt das Programm "https://github.com/docker-library/hello-world/blob/85fd7ab65e079b08019032479a3f306964a28f4d/hello-world/Dockerfile[hello" aus. was wiederum bestätigt, dass die Installation zu funktionieren scheint:
Output. . .
Creating helloworld_my-test_1...
Attaching to helloworld_my-test_1
my-test_1 |
my-test_1 | Hello from Docker.
my-test_1 | This message shows that your installation appears to be working correctly.
my-test_1 |
. . .
Dann gibt es eine Erklärung darüber aus, was es getan hat:
Output To generate this message, Docker took the following steps:
my-test_1 | 1. The Docker client contacted the Docker daemon.
my-test_1 | 2. The Docker daemon pulled the "hello-world" image from the Docker Hub.
my-test_1 | (amd64)
my-test_1 | 3. The Docker daemon created a new container from that image which runs the
my-test_1 | executable that produces the output you are currently reading.
my-test_1 | 4. The Docker daemon streamed that output to the Docker client, which sent it
my-test_1 | to your terminal.
Docker-Container werden nur ausgeführt, solange der Befehl aktiv ist. Nach Beendigung der Ausführung wurde der Container gestoppt. Wenn wir uns aktive Prozesse ansehen, werden die Spaltenüberschriften angezeigt, aber der Container "+ Hallo-Welt +" wird nicht aufgelistet, da er nicht ausgeführt wird:
docker ps
OutputCONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
Mit dem Flag "+ -a +" können wir die Containerinformationen anzeigen, die wir im nächsten Schritt benötigen. Dies zeigt alle Container, nicht nur aktive:
docker ps -a
OutputCONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
06069fd5ca23 hello-world "/hello" 35 minutes ago Exited (0) 35 minutes ago hello-world_my-test_1
Hier werden die Informationen angezeigt, die zum Entfernen des Containers erforderlich sind, wenn wir damit fertig sind.
Schritt 3 - Entfernen des Bildes (optional)
Um unnötigen Speicherplatz zu vermeiden, entfernen wir das lokale Image. Dazu müssen Sie alle Container löschen, die auf das Bild verweisen. Verwenden Sie dazu den Befehl "+ docker rm ", gefolgt von " CONTAINER ID " oder " NAME ". Im Folgenden verwenden wir die " CONTAINER ID " aus dem gerade ausgeführten " docker ps -a +" -Befehl. Achten Sie darauf, die ID Ihres Containers zu ersetzen:
docker rm
Sobald alle Container, die auf das Bild verweisen, entfernt wurden, können wir das Bild entfernen:
docker rmi hello-world
Fazit
Wir haben Docker Compose jetzt installiert, unsere Installation anhand eines Hello World-Beispiels getestet und das Test-Image und den Container entfernt.
Während das Hello World-Beispiel unsere Installation bestätigte, zeigt die einfache Konfiguration keinen der Hauptvorteile von Docker Compose: Sie kann eine Gruppe von Docker-Containern gleichzeitig auf und ab bewegen. Um die Leistungsfähigkeit von Docker Compose in Aktion zu sehen, können Sie sich dieses praktische Beispiel ansehen: https://www.digitalocean.com/community/tutorials/how-to-configure-a-continuous-integration-testing-environment- with-docker-and-docker-compose-on-ubuntu-16-04 [Konfigurieren einer Umgebung für kontinuierliche Integrationstests mit Docker und Docker Compose unter Ubuntu 16.04].