Test II - Zusammenfassung¶
Auflistung der Lernziele¶
Sie kennen die Syntax von Dockerfiles
Sie können das Beispiel von Dockerfiles nachvollziehen
Sie können eigene Dockerfiles erstellen, testen und dokumentieren
Sie kennen den Einsatzzweck von Docker Compose
Sie verstehen den Aufbau einer YAML-Datei und können eigene YAML-Dateien erstellen
Sie können Docker Compose anwenden
Sie verstehen wie in Docker Compose mit Passwörtern oder sonstigen geheimen Informationen umgegangen wird
Detaillierte Erklärungen¶
1. Sie kennen die Syntax von Dockerfiles¶
Ein Dockerfile enthält Anweisungen zum Erstellen eines Docker-Images. Die wichtigsten Schlüsselwörter sind:
FROM: Definiert das Basis-Image (z.B.
FROM ubuntu:latest
)LABEL: Fügt Metadaten zum Image hinzu (z.B.
LABEL maintainer="email@example.com"
)RUN: Führt Befehle während des Image-Builds aus (z.B. Paketinstallation)
COPY/ADD: Kopiert Dateien vom Host ins Image-Dateisystem
CMD: Definiert den Standardbefehl beim Containerstart
ENTRYPOINT: Definiert den Hauptprozess des Containers
ENV: Setzt Umgebungsvariablen (z.B.
ENV PORT=3000
)EXPOSE: Legt Ports fest, die vom Container bereitgestellt werden
VOLUME: Definiert persistente Datenspeicherorte
USER: Setzt den Benutzer für folgende Befehle
WORKDIR: Legt das Arbeitsverzeichnis für folgende Befehle fest
2. Sie können das Beispiel von Dockerfiles nachvollziehen¶
Im Kursbeispiel wird ein einfacher Webserver mit Apache und PHP erstellt:
# Datei: bsp-apache-php/Dockerfile
FROM php:8-apache
COPY index.php /var/www/html
Dieses Dockerfile:
Verwendet
php:8-apache
als Basis-ImageKopiert die lokale
index.php
in das Verzeichnis/var/www/html
im Container
Der Workflow zum Testen ist:
# Image erstellen
docker build -t bsp-apache-php .
# Container starten
docker run -d --name bsp-apache-php-container -p 8080:80 bsp-apache-php
Anschließend ist die Webseite unter http://localhost:8080 erreichbar.
3. Sie können eigene Dockerfiles erstellen, testen und dokumentieren¶
Um ein eigenes Dockerfile zu erstellen:
Erstellen Sie eine Datei namens
Dockerfile
im ProjektverzeichnisDefinieren Sie ein Basis-Image mit
FROM
Fügen Sie weitere Anweisungen hinzu (Installation von Paketen, Kopieren von Dateien, etc.)
Erstellen Sie das Image mit
docker build -t image-name .
Testen Sie das Image, indem Sie einen Container starten:
docker run -d --name container-name -p host-port:container-port image-name
Beispiel für einen eigenen Webserver:
FROM ubuntu:latest
LABEL maintainer="email@example.com"
LABEL description="Webserver Image für www.meine-webseite.ch"
# Umgebungsvariablen einstellen
ENV TZ="Europe/Zurich" \
APACHE_RUN_USER=www-data \
APACHE_RUN_GROUP=www-data \
APACHE_LOG_DIR=/var/log/apache2
# Zeitzone einstellen und Apache installieren
RUN ln -snf /usr/share/zoneinfo/$TZ /etc/localtime && \
echo $TZ > /etc/timezone && \
apt-get update && \
apt-get install -y apt-utils apache2 && \
apt-get -y clean && \
rm -r /var/cache/apt /var/lib/apt/lists/* && \
a2ensite default-ssl && \
a2enmod ssl
# Ports freigeben
EXPOSE 80 443
# Webroot als Volume definieren
VOLUME /var/www/html
# Startkommando
CMD ["/usr/sbin/apache2ctl", "-D", "FOREGROUND"]
4. Sie kennen den Einsatzzweck von Docker Compose¶
Docker Compose ist ein Tool zum Definieren und Ausführen von Multi-Container-Docker-Anwendungen. Die Hauptvorteile sind:
Vereinfachte Konfiguration: Alle Container-Konfigurationen in einer einzigen YAML-Datei
Mikrodienste: Einfache Verwaltung von mehreren miteinander kommunizierenden Diensten
Automatisierte Koordination: Gemeinsames Starten und Stoppen mehrerer Container mit einem Befehl
Wiederverwendbarkeit: Eine Anwendung kann einfach auf verschiedenen Umgebungen bereitgestellt werden
Umgebungsvariablen: Einfache Konfiguration über Umgebungsvariablen oder Dateien
Netzwerk und Volumes: Automatische Einrichtung von Netzwerken und Datenpersistenz
Mit Docker Compose können komplexe Anwendungen (wie eine Webanwendung mit Datenbank und Cache) in einer einzigen Datei definiert und mit docker-compose up
gestartet werden.
5. Sie verstehen den Aufbau einer YAML-Datei und können eigene YAML-Dateien erstellen¶
YAML (YAML Ain’t Markup Language) ist ein menschenlesbares Datenserialiserungsformat, das in Docker Compose verwendet wird.
Grundlegende YAML-Syntax:
Kommentare beginnen mit
#
Key-Value-Paare werden mit Doppelpunkt getrennt:
key: value
Listen beginnen mit einem Bindestrich:
- item1 - item2
Einrückungen werden mit Leerzeichen (nicht Tabs) vorgenommen und sind bedeutungsvoll
Komplexe Strukturen werden durch Einrückungen dargestellt:
person: name: John skills: - python - docker
Für Docker Compose ist die Struktur standardisiert mit:
version
: Die Compose-Dateiversionservices
: Die zu erstellenden Containernetworks
: Benutzerdefinierte Netzwerkevolumes
: Persistente Daten-Volumessecrets
: Sichere Speicherung von Passwörtern
6. Sie können Docker Compose anwenden¶
Die Anwendung von Docker Compose umfasst:
Erstellung einer
docker-compose.yml
-Datei im Projektverzeichnis:version: "3.8" services: web: image: nginx:latest ports: - "8080:80" database: image: mariadb environment: MYSQL_ROOT_PASSWORD: example MYSQL_DATABASE: mydb
Starten der Anwendung mit:
docker-compose up -d
Stoppen der Anwendung mit:
docker-compose down
Wichtige Service-Konfigurationen in docker-compose.yml:
image
: Das zu verwendende Docker-Imagebuild
: Das Verzeichnis mit dem Dockerfile (Alternative zuimage
)ports
: Port-Weiterleitungen (Host:Container)volumes
: Gemountete Datei-Volumesenvironment
: Umgebungsvariablennetworks
: Zugewiesene Netzwerkedepends_on
: Startabhängigkeiten zu anderen Diensten
7. Sie verstehen wie in Docker Compose mit Passwörtern oder sonstigen geheimen Informationen umgegangen wird¶
Docker Compose bietet mehrere Möglichkeiten zum Umgang mit vertraulichen Daten:
Umgebungsvariablen in der docker-compose.yml:
services: database: image: mariadb environment: MYSQL_ROOT_PASSWORD: ${DB_PASSWORD}
Die Variable
DB_PASSWORD
kann in einer.env
-Datei definiert werden:DB_PASSWORD=supersecure
Secrets: Eine sicherere Methode für vertrauliche Daten:
services: db: image: mysql:latest environment: MYSQL_ROOT_PASSWORD_FILE: /run/secrets/db_root_password secrets: - db_root_password secrets: db_root_password: file: db_root_password.txt
Hier wird das Passwort aus der Datei
db_root_password.txt
gelesen und dem Container als Datei unter/run/secrets/db_root_password
bereitgestellt.
Der Vorteil bei Secrets liegt in der Trennung sensibler Daten von der Konfiguration und der sicheren Verwaltung im Container-Dateisystem, wodurch die Passwörter nie in Logs oder der Kommandozeile sichtbar sind.