Eine praktische Einführung in Docker Compose

Docker-Container eröffneten der Tech-Community eine Welt voller Möglichkeiten. Der Aufwand beim Einrichten neuer Software wurde im Gegensatz zu alten Zeiten, in denen ein Durcheinander nach einem schwerwiegenden Format sortiert werden sollte, verringert. Dies verkürzte die Zeit für das Einrichten und Verwenden neuer Software, die schließlich eine neue Software abspielte Ein großer Teil für Technikfreaks, um neue Dinge zu lernen, sie in einem Behälter auszurollen und sie zu verschrotten, wenn sie fertig sind. Die Dinge wurden einfach und das Beste, was Open Source jeder und jeder nutzen kann, ist jedoch mit einer kleinen Lernkurve verbunden.

Unter den unzähligen Möglichkeiten war die Möglichkeit, komplexe Technologie-Stacks für unsere Anwendungen zu implementieren, die zuvor Experten vorbehalten waren. Mit Hilfe von Containern können Softwareentwickler, die die zugrunde liegenden Systeme genau kennen, einen komplexen Stack implementieren. Warum nicht das Gebot der Stunde? Die Redewendung „Alleskönner“ hat ein ausgefallenes Upgrade erhalten. "Meister einiger" basierend auf den Bedürfnissen des Zeitalters. Setzen Sie einfach T-förmige Fähigkeiten ein.

Die Möglichkeit, einen komplexen Stapel in einer Datei zu definieren und mit einem einzigen Befehl auszuführen, ist ziemlich verlockend. Die Jungs von Docker Inc. nennen es Docker Compose.

In diesem Artikel verwenden wir Dockers Beispiel-Voting-App und stellen sie mit Docker Compose bereit.

Docker Compose

Mit den Worten von Docker Inc.

Compose ist ein Tool zum Definieren und Ausführen von Docker-Anwendungen mit mehreren Containern. Mit Compose verwenden Sie eine YAML-Datei, um die Dienste Ihrer Anwendung zu konfigurieren. Anschließend erstellen und starten Sie mit einem einzigen Befehl alle Dienste in Ihrer Konfiguration.

Die Voting App

Einführung der beliebtesten Demonstrations-App für die Docker-Community „The Voting App“, als ob überhaupt eine Einführung erforderlich wäre. Dies ist eine einfache Anwendung, die auf einer Mikrodienstarchitektur basiert und aus 5 einfachen Diensten besteht.

  1. Voting-App : Frontend der in Python geschriebenen Anwendung, mit der Benutzer ihre Stimmen abgeben können.
  2. Redis : In-Memory-Datenbank, die als Zwischenspeicher verwendet wird.
  3. Worker : .Net-Dienst, der zum Abrufen von Stimmen von Redis und zum Speichern in der Postres-Datenbank verwendet wird.
  4. DB : PostgreSQL-Datenbank, die als Datenbank verwendet wird.
  5. Ergebnis-App : Das Frontend der in Node.js geschriebenen Anwendung zeigt die Abstimmungsergebnisse an.

Das Voting-Repo verfügt über eine Datei namens docker-compose.ymlDiese Datei enthält die Konfiguration zum Erstellen der Container, zum Offenlegen von Ports, zum Binden von Volumes und zum Verbinden von Containern über Netzwerke, die für die Funktion der Voting-App erforderlich sind. Klingt nach ziemlich viel docker runund docker network createBefehlen ansonsten erlaubt uns Docker Compose, all diese Dinge in einer einzigen Docker-Compose-Datei im Yaml-Format abzulegen.

version: "3" services: vote: build: ./vote command: python app.py volumes: - ./vote:/app ports: - "5000:80" networks: - front-tier - back-tier result: build: ./result command: nodemon server.js volumes: - ./result:/app ports: - "5001:80" - "5858:5858" networks: - front-tier - back-tier worker: build: context: ./worker depends_on: - "redis" networks: - back-tier redis: image: redis:alpine container_name: redis ports: ["6379"] networks: - back-tier db: image: postgres:9.4 container_name: db volumes: - "db-data:/var/lib/postgresql/data" networks: - back-tier volumes: db-data: networks: front-tier: back-tier:

Git cloneund cdin das Voting App Repo.

Dockersamples / Beispiel-Voting-App

Beispiel-Voting-App - Beispiel Docker Compose App github.com

Zeit verfassen

Wenn alle unsere Anwendungen in einer einzigen Compose-Datei definiert sind, können wir erleichtert aufatmen, uns entspannen und die Anwendung einfach ausführen. Das Schöne an Compose liegt in der Tatsache, dass mit einem einzigen Befehl alle Dienste erstellt, die Netzwerke (im wahrsten Sinne des Wortes) verkabelt, alle Volumes bereitgestellt und die Ports verfügbar gemacht werden. Es ist Zeit, den upBefehl zu begrüßen und alle oben genannten Aufgaben auszuführen. $ Docker-compose up

Nach vielen "Pull complete", Hunderten von Megabyte und wenigen Minuten (vielleicht mehr). . .

Voila, wir haben die Voting-App in Betrieb.

Befehl docker pslistet alle laufenden Container auf

$ docker ps -a --format="table {{.Names}}\t{{.Image}}\t{{.Ports}}" NAMES IMAGE PORTS voting_worker_1 voting_worker db postgres:9.4 5432/tcp voting_vote_1 voting_vote 0.0.0.0:5000->80/tcp voting_result_1 voting_result 0.0.0.0:5858->5858/tcp, 0.0.0.0:5001->80/tcp redis redis:alpine 0.0.0.0:32768->6379/tcp

Der obige Befehl zeigt alle laufenden Container, die entsprechenden Bilder und die exponierten Portnummern an.

Auf die Voting-App kann unter // localhost: 5000 zugegriffen werden

Ebenso kann auf die Voting Results App unter // localhost: 5001 zugegriffen werden

Jede in der Voting-App abgegebene Stimme wird zuerst in der In-Memory-Datenbank von Redis gespeichert. Der .Net-Worker-Service holt die Stimme ab und speichert sie in der Postgres-Datenbank, auf die das Node.js-Frontend zugreift.

Features erstellen

Compose bietet die Flexibilität, einen Projektnamen zu verwenden, um die Umgebungen voneinander zu isolieren. Der Projektname ist der Basisname des Verzeichnisses, das das Projekt enthält. In unserer Abstimmungs-App wird dies durch den Namen der Container angezeigt, voting_worker_1wobei votingder Basisname des Verzeichnisses ist. Wir können einen benutzerdefinierten Projektnamen mithilfe des -pFlags gefolgt vom benutzerdefinierten Namen festlegen .

Compose behält alle Volumes bei, die von den in der Compose-Datei definierten Diensten verwendet werden. Daher gehen keine Daten verloren, wenn die Container mit neu erstellt werden docker-compose up. Ein weiteres cooles Feature ist, dass nur die Container neu erstellt werden, die sich geändert haben. Die Container, deren Status sich nicht geändert hat, bleiben unberührt.

Eine weitere coole Funktion ist die Unterstützung von Variablen in der Compose-Datei. Wir können Variablen in einer .envDatei definieren und sie in der Docker-Compose-Datei verwenden. Hier POSTGRES_VERSION=9.4kann die Dose in der Umgebungsdatei oder in der Shell definiert werden. Es wird in der Erstellungsdatei folgendermaßen verwendet:

db: image: "postgres:${POSTGRES_VERSION}"

Befehls-Spickzettel

Es ist ganz einfach, mit dem Komponieren zu beginnen, anzuhalten und herumzuspielen.

$ docker-compose up -d $ docker-compose down $ docker-compose start $ docker-compose stop $ docker-compose build $ docker-compose logs -f db $ docker-compose scale db=4 $ docker-compose events $ docker-compose exec db bash

Zusammenfassung

Docker Compose is a great tool to quickly deploy and scrap containers, the compose file can run seamlessly on any machine installed with docker-compose. Experimentation and learning technologies is just a Compose file away ;).

I hope this article helped in the understanding of Docker Compose. I’d love to hear about how you use Docker Compose in your projects. Share the knowledge, help it reach more people.