Docker erleichtert die Konfiguration von Software mithilfe von Containern. Docker Compose vereinfacht die Arbeite mit mehreren Containern. Ich installiere Docker Compose unter Ubuntu 20.04.
Voraussetzungen
Nach der Installation des Desktop Images von Ubuntu 20.04 LTS (Focal Fossa) verfüge ich über ein non-root-Superuser-Konto und kann direkt mit der Installation von Docker Compose beginnen.
Installieren von Docker Compose
Mit dem folgenden Befehl lädst du die Version v2.0.5
herunter und speicherst die ausführbare Datei unter /usr/local/bin/docker-compose
. So ist diese global als docker-compose
erreichbar. Die neueste Docker Compose Version findest du auf der Seite:
sudo curl -L "https://github.com/docker/compose/releases/download/v2.0.5/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
Die aktuellste
docker-compose
-Version findest du auf Github
Setze die notwendigen Berechtigungen:
sudo chmod +x /usr/local/bin/docker-compose
Überprüfe die Version und somit auch die Installation:
docker-compose --version
docker-compose version v2.0.5
Docker Compose ist nun installiert. Als nächstes erstellen wir eine docker-compose.yml
-Datei.
Die docker-compose.yml
-Datei
Um mir als Einsteiegerin einen Überblick zu verschaffen, beginne ich mit einem einfachen Beispiel. Ich erstelle mithilfe des Nginx-Images eine Webserverumgebung die eine statische HTML-Datei enthält. Dafür lege ich ein separates Verzeichnis an.
mkdir ~/compose-test
cd ~/compose-test
Ich lege ein weiteres Verzeichnis an, in dem ich die HTML-Datei ~/compose-test/app/index.html
ablegen. Die Datei ~/compose-test/app/index.html
beinhaltet den einfachen Text test
:
mkdir app
nano app/index.html
Ich verwende den Editor Nano. Hier klicke ich zum Speichern
STRG+X
, dannY
und zur BestätigungENTER
.
Ich erstelle als nächstes die Datei docker-compose.yml
:
nano docker-compose.yml
Inhalt der Datei docker-compose.yml
ist:
docker-compose.yml
version: '1.0'
services:
web:
image: nginx:alpine
ports:
- "8000:80"
volumes:
- ./app:/usr/share/nginx/html
Die Datei docker-compose.yml
beginnt mit der Versionsnummer version
.
Dann folgt der services
-Block, in dem wir die Dienste einrichten. Es gibt einen Dienst der das Image nginx:alpine
verwendet und mit der Anweisung ports
eine Portumleitung einrichtet. volumes
erstellt ein gemeinsames Volume - der lokale Ordner app
wird mit dem Container unter /usr/share/nginx/html
geteilt.
Im nächsten Schritt stellen wir diese Umgebung mithilfe von Docker Compose bereit.
Ausführen von Docker Compose
Die Datei docker-compose.yml
enthält alle Informationen. Der folgende Befehl
- lädt alle notwendigen Images herunter,
- erstellt einen Container für den
web
-Dienst und - führt die Umgebung im Hintergrundmodus aus.
Der Befehl muss im Verzeichnis composer-test
aufgerufen werden.
docker-compose up -d
Die Ausgabe sieht beispeilsweise so aus:
Creating network "app_default" with the default driver
Pulling web (nginx:alpine)...
alpine: Pulling from library/nginx
ksuhret5bc2a: Pull complete
...
Creating compose-test_web_1 ... done
Ich überprüfen, ob der Container aktiv ist:
docker-compose ps
Dieser Befehl zeigt Informationen über die ausgeführten Container an:
Name Command State Ports
----------------------------------------------------------------------------------
compose-test_web_1 /docker-entrypoint.sh ngin ... Up 0.0.0.0:8000->80/tcp
Somit ist der Container aktiv.
docker ps
listet alle laufenden Container in der Docker-Engine auf.docker-compose ps
listet Container auf, die sich auf Images beziehen, die in derdocker-compose.yml
-Datei deklariert sind. Das Ergebnis vondocker-compose ps
ist eine Teilmenge des Ergebnisses vondocker ps
.
Im Internet-Browser unter der URL localhost:8000
, oder auf Remote_IP:8000
, wird nun der Inhalt von ~/compose-test/app/index.html
angezeigt. In meinem Beispiel ist dies der Text test
.
Wenn ich den Inhalt der Datei ~/compose-test/app/index.html
ändere, wird dies automatisch vom Container übernommen und im Browser aktualisiert.
Docker Compose Befehle
Wir haben eine docker-compose.yml
-Datei erstellt und mit docker-compose
aufgerufen. Docker Compose biete mehr.
Der Befehl docker-compose logs
zeigt die mitprotokollierten Meldungen:
docker-compose logs
Die Ausgabe des Befehls ähnelt:
Attaching to compose-test_web_1
web_1 | /docker-entrypoint.sh: /docker-entrypoint.d/ is not empty, will attempt to perform configuration
web_1 | /docker-entrypoint.sh: Looking for shell scripts in /docker-entrypoint.d/
web_1 | /docker-entrypoint.sh: Launching /docker-entrypoint.d/10-listen-on-ipv6-by-default.sh
web_1 | 10-listen-on-ipv6-by-default.sh: Getting the checksum of /etc/nginx/conf.d/default.conf
web_1 | 10-listen-on-ipv6-by-default.sh: Enabled listen on IPv6 in /etc/nginx/conf.d/default.conf
web_1 | /docker-entrypoint.sh: Launching /docker-entrypoint.d/20-envsubst-on-templates.sh
web_1 | /docker-entrypoint.sh: Configuration complete; ready for start up
web_1 | 172.19.0.1 - - [30/Aug/2020:20:58:13 +0000] "GET / HTTP/1.1" 200 353 "-" "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/83.0.4103.61 Safari/537.36" "-"
In den Pausemodus schalte ich mit:
docker-compose pause
Die Pause beende ich mit:
docker-compose unpause
Der Befehl stop
beendet die Ausführung des Containers:
docker-compose stop
Verknüpften Container, Netzwerke und Volums werden mit down
entfernt:
docker-compose down
Das Image entferne ich mit:
docker image rm nginx:alpine
Eine vollständige Referenz aller verfügbaren docker-compose
Befehle ist die offizielle Dokumentation.
Comments