So installieren Sie Docker Compose unter Ubuntu 16.04

Einführung

Docker ist ein großartiges Tool zur Automatisierung der Bereitstellung von Linux-Anwendungen in Software-Containern. Um jedoch das Potenzial 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 namensFig entwickelt, mit der Sie eine einzige YAML-Datei verwenden können, um alle Ihre 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 Lernprogramm erfahren Sie, wie Sie die neueste Version von Docker Compose installieren, um Anwendungen mit mehreren Containern zu verwalten.

Voraussetzungen

Um diesem Artikel zu folgen, benötigen Sie einen Ubuntu 16.04-Server mit folgenden Eigenschaften:

Sobald diese vorhanden sind, können Sie mitmachen.

[.note] #Note: Obwohl die Voraussetzungen Anweisungen zur Installation von Docker unter Ubuntu 16.04 enthalten, sollten die Befehledocker in diesem Artikel unter anderen Betriebssystemen funktionieren, solange Docker installiert ist.
#

[[Schritt-1 - Installieren von Docker-Compose]] == Schritt 1 - Installieren von Docker Compose

Wir können Docker Compose zwar aus den offiziellen Ubuntu-Repositorys installieren, es handelt sich jedoch um mehrere Nebenversionen der neuesten Version. Daher installieren wir Docker Compose aus dem GitHub-Repository des Dockers. Der folgende Befehl unterscheidet sich geringfügig von dem auf der SeiteReleases. Durch Verwendung des Flags-o, um zuerst die Ausgabedatei anzugeben, anstatt die Ausgabe umzuleiten, wird durch diese Syntax vermieden, dass bei Verwendung vonsudo ein Fehler auftritt, dem die Berechtigung verweigert wurde.

Wir überprüfen diecurrent release und aktualisieren sie gegebenenfalls im folgenden Befehl:

sudo curl -L https://github.com/docker/compose/releases/download/1.18.0/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 1.18.0, build 8dd22a9

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]] == Schritt 2 - Ausführen eines Containers mit Docker Compose

Die öffentliche Docker-Registrierung Docker Hub enthält einHello World-Bild 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:

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 Befehldocker-compose up ausführen, wird nach einem lokalen Bild mit dem von uns angegebenen Namenhello-world gesucht. Mit dieser Option speichern und schließen wir die Datei.

Mit dem Befehldocker images können wir Bilder auf unserem System manuell anzeigen:

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-worldbefinden, führen wir den folgenden Befehl aus:

docker-compose up

Wenn der Befehl zum ersten Mal ausgeführt wird und kein lokales Image mit dem Namenhello-world vorhanden ist, ruft Docker Compose es aus dem öffentlichen Docker Hub-Repository ab:

OutputPulling my-test (hello-world:latest)...
latest: Pulling from library/hello-world
c04b14da8d14: Downloading [==================================================>] c04b14da8d14: Extracting [==================================================>]  c04b14da8d14: Extracting [==================================================>]  c04b14da8d14: Pull complete
Digest: sha256:0256e8a36e2070f7bf2d0b0763dbabdd67798512411de4cdcf9431a1feb60fd9
Status: Downloaded newer image for hello-world:latest
. . .

Nach dem Abrufen des Images erstelltdocker-compose einen Container, hängt das Programmhelloan und führt es aus. Dies bestätigt wiederum, dass die Installation anscheinend funktioniert:

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 of docker-compose up1. The Docker client contacted the Docker daemon.
2. The Docker daemon pulled the "hello-world" image from the Docker Hub.
3. The Docker daemon created a new container from that image which runs the executable that produces the output you are currently reading.
4. The Docker daemon streamed that output to the Docker client, which sent it to your terminal.

Docker-Container werden nur ausgeführt, solange der Befehl aktiv ist. Sobaldhelloausgeführt wurde, wurde der Container gestoppt. Wenn wir uns aktive Prozesse ansehen, werden folglich die Spaltenüberschriften angezeigt, aber der Containerhello-worldwird nicht aufgelistet, da er nicht ausgeführt wird.

docker ps
OutputCONTAINER ID        IMAGE               COMMAND             CREATED             STATUS                      PORTS               NAMES

Wir können die Containerinformationen anzeigen, die wir im nächsten Schritt benötigen, indem wir das-a-Flag verwenden, das alle Container anzeigt, nicht nur die aktiven:

docker ps -a
OutputCONTAINER ID        IMAGE               COMMAND             CREATED             STATUS                      PORTS               NAMES
06069fd5ca23        hello-world         "/hello"            35 minutes ago      Exited (0) 35 minutes ago                       drunk_payne

Hier werden die Informationen angezeigt, die zum Entfernen des Containers erforderlich sind, wenn wir damit fertig sind.

[[Schritt-3 - Entfernen des Bildes - optional]] == Schritt 3 - Entfernen des Bildes (optional)

Um unnötigen Speicherplatz zu vermeiden, entfernen wir das lokale Image. Dazu müssen wir alle Container, die auf das Bild verweisen, mit dem Befehldocker rm löschen, gefolgt von der CONTAINER-ID oder dem NAME. Im Folgenden verwenden wir die CONTAINER-ID aus dem gerade ausgeführten Befehldocker ps -a. Achten Sie darauf, die ID Ihres Containers zu ersetzen:

docker rm 06069fd5ca23

Sobald alle Container, die auf das Bild verweisen, entfernt wurden, können wir das Bild entfernen:

docker rmi hello-world

Fazit

Wir haben jetzt Docker Compose 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, sollten Sie sich dieses praktische BeispielHow To Configure a Continuous Integration Testing Environment with Docker and Docker Compose on Ubuntu 16.04 ansehen