Modius - Techblog

  • Ansible
  • Docker
  • DevOps
  • Gastautor werden
  • Newsletter abonnieren
  • Über Mich
  • Kontakt

Docker Compose Guide

Veröffentlicht am 17. Oktober 2022 von Christian Piazzi Hinterlasse ein Kommentar , Aktualisiert am 17. Oktober 2022
Geschätzte Lesezeit: 3 Minuten

Vor etwas längerer Zeit habe ich bereits hier auf dem Blog einen ganz kurzen Artikel zum Thema Docker Compose geschrieben. Da ich im Bezug auf Docker Compose immer wieder Fragen bekomme, möchte ich nun einen kleinen Docker Compose Guide schreiben und diesen mit den Fragen von Lesern immer mehr erweitern. Falls ihr also Fragen zu dem Thema habt, gerne direkt in die Kommentare.

Inhaltsverzeichnis

Was ist Docker Compose?

Bei Docker Compose handelt es sich um ein Tool, womit man sogenannte Multi-Container Anwendungen realisieren kann. Was heißt das aber jetzt genau?

Als Beispiel zur Erläuterung nehmen wir mal eine Website (wie z.B. ein WordPress Blog). Eine Webseite besteht für gewöhnlich aus mindestens zwei Applikationen: Einer Datenbank und eine Webserver. Diese beiden Anwendungen kann man z.B. Auf demselben Server laufen lassen, oder auf unterschiedlichen Server.

Dasselbe funktioniert auch mit Containern. Man kann einen Datenbank und einen Webserver Container starten. Man bekommt diese auch dazu, miteinander zu kommunizieren und kann so auch mit zwei einzelnen Docker Containern eine Webseite realisieren.

Mit Docker Compose würde man jetzt nicht jeden der beiden Container einzeln erstellen und über die Startparameter die Verbindung zwischen den Container herstellen, sonder man schreibt ein Start-Skript (Docker Compose File), welches beide Container startet und die Verbindungsparameter zwischen den Container gleich mit einrichtet.

Bei einer Anwendung mit nur zwei Containern macht das vielleicht noch nicht so viel Sinn. Aber die meisten Anwendungen (vor allem in der Microservice Architektur) haben deutlich mehr Container. Hier ist ein allgemeines Startskript für das komplette Setup durchaus sinnvoll.

docker-compose.yml

Um nun eine Multi-Container Anwendung mit Docker Compose zu realisieren, braucht man eine Datei mit dem Namen docker-compose.yml.

Um den Aufbau der Datei besser zu verstehen, zeige ich dir erstmal, wie man einen einzelnen Container mittels Docker Compose startet. Dafür kann der folgende Code in die docker-compose.yml Datei kopiert werden.

1
2
3
4
version: "3.9"
services:
  test_service:
    image: "hello-world"

Die docker-compose.yml startet immer mit dem festlegen der verwendeten Version. Dabei handelt es sich um die Version des Docker Compose Befehlssatzes und nicht um die eigentliche Docker Version.

In Zeile zwei starten wir den Bereich Services. In diesem Block können nun verschiedene Services definiert werden. In der dritten Zeile definieren wir den Service test_service und weisen diesem in der vierten Zeile das Docker Image hello-world zu.

Damit ist nun der einfachste Aufbau dieser Datei einmal erklärt. Als nächstes können wir das ganze einmal starten. Dafür verwendet man den folgenden Befehl:

1
docker-compose up

Nun werden als erstes die noch nicht auf dem System hinterlegten Images heruntergeladen. Anschließend sieht man im Terminal die Standardausgabe des hello-world Docker Images.

Schauen wir uns nun kurz an, welchen Namen der Docker Container bekommen hat. Dafür gibt man einfach docker ps -a im Terminal ein. Die Ausgabe sieht dann wie folgt aus:

1
2
3
docker ps -a
CONTAINER ID   IMAGE         COMMAND    CREATED          STATUS                      PORTS     NAMES
5529d1129c2b   hello-world   "/hello"   10 minutes ago   Exited (0) 10 minutes ago             docker-compose-article_test_service_1

Wie man sieht, hat der Docker Container einen recht langen Namen bekommen. Dieser setzt sich wie folgt zusammen.

Beispiel für 2 Container mit couchdb und Python FLASK

Als nächstes Beispiel zeige ich euch mal ein zwei Container Setup. Dabei wird ein Image von Dockerhub verwendet (couchdb) und als zweiten Container nehmen wir ein selbst erstelltes Docker Images welches beim Starten mit Docker Compose automatisch gebaut wird.

1
2
3
4
5
6
couchdb-python/
├── api
│   ├── dockerfile
│   └── src
│       └── app.py
└── docker-compose.yml

In das oberste Verzeichniss kommt die docker-compose.yml Datei. Für jeden Container, der beim Ausführen des compose files gebaut werden soll, wird ein neuer Unterordner angelegt.

In diesen Unterordner wird das dockerfile und alle zusätzlich benötigten Dateien abgelegt.

Für den API Container habe ich ein kleines Python Script erstellt.

Dieses erzeugt eine Instanz mit dem Namen test im CouchDB Container und fügt einen Beispieleintrag hinzu.

1
2
3
4
5
6
7
8
9
10
11
12
13
import couchdb
import time
 
time.sleep(5)
 
couch = couchdb.Server()
couch = couchdb.Server('http://admin:password@couchdb-python_couchdb_1:5984/')
 
db = couch.create('test') # newly created
doc = {'foo': 'bar'}
 
db.save(doc)
 

Nachdem der Python Code erstellt wurde, brauchen wir nun noch ein Dockerfile mit dem wir den Code in einem Container hinterlegen. Das Dockerfile sieht wie folgt aus:

1
2
3
4
5
6
7
FROM python
RUN pip install couchdb
RUN useradd -ms /bin/bash admin
USER admin
WORKDIR /src
COPY src /src
CMD ["python", "app.py"]

Damit haben wir alles für den Python Container fertig. Als nächstes ist die docker-compose.yml Datei an der Reihe. Den Inhalt der Datei könnt ihr euch einfach aus der nächsten Code Box kopieren.

1
docker-compose.yml

Jetzt können wir das Setup starten.

1
docker-compose up

Ob alles funktioniert hat, lässt sich nun recht einfach über den CouchDB Container prüfen. Diese liefert direkt ein Frontend mit, das man im Webbrowser aufrufen kann (http://localhost:5984/_utils/). Dort sieht man nun, dass die Instanz test angelegt wurde

Docker Compose File Mount

Wie bei normalen Docker Container kann es auch in einem Compose Setup sinnvoll sein Dateien vom Hostsystem in den Container einzubinden oder die Nutzdaten des Containers auf einen lokalen Speicher zu schreiben, damit diese persistent sind.

Der File Mount unter Docker Compose ist genauso einfach wie in einem Dockerfile.

Kategorie: Docker Tags: Compose, Container, Docker

Über Christian Piazzi

Ich blogge hier über alles, was mir so in meinem ITler Altag über den Weg läuft =)
Man findet mich privat bei Google+ und Twitter

Schreibe einen Kommentar Antworten abbrechen

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert

Kategorien

  • Linux
  • Internet, Bloggen & Co
  • Programmierung
  • Sicherheit
  • Netzwerk & Co
  • Mikrokontroller
  • Windows

Neueste Kommentare

  • Prometheus Installation unter Ubuntu - Modius - Techblog bei Prometheus Installation unter CentOS
  • Rainer bei Docker Container – anzeigen, starten, stoppen und löschen
  • Rainer Wohlfarth bei Docker Container – anzeigen, starten, stoppen und löschen
  • Rainer Wohlfarth bei Docker Container – anzeigen, starten, stoppen und löschen
  • Rainer Wohlfarth bei Docker Container – anzeigen, starten, stoppen und löschen

Werbung

Archive

Kontakt, Datenschutz und Impressum

  • Kontakt
  • Datenschutz
  • Impressum

Schlagwörter

Anleitung Ansible Apache Apple App Store Automatisierung Blogparade C++ Centos centos 7 CentOS7 Container Datenbank DevOps Docker Dr. Racket Dr. Scheme funktional Gastartikel Google HowTo httpd Icinga2 Icinga 2 Installation itsm Linux Minecraft Monitoring mooc MySQL owncloud PHP Plugin Programmierung python Raspberry Pi Schritt für Schritt Server Sicherheit Tutorial Ubuntu Update Windows Wordpress

Copyright © 2025 · Outreach Pro on Genesis Framework · WordPress · Anmelden