Docker Compose ist ein Tool, mit dem Sie die Bereitstellungen vieler verschiedener Docker-Container zentral verwalten können. Es ist ein wichtiges Tool für jede Anwendung, die mehrere Microservices benötigt, da es ermöglicht, dass sich jeder Service problemlos in einem separat verwalteten Container befindet.
Was macht Docker Compose?
Docker-Container werden zum Ausführen von Anwendungen in einer isolierten Umgebung verwendet. Heutzutage ist es üblich, dass Anwendungsbereitstellungen in Docker durchgeführt werden, da dies zahlreiche Vorteile bietet. Allerdings ist es oft nicht so einfach, nur einen einzelnen Container zu betreiben. Normalerweise kommen viele Container zusammen, um als ein zusammenhängender Dienst zu fungieren, der aus vielen beweglichen Teilen besteht.
Die Verwaltung all dieser Elemente zur Bereitstellungszeit ist unübersichtlich. Um dies zu bereinigen, bietet Docker Docker Compose, ein Konfigurationstool, mit dem mehrere Container gleichzeitig ausgeführt werden können. Sie können die gesamte Konfiguration in einer YAML-Datei definieren und dann alle Container mit einem Befehl starten.
Anstatt alle Ihre Dienste in einem großen Container zu haben, können Sie sie mit Docker Compose in einzeln verwaltbare Container aufteilen. Dies ist sowohl für die Erstellung als auch für die Bereitstellung besser, da Sie sie alle in separaten Codebasen verwalten können und nicht jeden einzelnen Container manuell starten müssen.
Die Verwendung von Docker Compose ist ein dreistufiger Prozess:
- Erstellen Sie die Komponenten-Images mit ihren Dockerfiles oder ziehen Sie sie aus einer Registrierung.
- Definieren Sie alle Komponentendienste in einer
docker-compose.yml
Datei. - Führen Sie alle zusammen mit
docker-compose
aus CLI.
Docker Compose ist keine andere Art von Dockerfile. Sie müssen Ihre Docker-Container weiterhin mit einem Dockerfile erstellen und veröffentlichen. Aber anstatt sie direkt auszuführen, können Sie Docker Compose verwenden, um die Konfiguration einer Bereitstellung mit mehreren Containern zu verwalten.
Wie verwenden Sie Docker Compose?
Die Konfiguration für eine Docker-Compose-Datei erfolgt in docker-compose.yml
. Sie müssen dies nicht wie ein Dockerfile im Stammverzeichnis Ihres Projekts platzieren. Tatsächlich kann es überall hingehen, da es von keinem anderen Code abhängt. Wenn Sie die Images jedoch lokal erstellen, müssen sie mit dem zu erstellenden Code in einen Projektordner verschoben werden.
Eine Compose-Konfigurationsdatei sieht etwa wie folgt aus. Diese Konfiguration führt eine WordPress-Instanz mit wordpress
aus Container aus dem Docker Hub. Dies hängt jedoch von einer MySQL-Datenbank ab, die ebenfalls von Compose erstellt wird.
version: '3' services: db: image: mysql:5.7 volumes: - db_data:/var/lib/mysql restart: always environment: MYSQL_ROOT_PASSWORD: rootpasswordchangeme MYSQL_DATABASE: wordpress MYSQL_USER: usernamechangeme MYSQL_PASSWORD: passwordchangeme wordpress: depends_on: - db image: wordpress:latest ports: - "8000:80" restart: always environment: WORDPRESS_DB_HOST: db:3306 WORDPRESS_DB_USER: usernamechangeme WORDPRESS_DB_PASSWORD: passwordchangeme volumes: db_data:
Werfen wir einen Blick auf das Format dieser Datei. Zuerst eine Versionsnummer, da sich die Syntax je nach verwendeter Version ändern kann.
Als nächstes eine Liste von Diensten. Die erste heißt „db“ und verwendet den mysql:5.7
Container, auf immer neu starten und mit Umgebungsvariablen, um die Datenbank mit einem Benutzer und einem Passwort zu konfigurieren. Um Daten über Neustarts hinweg beizubehalten, ist dieses Image mit einem Docker-Volume konfiguriert, das im MySQL-Datenverzeichnis gemountet ist.
Der andere Dienst ist „wordpress“, der vom Datenbankdienst abhängt und sicherstellt, dass Docker sicherstellt, dass die Datenbank vor dem Ausführen gestartet wird. Es legt Port 80 als Port 8000 offen und setzt einige Umgebungsvariablen, damit es eine Verbindung zu MySQL herstellen kann. Beachten Sie, dass der Host für die Datenbank auf db:3306
gesetzt ist , der den WordPress-Container anweist, sich mit dem „db“-Dienst zu verbinden.
Zuletzt werden die Volumes für die dauerhafte Speicherung definiert. Optional können Sie auch benutzerdefinierte Netzwerke für die Container definieren. Es gibt viele erweiterte Optionen, die Sie konfigurieren können. Wenn Sie also etwas Bestimmtes tun möchten, sollten Sie die Dokumentation für Docker Compose lesen.
Einmal konfiguriert, ist das Starten dieses Dienstes einfach. Führen Sie einfach docker-compose up
aus , wodurch alle erforderlichen Container abgerufen und Ihre Dienste gestartet werden.
docker-compose up -d
Und Sie sollten die auf dem System laufenden Dienste mit docker ps
sehen . In diesem Fall sehen Sie, dass WordPress ordnungsgemäß funktioniert.
VERBINDUNG: So installieren Sie Docker und Docker Compose unter Linux
Bauen mit Docker Compose
Docker Compose kann auch innerhalb eines Dockerfile-Projekts verwendet werden und kann so eingerichtet werden, dass ein Image lokal erstellt und ausgeführt wird, anstatt es vom Docker Hub abzurufen.
Dazu müssen Sie lediglich einen build
hinzufügen Abschnitt über den Dienst. Sie können unterschiedliche Kontextverzeichnisse sowie unterschiedliche Dockerfiles für unterschiedliche Bilder festlegen.
version: "3.8" services: webapp: build: context: ./dir dockerfile: Dockerfile-alternate image: imagename:tag
In diesem Fall das image:
-Variable ist ebenfalls festgelegt, aber hier wird sie verwendet, um das Image zu taggen, das von Docker Compose erstellt wird.