6 Container Basics

6.1 Prozess isoliert starten

Der unshare Befehl wird verwendet, um neue Namespaces für einen Prozess zu erstellen, sodass dieser von anderen Prozessen isoliert wird. In Ihrem Fall möchten Sie einen neuen Prozess mit einem eigenen PID-Namespace erstellen.

Hier ist ein Beispiel, wie Sie das tun können:

unshare -fp --mount-proc /bin/bash

Erklärung der Optionen:

Nachdem Sie den Befehl ausgeführt haben, wird eine neue Bash-Shell gestartet, die im neuen PID-Namespace läuft. In dieser Shell hat der init-Prozess (meistens Systemd) die PID 1, und alle von dieser Shell erstellten Prozesse haben PIDs, die im neu erstellten Namespace eindeutig sind.

Beachten Sie, dass Sie möglicherweise Root-Privilegien benötigen, um den unshare-Befehl auszuführen. In diesem Fall verwenden Sie sudo:

sudo unshare -fp --mount-proc /bin/bash

6.2 Docker Fundamentals

6.2.1 Einführung in Docker

Docker ist eine Plattform, die es Entwicklern und Systemadministratoren ermöglicht, Anwendungen in Containern zu erstellen, bereitzustellen und auszuführen. Container sind leichtgewichtige, portable und eigenständige Einheiten, die alles enthalten, was eine Anwendung benötigt, um auszuführen - inklusive Bibliotheken, Abhängigkeiten und Konfigurationsdateien.

6.2.2 Docker Architektur

Docker verwendet eine Client-Server-Architektur. Der Docker-Daemon (dockerd) läuft auf dem Host und verwaltet die Container. Der Docker-Client (docker) ist ein Kommandozeilenwerkzeug, mit dem Benutzer mit dem Docker-Daemon kommunizieren können.

6.2.3 Grundlegende Docker-Kommandos

6.2.3.1 Docker-Images verwalten

Ein Docker-Image ist eine unveränderliche Datei, die den Quellcode, Bibliotheken, Abhängigkeiten und andere Dateien enthält, die für eine Anwendung benötigt werden. Docker-Images werden aus Dockerfiles erstellt, die die Schritte zum Erstellen eines Images definieren.

Ein Image herunterladen:

docker pull <image_name>

Ein Image anzeigen:

docker image ls

Ein Image entfernen:

docker image rm <image_name>

6.2.3.2 Docker-Container verwalten

Ein Docker-Container ist eine laufende Instanz eines Docker-Images. Container können einfach gestartet, gestoppt und entfernt werden.

Einen Container starten:

docker run -d --name <container_name> <image_name>

Laufende Container anzeigen:

docker container ls

Alle Container anzeigen (auch gestoppte):

docker container ls -a

Einen Container stoppen:

docker container stop <container_name>

Einen Container entfernen:

docker container rm <container_name>

6.2.4 Erstellen eines Dockerfiles

Ein Dockerfile ist eine Textdatei, die Anweisungen zum Erstellen eines Docker-Images enthält. Hier ist ein einfaches Beispiel:

# Use an official Python runtime as a parent image
FROM python:3.8-slim

# Set the working directory in the container
WORKDIR /app

# Copy the current directory contents into the container at /app
COPY . /app

# Install any needed packages specified in requirements.txt
RUN pip install --no-cache-dir -r requirements.txt

# Make port 80 available to the world outside this container
EXPOSE 80

# Define environment variable
ENV NAME World

# Run app.py when the container launches
CMD ["python", "app.py"]

Um ein Docker-Image aus diesem Dockerfile zu erstellen, verwenden Sie den Befehl:

docker build -t <image_name> .

6.2.5 Docker Netzwerke

Docker bietet mehrere Netzwerktreiber, um Container miteinander und mit dem Host zu verbinden. Die wichtigsten Treiber sind:

Ein benutzerdefiniertes Netzwerk erstellen:

docker network create <network_name>

Einen Container zu einem Netzwerk hinzufügen:

docker run -d --name <container_name> --network <network_name> <image_name>

Netzwerke anzeigen:

docker network ls

Ein Netzwerk entfernen:

docker network rm <network_name>

6.2.6 Docker Volumes

Docker Volumes werden verwendet, um Daten außerhalb des Containers zu speichern und zu teilen. Volumes sind die bevorzugte Methode, um Daten zwischen Containern zu teilen und zu sichern.

Ein Volume erstellen:

docker volume create <volume_name>

Ein Volume zu einem Container hinzufügen:

docker run -d --name <container_name> -v <volume_name>:/path/in/container <image_name>

Volumes anzeigen:

docker volume ls

Ein Volume entfernen:

docker volume rm <volume_name>

6.2.7 Sicherheit in Docker

Docker bietet verschiedene Mechanismen zur Sicherung von Containern, darunter:

Docker revolutioniert die Art und Weise, wie Anwendungen entwickelt, bereitgestellt und ausgeführt werden. Durch die Nutzung von Containern können Entwickler und Systemadministratoren konsistente und portable Anwendungen erstellen, die in verschiedenen Umgebungen gleich funktionieren. Docker bietet eine umfangreiche Suite von Tools und Funktionen, um die Verwaltung und Sicherheit von Containern zu erleichtern, was es zu einem unverzichtbaren Werkzeug in der modernen Softwareentwicklung und -bereitstellung macht.