Ein Anfängerleitfaden für Docker Compose

Ein Anfängerleitfaden für Docker Compose
Docker Compose ist eines der nützlichsten Tools für Softwareentwickler und Systemadministratoren. Viele Jobs erfordern jemanden mit Kenntnis dieser Technologie. Ohne Zweifel wird es Ihrer IT -Karriere zugute kommen, wenn man weiß, wie man diese Technologien einsetzt.

Wenn Sie ein Anfänger von Docker komponieren, aber einige Kenntnisse über Docker haben, ist dieser Artikel genau das Richtige für Sie. Sie werden erfahren:

  • Was ist Docker Compose?
  • Beliebte Vergleiche
  • Docker Compose gegen Kubernetes
  • Docker Compose gegen Docker Swarm
  • Installieren von Docker Compose
  • Der Docker-Compose.YML -Datei
  • Docker-Compose-Befehle

Bevor Sie in die saftigen Teile dieses Artikels eintauchen, sollte ein kleiner Hintergrund über die Technologie großartig sein.

Die Containerisierung ist ein wesentlicher Bestandteil der Software-Infrastruktur geworden, die für große, mittlere oder kleine Projekte gilt. Während Container nicht neu sind, hat Docker sie beliebt gemacht. Bei Containern gehören Abhängigkeitsprobleme der Vergangenheit an. Container spielen auch eine große Rolle, um die Mikro-Services-Architektur sehr effektiv zu machen. Softwareanwendungen bestehen aus kleineren Diensten, daher ist es einfach, diese Dienste in Containern zu haben, und sie kommunizieren.

Das Problem dabei ist, dass so viele Container laufen werden. So dass das Management komplex wird. Dadurch wird ein Tool erforderlich, um mehrere Container auszuführen, die Docker komponiert. Am Ende des Artikels werden Sie verstehen, dass grundlegende Docker Konzepte komponieren und sie auch verwenden können.

Was ist Docker Compose?

Ohne die Komplexität ist Docker Compose ein Tool, mit dem Sie mehrere Docker -Container verwalten können. Denken Sie an die Mikrodienste? Das Konzept der Aufteilung einer Webanwendung in verschiedene Dienste? Nun, diese Dienste werden in einzelnen Containern erfolgen, die verwaltet werden müssen.

Stellen Sie sich vor, eine Webanwendung hat einige dieser Dienste:

  • Anmeldung
  • anmelden
  • Passwort zurücksetzen
  • Geschichte
  • Diagramm

Nach einer mikroserviceartigen Architektur werden diese Dienste in separaten Containern geteilt und ausgeführt. Docker Compose erleichtert es einfach, alle diese Container zu verwalten, anstatt sie einzeln zu verwalten. Es ist wichtig zu beachten, dass Docker Compose nicht explizit Docker -Bilder erstellt. Die Aufgabe beim Aufbau von Bildern erfolgt von Docker über die Dockerfile.

Beliebte Vergleiche

Es ist üblich, viele Lösungen für ein Problem zu haben. Docker Compose löst dieses Problem der Verwaltung mehrerer Container. Infolgedessen gibt es häufig Vergleiche mit anderen Lösungen. Sie sollten beachten, dass die meisten dieser Vergleiche die falschen sind. Obwohl sie oft nicht gültig sind, lernen Sie sie am besten über sie, da es Ihnen hilft, Docker besser zu verstehen.

Die beiden zu diskutierten Vergleiche sind:

  • Docker Compose gegen Kubernetes
  • Docker Compose gegen Docker Swarm

Docker Compose gegen Kubernetes

Kubernetes wird oft mit Docker Compose verglichen. Die Ähnlichkeiten in beiden Werkzeugen sind jedoch winzig, mit großen Unähnlichkeiten. Diese Technologien befinden sich nicht auf derselben Ebene oder Skala. Daher ist der Vergleich beider Tools völlig falsch.

Kubernetes, das im Volksmund als K8S bekannt ist, ist ein Open-Source-Tool, mit dem Container automatisiert werden können (nicht auf Docker beschränkt). Mit K8s können Sie Container bereitstellen und verwalten, um sicherzustellen, dass sie bei verschiedenen Lasten skalieren. Kubernetes sorgt dafür.

Kubernetes ist ein leistungsfähigeres Werkzeug. Es eignet sich besser für die Verabreichung von Containern für große Anwendungen in der Produktion.

Docker Compose gegen Docker Swarm

Docker Compose wird auch häufig mit Docker Swarm verglichen, und es ist so falsch wie der Kubernetes -Vergleich. Stattdessen sollte Docker Swarm derjenige sein, der mit Kubernetes verglichen wird.

Docker Swarm ist ein Open-Source. Beide haben ihre Vor- und Nachteile, aber das ist nicht das Thema Diskussion. Sie werden es gut machen, zu wissen, dass beide ähnlich sind, und auch keine Alternative zu Docker Compose.

Installieren von Docker Compose

Docker Compose ist ein offizielles Docker -Tool, aber es wird nicht mit der Docker -Installation geliefert. Sie müssen es also als separates Paket installieren. Der Installationsprozess von Docker Compose für Windows und Mac ist auf der offiziellen Website verfügbar.

Um Docker Compose auf Ubuntu zu installieren, können Sie den folgenden Befehl verwenden:

sudo apt-get install docker-compose

Um Docker Compose für andere Linux -Distributionen zu installieren, können Sie Curl verwenden. Führen Sie einfach die folgenden Befehle aus:

sudo curl -l
https: // github.com/docker/komponieren/veröffentlichen/download/1.18.0/Docker-Compose-'Uname
-S ' -' Uname -m '-o/usr/local/bin/docker -compose

Dann:

sudo chmod +x/usr/local/bin/docker-compose

Der erste Befehl lädt die neueste Version von Docker herunter, um das für Pakete deditierte Verzeichnis zu komponieren. Der zweite legt die Dateiberechtigungen fest, wodurch sie ausführbar ist.

Der Docker-Compose.YML -Datei

Es wird nicht furchtbar falsch sein zu sagen, dass eine Docker -Komponierungsdatei für Docker komponiert wird, was eine Dockerfile für Docker ist. In der Docker -Komponierungsdatei liegt alle Anweisungen, die Docker komponieren, bei der Verwaltung der Container. Hier definieren Sie die Dienste, die am Ende Container sind. Sie definieren auch die Netzwerke und Volumina, von denen die Dienste abhängen.

Die Docker Compose-Datei verwendet die YAML-Syntax, und Sie müssen als Docker-Compose speichern.YML. Sie können Dienste für Backend-, Frontend-, Datenbank- und Nachrichtenwarteschlangen in einer Web -App haben. Diese Dienste benötigen spezifische Abhängigkeiten. Abhängigkeiten wie Netzwerke, Ports und Speicher für einen optimalen Betrieb. Alles, was für die gesamte Anwendung benötigt wird, wird in der Docker -Komponierungsdatei definiert.

Sie benötigen ein grundlegendes Verständnis der YAML -Syntax, um Ihre Komponierungsdatei zu schreiben. Wenn Sie damit nicht vertraut sind, sollte es weniger als eine Stunde dauern, um zu erfassen. In Ihrer Datei gibt es viele Schlüsselwertpaarungen oder Anweisungen. Die oberen Ebenen sind:

  • Ausführung
  • Dienstleistungen
  • Netzwerk
  • Bände

Die Version und die Dienste werden jedoch nur besprochen, da Sie die beiden anderen in der Diensteanweisung definieren können.

Ausführung

Wenn Sie Ihre Datei schreiben, definieren Sie zuerst die Version. Zum Zeitpunkt des Schreibens hat Docker Compose nur Versionen 1, 2 und 3. Es ist nicht verwunderlich, dass es die empfohlene Version ist, die zu verwenden ist, da sie bestimmte Unterschiede zu den älteren Versionen gibt.

Sie können die Version für Docker komponieren, die in der unten angezeigten Datei verwendet werden soll:

  • Version: "3"
  • Version 2.4 ”
  • Version 1.0 "

Dienstleistungen

Der Serviceschlüssel ist wohl der wichtigste Schlüssel in einer Docker -Komponierungsdatei. Hier geben Sie die Container an, die Sie erstellen möchten. In diesem Abschnitt der Datei gibt es viele Optionen und unzählige Kombinationen zum Konfigurieren von Containern. Dies sind einige Optionen, die Sie unter dem Diensteschlüssel definieren können:

  • Bild
  • Container_Name
  • Neu starten
  • Kommt drauf an
  • Umfeld
  • Häfen
  • Bände
  • Netzwerke
  • Einstiegspunkt

Im Rest dieses Abschnitts erfahren Sie, wie sich jede dieser Optionen auf die Container auswirkt.

Bild

Diese Option definiert, welches Bild als Dienst verwendet. Es verwendet die gleiche Konvent. Hier ist ein Beispiel:

Bild: Postgres: Neueste

Es gibt jedoch keine Einschränkung, DockerHub -Dateien allein zu verwenden. Sie können Bilder von Ihrem Computer über Ihre Docker -Komponierungsdatei mit einer DockerFile auch über Ihre Docker -Komponierungsdatei erstellen. Sie können die Richtlinien "Build", "Kontext" und "Dockerfile" verwenden.

Hier ist ein Beispiel:

bauen:
Kontext: .
Dockerfile: Dockerfile

"Kontext" sollte den Pfad zum Verzeichnis mit der Dockerfile enthalten. Dann enthält „Dockerfile“ den Namen der zu verwendenden Dockerfile. Es ist konventionell, Ihre Dockerfiles immer als „Dockerfile“ zu nennen, aber dies gibt die Möglichkeit, etwas anderes zu verwenden. Sie sollten beachten, dass dies nicht die einzige Möglichkeit ist, ein Bild über eine Dockerfile zu verwenden.

Container_Name

Docker weist Containern zufällige Namen zu. Sie möchten jedoch möglicherweise individuelle Namen für die Container haben. Mit dem Schlüssel „Container_Name“ können Sie Containern bestimmte Namen geben, anstatt von Dockern zufällig generierte Namen.

Hier ist ein Beispiel:

Container_Name: LinuxHint-App

Es gibt jedoch eine Sache, mit der Sie vorsichtig sein sollten: Geben Sie mehrere Dienste nicht denselben Namen an. Containernamen müssen eindeutig sein; Dies führt dazu, dass die Dienste scheitern.

Neu starten

Die Softwareinfrastruktur ist zum Scheitern verurteilt. Mit der Kenntnis davon ist es einfacher zu planen, sich von diesem Fehler zu erholen. Es gibt viele Gründe, warum ein Container scheitert. Sie haben die folgenden Optionen, nein, immer, vor Ort und nicht gestoßen. Diese Optionen implizieren, dass ein Container nie neu startet, immer neu gestartet wird, nur beim Fehler oder nur beim Stoppen neu gestartet wird.

Hier ist ein Beispiel:

Neustart: Immer

Kommt drauf an

Dienstleistungen isoliert laufen. Aber praktisch können Dienste nicht viel isoliert tun. Es muss eine Abhängigkeit von anderen Diensten bestehen. Zum Beispiel hängt der Backend -Service einer Web -App von Datenbanken, Caching -Diensten usw. ab. In der Schlüssel "abhängig_on" können Sie die Abhängigkeiten hinzufügen.

Hier ist ein Beispiel:

kommt drauf an:
- db

Dies bedeutet, dass Docker Compose diese Dienste vor dem aktuellen Starten startet. Es stellt jedoch nicht sicher, dass diese Dienste für den Einsatz bereit sind. Die einzige Garantie ist, dass die Container beginnen.

Umfeld

Anwendungen hängen von bestimmten Variablen ab. Für Sicherheit und Benutzerfreundlichkeit extrahieren Sie sie aus dem Code und setzen sie als Umgebungsvariablen ein. Beispiele für solche Variablen sind API -Schlüssel, Passwörter usw. Diese sind in Webanwendungen üblich. Beachten Sie, dass dieser Schlüssel nur dann funktioniert, wenn in diesem Dienst keine „Build“ -Richtlinie vorhanden ist. Erstellen Sie daher das Bild im Voraus.

Schau dir das an:

Umfeld:
API-Key: "The-api-Key"
Konfiguration: 'Entwicklung'
Session_Secret: 'The-Secret' '

Wenn Sie beabsichtigen, die Anweisung "Build" zu verwenden, müssen Sie die Umgebungsvariablen in einer "Args" -Richtlinie definieren. Die Richtlinie „Args“ ist eine Unterableitung von "Build".

Hier ist ein Beispiel:

bauen:
Kontext: .
Args:
API-Key: "The-api-Key"
Konfiguration: 'Entwicklung'
Session_Secret: 'The-Secret' '

Häfen

Kein Behälter funktioniert isoliert, obwohl sie getrennt von den anderen laufen. Um einen Link zur Kommunikation mit der „Außenwelt“ bereitzustellen, müssen Sie Ports abbilden. Sie zeichnen den Port des Docker -Containers dem tatsächlichen Host -Port ab. Aus Docker sind Sie möglicherweise auf das Argument „-P“ gestoßen, mit dem Ports abgebildet werden. Die Anweisungsrichtlinie funktioniert ähnlich dem Argument "-P".

Häfen:
- "5000: 8000"

Bände

Docker -Container haben keine Möglichkeit, Daten anhaltend zu speichern, daher verlieren sie Daten, wenn sie neu starten. Mit Bänden können Sie dies umgehen. Das Volumen ermöglicht es, eine anhaltende Datenspeicherung zu erstellen. Dies geschieht, indem ein Verzeichnis vom Docker -Host in das Verzeichnis des Docker -Containers steigt. Sie können auch Volumes als Top -Level -Dienste einrichten.

Hier ist ein Beispiel:

Bände:
- Host-Z-Größen:/Test/Verzeichnis

Bei der Konfiguration des Volumens stehen viele Optionen zur Verfügung. Sie können sie überprüfen.

Netzwerke

Netzwerke können auch in Diensten erstellt werden. Mit dem Netzwerkschlüssel können Sie das Netzwerk für einzelne Dienste einrichten. Hier können Sie den Treiber einrichten, den das Netzwerk verwendet, wenn es IPv6 usw. erlaubt, usw. Sie können auch wie Bände Netzwerke wie Dienste einrichten.

Hier ist ein Beispiel:

Netzwerke:
- Standard

Es gibt viele Optionen beim Konfigurieren von Netzwerken. Sie können sie überprüfen.

Einstiegspunkt

Wenn Sie einen Container starten, müssen Sie häufig bestimmte Befehle ausführen. Wenn der Dienst beispielsweise eine Webanwendung ist, müssen Sie den Server starten. Mit dem Einstiegspunktschlüssel können Sie dies tun. Einstiegspunkt funktioniert wie Eintragspunkt in Dockerfile. Der einzige Unterschied in diesem Fall besteht darin, dass alles, was Sie hier definieren, die Einstiegspunktkonfigurationen in der Dockerfile überschreibt.Einstiegspunkt: Flasklauf

Hier ist ein Beispiel:

Einstiegspunkt: Flasklauf

Docker Compose -Befehle

Nachdem Sie eine Docker-Compose-Datei erstellt haben, müssen Sie bestimmte Befehle ausführen, um die Arbeit zu komponieren. In diesem Abschnitt erfahren Sie über einige wichtige Docker -Komponierungsbefehle. Sie sind:

  • Docker-Compose Up
  • Docker-Compose Down
  • Docker-Compose-Start
  • Docker-Compose-Stopp
  • Docker-Compose Pause
  • Docker-Compose unpause
  • Docker-Compose PS

Docker-Compose Up

Dieser Befehl docker-compose hilft beim Aufbau des Bildes und erstellt und startet Docker Container. Die Container stammen aus den in der Datei komponierten Datei angegebenen Dienste. Wenn die Container bereits ausgeführt werden und Sie Docker-Compose ausführen, wird der Container neu erstellt. Der Befehl ist:

Docker-Compose Up

Docker-Compose-Start

Dieser Befehl Docker-Compose startet Docker-Container, erstellt jedoch keine Bilder oder erstellt Container nicht. Es startet also nur Container, wenn sie zuvor erstellt wurden.

Docker-Compose-Stopp

Sie müssen die Behälter oft nach dem Erstellen und Starten anhalten. Hier ist der Befehl Docker-Compose Stop nützlich. Dieser Befehl stoppt im Grunde die laufenden Dienste, aber die Setup -Container und -Netzwerke bleiben intakt.
Der Befehl ist:

Docker-Compose-Stopp

Docker-Compose Down

Der Befehl Docker-Compose Down beendet auch Docker-Container wie der Stop-Befehl. Aber es geht die Extrameile. Docker-compose down, stoppt nicht nur die Container, sondern entfernt sie auch. Die Netzwerke, Volumina und tatsächliche Docker -Bilder können ebenfalls entfernt werden, wenn Sie bestimmte Argumente verwenden. Der Befehl ist:

Docker-Compose Down

Wenn Sie beabsichtigen, Volumes zu entfernen, geben Sie an, indem Sie -volumes hinzufügen. Zum Beispiel:

Docker-Compose Down-Volumen

Wenn Sie Bilder entfernen möchten, geben Sie durch Hinzufügen an -rmi alle oder -RMI LOCAL. Zum Beispiel:

Docker-Compose Down-RMI alle
Docker-Compose Down-RMI Lokal

Wo alle verursacht Docker, um alle Bilder zu entfernen, und lokal verursacht Docker, um nur Bilder zu entfernen, ohne dass ein benutzerdefiniertes Tag durch das Feld "Bild" festgelegt wurde.

Docker-Compose Pause

Es gibt Szenarien, in denen Sie einen Container suspendieren müssen, ohne ihn zu töten oder zu löschen. Sie können dies mit dem Befehl docker-compose pause erreichen. Es macht die Aktivitäten dieses Behälters an, sodass Sie sie wieder aufnehmen können, wenn Sie möchten. Der Befehl ist:

Docker-Compose Pause

Docker-Compose unpause

Der Docker-Compose-Unpause ist das Gegenteil des Befehls von Docker-Compose Pause. Sie können es verwenden, um suspendierte Prozesse wieder aufzunehmen, indem Sie die Docker-Compose-Pause verwenden. Der Befehl ist:

Docker-Compose unpause

Docker-Compose PS

Docker-Compose PS listet alle Container auf, die aus den Diensten in der Docker-Compose-Datei erstellt wurden. Das ist vergleichbar mit Docker PS Dadurch werden alle Container aufgeführt, die auf dem Docker -Host ausgeführt werden. Docker-Compose PS ist jedoch spezifisch für die Container aus der Docker-Komponierungsdatei. Der Befehl ist:

Docker-Compose PS

Alles zusammenbringen

Nachdem Sie einige der Schlüsselkonzepte hinter einer Docker -Komponierungsdatei gesehen haben, bringen wir alles zusammen,. Im Folgenden finden Sie eine Beispiel-Docker-Compose-Datei für eine Python-Django-Webanwendung. Sie werden eine Aufschlüsselung jeder Zeile in dieser Datei sehen und sehen, was sie tun.

Version: '3'
Dienstleistungen:
DB:
Bild: Postgres
Netz:
bauen: .
Befehl: Python verwalten.Py Runserver 0.0.0.0: 8000
Bände:
- .:/Code
Häfen:
- "8000: 8000"
kommt drauf an:
- db

Die Kurzgeschichte ist, dass mit dieser Docker-Compose-Datei eine PostgreSQL-Datenbank erstellt wird und ein Django-Server gestartet wird.

Die lange Geschichte ist:

  1. Diese Datei verwendet die Version 3 von Docker-Compose.
  2. Es schafft zwei Dienste. DB und Webdienste.
  3. Der DB -Dienst verwendet das offizielle Docker Postgres -Bild.
  4. Der Webdienst erstellt ein eigenes Bild aus dem aktuellen Verzeichnis. Da es nicht den Kontext- und DockerFile -Schlüssel definiert, wird erwartet, dass DockerFile von Convention als "Dockerfile" bezeichnet wird.
  5. Der Befehl, der nach dem Start des Containers ausgeführt wird, ist definiert.
  6. Das Volumen und die Ports sind definiert. Beide verwenden die Konvention von Host: Container Mapping.
  7. Für das Volumen das aktuelle Verzeichnis “.”Wird im Verzeichnis„/code “im Container zugeordnet. Dies hilft, die Daten im Container hartnäckig zu werden, sodass sie nicht jedes Mal verloren gehen, wenn der Container beginnt.
  8. Für den Port wird der Port 8000 des Hosts an den Port 8000 des Containers zugeordnet. Beachten Sie, dass die Web -App auf dem Port 8000 ausgeführt wird. Daher kann auf die Web -App über diesen Port auf dem Host zugegriffen werden.
  9. Schließlich hängt der Webdienst vom DB -Dienst ab. Daher beginnt der Webdienst erst, wenn der DB -Container begonnen hat.
  10. Mehr über die Dockerfile für die Django -Anwendung und die Docker Compose -Datei können aus der Dokumentation erhalten werden.

Abschluss

Sie müssen kein Experte mit Docker sein, um Docker Compose zu verwenden. Als Anfänger, der nicht beabsichtigt, dieses Tool zu beherrschen, ist es in Ordnung zu lernen, was Sie allein brauchen. In diesem Artikel haben Sie die Grundlagen von Docker Compose gelernt. Jetzt verstehen Sie, warum Docker Compose erforderlich ist, die falschen Vergleiche, die Einrichtung einer Docker -Komponierungs -Konfigurationsdatei und auch die Befehle. Es ist aufregend, diese Dinge zu kennen, aber die wahre Freude kommt davon, sie zum Üben zu bringen. Es ist Zeit, sich an die Arbeit zu machen.