Docker Compose ist ein Tool, das sich nativ in Docker integriert und die Verwaltung von Multi-Container-Anwendungen zum Kinderspiel macht.
Die Vorteile von Docker Compose sind zahlreich, darunter einige:
- Containernetzwerke einfach verwalten: Das Verbinden von zwei Containern über ein Docker-Netzwerk ist in Docker Compose supereinfach, da es so einfach ist, ein Netzwerk zu definieren und den Containern zu sagen, dass sie sich damit verbinden sollen. Darüber hinaus kann Docker Compose automatisch Netzwerke erstellen und zerstören, während Sie die Container selbst erstellen und zerstören.
- Container-Abhängigkeiten: Sie haben einen Docker-Container, der einen anderen Docker-Container benötigt, um beispielsweise eine Datenbank auszuführen. Docker Compose ermöglicht es Ihnen, Abhängigkeiten für einen Container zu definieren, wobei die Abhängigkeiten betriebsbereit sein müssen, bevor irgendetwas anderes gestartet wird.
- Reproduzierbare Einstellungen: Da das Container-Setup definiert wird, bevor überhaupt etwas erstellt wird, ermöglicht dies eine Reproduzierbarkeit von Setups und erleichtert die Übertragung auf andere Systeme. Während Sie dies theoretisch in etwas wie Bash tun könnten, kann es die Dinge weniger flexibel und schwieriger an Änderungen anzupassen.
Installieren von Docker Compose unter Linux
Docker Compose ist in den meisten Distributions-Repositories verfügbar.
Sie können Docker Compose auf Ubuntu- und Debian-basierten Distributionen mit dem folgenden Befehl installieren:
sudo apt install docker-compose
Auf Arch und Manjaro können Sie Folgendes verwenden:
sudo pacman -S docker-compose
Auf Fedora können Sie den dnf-Befehl verwenden:
sudo dnf install docker-compose
Möglicherweise müssen Sie sich bei der Installation von Docker Compose unter CentOS etwas mehr Mühe geben.
Für alle anderen Distributionen können Sie jederzeit in der Installationsdokumentation nach Informationen zum Erhalt der erforderlichen Pakete suchen.
Erstellen unserer ersten Docker-Compose-Datei
In diesem Handbuch wird davon ausgegangen, dass Sie bereits mit dem Docker-CLI-Tool vertraut und vertraut sind. Wenn dies nicht der Fall ist, ziehen Sie in Betracht, dies zu tun, da Sie sonst wahrscheinlich auf ein paar einfache Schluckaufe stoßen werden.
Docker Compose-Dateien werden unter dem Namen docker-compose.yml
gespeichert , und werden automatisch gefunden, wenn Sie docker-compose
ausführen Befehle im selben Verzeichnis. Seine Syntax hat die Form von, Sie haben es erraten, YAML.
Wir haben ein spezielles Tutorial zu den YAML-Grundlagen, falls Sie daran interessiert sind.
YAML-Grundlagen, die jeder DevOps-Ingenieur kennen mussAls DevOps-Ingenieur haben Sie viel mit YAML-Dateien zu tun. Es ist immer eine gute Idee, die grundlegende YAML-Syntax zu verstehen. Linux-HandbuchRakesh JainWir beginnen mit einer Datei, die eine Nextcloud-Instanz erstellt, und gehen dann darauf ein, wie sie tatsächlich das getan hat, was sie getan hat.
Das Wichtigste zuerst, Sie müssen die Erstellungsdatei erstellen. Erstellen Sie ein leeres Verzeichnis auf Ihrem System und erstellen Sie die docker-compose.yml
Datei.
Als nächstes füllen Sie die Datei mit folgendem Inhalt:
version: '3.5'
services:
nextcloud_app:
container_name: nextcloud_app
image: nextcloud
restart: unless-stopped
networks:
- nextcloud
ports:
- 80:80
volumes:
- ./data/app:/var/www/html
depends_on:
- nextcloud_mariadb
nextcloud_mariadb:
container_name: nextcloud_mariadb
image: mariadb
restart: unless-stopped
networks:
- nextcloud
volumes:
- ./data/mariadb:/var/lib/mysql
environment:
MARIADB_ROOT_PASSWORD: 'mariadb'
networks:
nextcloud:
name: nextcloud_docker_network
Jetzt müssen Sie nur noch docker-compose up -d
ausführen , und Sie hätten Nextcloud erfolgreich mit Docker bereitgestellt.
Hier ist die Anmeldeseite von Nextcloud.
Unsere Docker-Compose-Datei verstehen
Nachdem Sie nun gesehen haben, dass die Datei tatsächlich funktioniert, lassen Sie uns den Inhalt der Datei durchgehen, damit Sie tatsächlich verstehen, was genau sie tut.
Das 'version'-Tag
version: '3.5'
Das Wichtigste zuerst, die version
Schild. Dies gibt nur die Version des Docker Compose-Dateiformats an, da verschiedene Versionen unterschiedliche Syntax haben. Im Allgemeinen möchten Sie dies auf der neuesten Version halten, aber das muss nicht sein, was hilfreich sein kann, wenn Sie einige ältere Dateien haben.
Das 'services'-Tag
services:
nextcloud_app:
container_name: nextcloud_app
image: nextcloud
restart: unless-stopped
networks:
- nextcloud
ports:
- 80:80
volumes:
- ./data/app:/var/www/html
depends_on:
- nextcloud_mariadb
nextcloud_mariadb:
container_name: nextcloud_mariadb
image: mariadb
restart: unless-stopped
networks:
- nextcloud
volumes:
- ./data/mariadb:/var/lib/mysql
environment:
MARIADB_ROOT_PASSWORD: 'mariadb'
Als nächstes sehen Sie die services
Schild. Dies startet die Liste für alle Anwendungen, die erstellt werden, wenn docker-compose up -d
wird ausgeführt.
Danach starten wir das Listing für unseren ersten Container, nextcloud_app
. Dies dient als Kennung für die App, die von anderen Docker Compose-Befehlen verwendet werden kann. Beachten Sie, dass dies nicht ist der Name des Containers selbst - das wird im nächsten Teil angegeben.
Jetzt fangen Sie an, alles über Ihren Container zu definieren. Hier ist eine Zusammenfassung der Bedeutung aller Felder, obwohl die meisten selbsterklärend sein sollten, wenn Sie sich bereits mit Docker auskennen:
container_name
- Definiert den Namen des Containers. Äquivalent zu--name
Möglichkeit.image
- Definiert, welches Image für den Container gezogen werden soll.restart
– Definiert die Neustartrichtlinie für den Container. Entspricht--restart
.networks
- Definiert ein Netzwerk, mit dem sich der Container verbindet. Dieses Netzwerk kann erstellt werden oder bereits existieren. Dieser Wert dient als Kennung fürdocker-compose
und ist nicht der tatsächliche Name des Netzwerks (das in dennetworks
definiert ist Tag-Abschnitt).ports
- Definiert Host-Ports, mit denen der Container eine Verbindung herstellen kann. Entspricht--publish
.volumes
- Definiert Volumen für den Container. Äquivalent zu--volume
.environment
- Definiert Umgebungsvariablen für den Container. Entspricht--env
. Diese Option unterstützt zwei Syntaxtypen. Die erste istvariable: value
, was hier verwendet wird. Die andere Option, die vielleicht bekannter ist, wenn Sie andocker
gewöhnt sind CLI-Syntax, ist- variable=value
.depends_on
ab - Gibt Containerabhängigkeiten an. Dies wird verwendet, um zu verlangen, dass ein Container nicht gestartet wird, bis seine Abhängigkeiten dies getan haben. Dies akzeptiert Werte aus den Containerlisten. (Nichtcontainer_name
!)
Das 'networks'-Tag
networks:
nextcloud:
name: nextcloud_docker_network
Nun gelangen Sie zu den networks
Schild. Dies wird verwendet, um die Netzwerke zu definieren, die wir unter networks
aufgelistet haben für unsere Container.
Innerhalb der networks
listen Sie zunächst die Kennung auf, die Sie dem Netzwerk unter services
gegeben haben . Hier war das nextcloud
.
Als nächstes definieren Sie den Namen des Netzwerks, das mit docker network ls
gesehen werden kann . Hier haben wir es nextcloud_docker_network
genannt .
Wenn Sie möchten, dass die Container einem bereits bestehenden Netzwerk beitreten, würden Sie die folgende Syntax verwenden und dabei network_name
ersetzen mit dem Namen des Docker-Netzwerks:
networks:
nextcloud:
external: true
name: network_name
Und los geht's. Das fasst die ganze Datei zusammen!
Sie können die yml-Datei beliebig benennen, aber dann müssen Sie den Dateinamen angeben, wenn Sie die docker-compose-Befehle verwenden. Die Beibehaltung der Tradition und die Benennung docker-compose.yml halten die Befehle kurz.Abschluss
Jetzt kennen Sie die Grundlagen der Verwendung von Docker Compose und die Vorteile, die Sie durch seine Verwendung erzielen können. Sie sind jetzt auch auf dem Weg zu verstehen, was Leute tun, wenn sie ihre Container über Compose-Dateien verteilen.
Etwas funktioniert nicht oder Sie haben noch Fragen? Sie können sie gerne im Kommentarbereich unten hinterlassen.