21 Docker-Container und Docker-Images: Erstellung, Verwaltung und Einsatz

21.1 Einführung

Docker-Container und Docker-Images sind zentrale Konzepte in Docker. Ein Image ist eine unveränderliche Vorlage, die den Code, die Bibliotheken, die Abhängigkeiten und andere Dateien enthält, die für das Ausführen einer Anwendung notwendig sind. Ein Container ist eine instanziierte Laufzeitumgebung, die auf einem Docker-Image basiert. In diesem Kapitel werden die Erstellung, Verwaltung und der Einsatz von Docker-Containern und Docker-Images beschrieben.

21.2 Docker-Images

21.2.1 Erstellung eines Docker-Images

Ein Docker-Image kann mithilfe eines Dockerfiles erstellt werden, das die Schritte zur Erstellung des Images definiert.

Beispiel: Einfaches Dockerfile

Datei: Dockerfile

# Base image
FROM ubuntu:20.04

# Install dependencies
RUN apt-get update && apt-get install -y python3 python3-pip

# Copy application files
COPY . /app

# Set the working directory
WORKDIR /app

# Install Python dependencies
RUN pip3 install -r requirements.txt

# Command to run the application
CMD ["python3", "app.py"]

Erstellen des Docker-Images:

Befehl:

docker build -t my-python-app .

Ausgabe:

Sending build context to Docker daemon  3.072kB
Step 1/6 : FROM ubuntu:20.04
 ---> 4e2eef94cd6b
Step 2/6 : RUN apt-get update && apt-get install -y python3 python3-pip
 ---> Using cache
 ---> 9b53d9b919f9
Step 3/6 : COPY . /app
 ---> Using cache
 ---> a1c0d830bdeb
Step 4/6 : WORKDIR /app
 ---> Using cache
 ---> 7f3d5e10d8a7
Step 5/6 : RUN pip3 install -r requirements.txt
 ---> Using cache
 ---> b1e7f9c8e872
Step 6/6 : CMD ["python3", "app.py"]
 ---> Using cache
 ---> 83be5441286f
Successfully built 83be5441286f
Successfully tagged my-python-app:latest

21.2.2 Docker-Images verwalten

21.2.2.1 Liste der Docker-Images anzeigen

Befehl:

docker images

Ausgabe:

REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
my-python-app       latest              83be5441286f        2 minutes ago       447MB
ubuntu              20.04               4e2eef94cd6b        4 weeks ago         72.9MB

21.2.2.2 Docker-Image löschen

Befehl:

docker rmi my-python-app

21.3 Docker-Container

21.3.1 Erstellen und Starten eines Docker-Containers

Befehl:

docker run -d -p 5000:5000 my-python-app

Ausgabe:

Unable to find image 'my-python-app:latest' locally
latest: Pulling from library/my-python-app
Digest: sha256:57a5274c1d6b88e4ff760a48ff0fcd67a3e78028edc8e8e3f5e3ec56f9a127c6
Status: Downloaded newer image for my-python-app:latest
a3b74fbdcb98b11f823eb6764f5bcd8e92a1d15bde5c6852e47a7bc0a27c3d49

21.3.2 Verwaltung von Docker-Containern

21.3.2.1 Liste der laufenden Container anzeigen

Befehl:

docker ps

Ausgabe:

CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS                    NAMES
a3b74fbdcb98        my-python-app       "python3 app.py"         2 minutes ago       Up 2 minutes        0.0.0.0:5000->5000/tcp   vigorous_bhaskara

21.3.2.2 Container stoppen

Befehl:

docker stop a3b74fbdcb98

21.3.2.3 Container löschen

Befehl:

docker rm a3b74fbdcb98

21.3.3 Docker-Containerlogs anzeigen

Befehl:

docker logs a3b74fbdcb98

Ausgabe:

 * Running on http://0.0.0.0:5000/ (Press CTRL+C to quit)

21.3.4 Docker-Container Zugriff

21.3.4.1 In einen laufenden Container wechseln

Befehl:

docker exec -it a3b74fbdcb98 /bin/bash

Erklärung: Dieser Befehl öffnet eine interaktive Bash-Shell im laufenden Container.

21.4 Docker-Container persistent machen

21.4.1 Daten-Volumes

Docker-Volumes ermöglichen es, Daten außerhalb des Containers zu speichern, sodass sie beim Neustarten oder Löschen des Containers nicht verloren gehen.

21.4.1.1 Erstellen eines Volumes

Befehl:

docker volume create my-volume

21.4.1.2 Verwenden eines Volumes in einem Container

Befehl:

docker run -d -p 5000:5000 -v my-volume:/app/data my-python-app

Erklärung: Dieser Befehl startet einen Container und bindet das Docker-Volume my-volume an das Verzeichnis /app/data im Container.

Die Verwaltung von Docker-Containern und -Images ist entscheidend für den effektiven Einsatz von Docker in der Entwicklungs- und Produktionsumgebung. Docker-Images bieten eine wiederholbare und portable Möglichkeit, Anwendungen zu paketieren, während Docker-Container die Ausführung dieser Anwendungen in isolierten Umgebungen ermöglichen. Im nächsten Kapitel wird die Erstellung und Verwendung von Dockerfiles behandelt.