Wie kann ich Docker Compose installieren?
Dieser Guide erklärt Dir es + wie Docker Compose funktioniert.
Starten wir!
Was ist Docker?
Die Software-Virtualiserung Docker nutzt eine Container-Virtualisierung. In diesen Container können Programmen isoliert vom Hosts-System laufen.
Im Gegensatz zu virtuellen Maschinen sind Docker-Container leichtgewichtiger und verbrauchen nicht so viel Ressourcen. Die Ressourcen müssen nicht fix zu Beginn genannt sein, sondern die Docker Engine weist den Containern die Ressourcen zu, welche diese zurzeit brauchen.
Der Computer (Host) entscheidet, welche Ressourcen und Hardware dem einzelnen Container zuweisbar sind. Die Containerisierung ermöglicht es, mehrere Instanzen desselben Programms auf einem Computer ohne eine gegenseitige Beeinflussung laufen zu lassen.
Docker Container basieren auf Docker Images (binäre Blobs), welche Du mit einem Terminal-Befehl hochfährst. Die Docker Images beinhaltet den kompilierten Code der Software und alle Abhängigkeiten. Die Container nutzen ein konfigurierbares und virtualisiertes Netzwerk und separate Speicher (Volumes).
Was ist eine Docker Compose?
Alle Entwickler lieben eine „Docker Compose“, die für das viele Tippen in ein Terminal zu faul sind. Erweiterte Docker-Kommandos sind sehr lang und unübersichtlich, wegen der schlechten Lesbarkeit in der CLI.
Ein Docker-Compose Datei speichert den Inhalt des Docker Kommandos ab. Ein Docker-Compose ist kein normales Shell-Script, sondern eine yml- / yaml-Datei, welche die notwendigen Parameter bereitstellt.
Der Entwickler muss nur noch docker-compose up
tippen, um den Container zu starten und docker-compose down
zu herunterfahren.
Warum Docker Compose bevorzugen?
Diese Top 3 Gründe sollten Dich dazu bewegen, die Docker-CLI in den meisten Fällen links liegenzulassen:
Schon wieder was vergessen? – Persistent
Docker Container brauchen je nach Installation verschiedene Parameter. Schnell hast Du einen Parameter vergessen oder verlierst Dich in dem ultralangen Kommando.
Das Dateiformat speichert das Kommando in einem lesbaren Format ab.
Tausende Snippets managen – Struktur
Docker Kommandos können je nach Wunsch variiert sein.
Die YAML macht den Chaoten einen Strich durch die Rechnung und jeder Aspekt ist einzeln strukturiert anzugeben.
Starten und Stopp-Automatik
Du möchtest einen Docker Container mit weniger als 16 Tastenanschlägen hochfahren:
docker-compose up
// und
docker-compose down
Installieren
Docker
Für die Docker Compose brauchst Du erst einmal eine Docker Installation auf Deinem Computer. Hast Du ein Debian-basierendes System (Ubuntu, Linux Mint, PopOS usw.) gebe einfach ein.
sudo apt-get install docker.io
Manuelle kannst Du so vorgehen. Lade die Voraussetzungen herunter:
sudo apt install apt-transport-https ca-certificates curl software-properties-common
Füge die Keys / Repos hinzu:
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -
sudo add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu focal stable"
sudo add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu focal stable"
apt-cache policy docker-ce
Installiere Docker über apt:
sudo apt install docker-ce
Starte den Docker Service:
sudo systemctl status docker
Teste den
Befehl mit
:
docker
In Windows nutzt Du das Windows Subsystem for Linux (WSL), um die Software zu laufen zu bekommen. Alternativ kannst Du das Desktop-Programm nutzen:
Downloade Dir die .exe und führe das Programm aus. Folge der Installationsanleitung und schließe die Installation ab.
Docker-Compose
In Linux / Debian:
sudo apt-get update
sudo apt-get install docker-compose-plugin
Docker Compose ist Teil von der Windows Version „Docker for Desktop“ und muss nicht nach installiert werden.
Die Docker Compose Datei
Die Docker-Compose Datei benennst Du in einem Repo idealerweise immer docker-compose.yml. Dies ist der Standardname, welcher Docker immer sucht, wenn Du den Befehl docker-compose up
tippst.
Die Datei beginnt mit einer Versionsnummer. Jede Version hat einen unterschiedlichen Funktionsumfang. In der Regel solltest Du die neuste verwenden, um alle verfügbaren Features zu nutzen:
version: "3.8"
services:
pihole:
image: pihole/pihole:latest
ports:
- "53:53/tcp"
- "53:53/udp"
- "67:67/udp"
- "50006:80/tcp"
environment:
TZ: "Europe/Berlin"
WEBPASSWORD: "superapssword"
volumes:
- "./pihole/etc-pihole/:/etc/pihole/"
- "./pihole/etc-dnsmasq.d/:/etc/dnsmasq.d/"
restart: unless-stopped
Unter dem Tag services
definierst Du freie Namen für die Docker-Container, die Du laufen lassen willst. Start mehrere Docker-Container in einer Compose-Datei, indem Du mehrere Images / Container angibst.
Images
Das Image „pihole/pihole:latest“
ist vom Docker Hub frei verfügbar. Von dort kannst Du 100 Images am Tag downloaden bzw. Deinem lokalen Cache bei einer Neuinstallation verwenden.
Ports und Netzwerk
Dann folgen die Port-Freigaben nach dem Schema:
Host-Port(nach außen):Docker-Port(nach innen)/Transportprotokoll(tcp/udp)
Statt den Ports manuell anzugeben, arbeitet der Modus network-mode:hosts
wie die Port-Freigaben wie ein nativ installierte Anwendung auf einem Baremetal-Server. Docker arbeitet mit verschieden Netzwerk-Modi, die Du als Treiber angeben kannst:
- host: Keine Isolation zwischen den Container – wie ein Baremetal-Server
- bridge: Die Container können miteinander kommunizieren.
- overlay: Wenn Du Docker-Swarms miteinander verbinden willst, brauchst Du diese Form der Kommunikation.
- none: Unterbindet die Kommunikation hinein / heraus.
Umgebungsvariablen
Je nach Container brauchst Du noch einen Klumpen an Umgebungsvariablen. Dazu musst Du Dich mit der Doku der Software auseinandersetzen.
Volumes
Die Volumes halten alle Daten, welche nach dem Neustart nicht verfallen dürfen. Ohne ein Docker-Volume setzt die Docker Engine die Anwendung während des Starts zurück. Du kannst entweder Docker Volumes direkt in der yml erstellen …
volumes:
myfirstvolume:
… oder vorher mit einem Docker-Befehl:
docker volume create myfirstvolume
Du kannst die Volumes alternativ in einen Ordner auf Dein Host-Dateisystem mounten. Dazu muss der Ordner vorhanden sein, welche Du in der Docker-Compose angibst:
/etc/pihole/
Eine Ordner-Verschachtlung kannst Du mit mkdir -p /etc/pihole/ erstellen.
Restart-Policy
Der Container hält sich an die Restart-Policy, wenn dieser abstürzt.
- always: Starte jedes Mal neu
- unless-stopped: Wie always nur beim expliziten Stop-Befehl ist der Container zu stoppen
- no: Kein Neustart
- on-failure: Wenn ein Fehler auftritt, dann startet der Container neu.
Integrations-Guide mit Docker Build
Eine Docker-Compose lässt sich gut mit einem Docker-Build verbinden. Die Dockerfile beinhaltet, wie aus dem Code, eine Build und Run-Container ein fertiges Image erstellt wird. Jedes Docker-Compose braucht ein Image, welch auf einem solchem Dockerfile basiert. Die Images haben wir uns vorher vom Docker Hub gezogen. Alternativ können wir statt:
image: pihole/pihole:latest
-->
build:.
In unser Compose-File schrieben. Wenn der Code, die Dockerfile und Docker-compose im gleichen Ordner liegen, startet der Docker Image Build automatisch. Die Scripts kompilieren den Quellcode, bauen das Image und die Compose startet das Image mit allen Parameter, Volumens und Netzwerken. Genial!