Grundlagen der Docker-Terminologie: Images, Container und mehr

Die Docker-Terminologie umfasst wichtige Konzepte wie Images und Container, die für die Containerisierung unerlässlich sind. Das Verständnis dieser Begriffe ist entscheidend für eine effektive Bereitstellung und Verwaltung in der Microservices-Architektur.
Inhaltsverzeichnis
Grundlagen der Docker-Terminologie: Abbilder, Container und darüber hinaus – Teil 2

Understanding Docker Terminology: Images, Containers, and More

Docker is a powerful platform that has revolutionized how developers build, ship, and run applications. By leveraging containerization technology, it allows for consistent environments across various stages of development, testing, and production. However, for both newcomers and seasoned professionals, the terminology associated with Docker can be a bit overwhelming. This article aims to demystify some of the crucial terms and concepts, diving deep into Docker images, containers, and several other components of the Docker ecosystem.

Was ist Docker?

Before delving into the specifics, it’s essential to understand what Docker is. Docker is an open-source platform that automates the deployment, scaling, and management of applications within lightweight containers. Containers package an application and all its dependencies, allowing it to run seamlessly in different environments. This eliminates the "it works on my machine" problem that often plagues software development.

2. Docker Images

2.1 Definition of Docker Images

Ein Docker-Image ist ein leichtgewichtiges, eigenständiges und ausführbares Paket, das alles enthält, was zum Ausführen einer Software benötigt wird – einschließlich Code, Bibliotheken, Abhängigkeiten und Laufzeitumgebung. Images sind schreibgeschützt und können als Blaupause für die Erstellung von Docker-Containern betrachtet werden.

2.2 Schichten und Union-Dateisystem

Docker images are built in layers. Each layer represents a set of file changes or instructions defined in a Dockerfile, which is a text document containing a series of commands for building a Docker image. Each time you build an image, Docker creates a new layer, making the process efficient and storage-friendly.

Docker verwendet ein Union-Dateisystem (UFS), das es ermöglicht, Ebenen übereinander zu stapeln. Dieses Schichtsystem spart nicht nur Speicherplatz durch die Wiederverwendung von Images, sondern beschleunigt auch den Build-Prozess, da unveränderte Ebenen zwischengespeichert werden können.

2.3 Basis-Images und Abgeleitete Images

A base image is the starting point for creating a Docker image. It can be an operating system (like Ubuntu or Alpine) or another application image. Derived images, on the other hand, are built on top of base images, inheriting their characteristics while adding new functionalities.

# Beispiel für ein einfaches Dockerfile
FROM ubuntu:20.04
RUN apt-get update && apt-get install -y python3
COPY . /app
CMD ["python3", "/app/my_script.py"]

In this Dockerfile, ubuntu:20.04 is the base image upon which the new image is built, introducing Python as an additional layer.

2.4 Image Registries

An image registry is a storage and distribution system for Docker images. Docker Hub is the default public registry that hosts millions of images, but organizations often use private registries for proprietary software. Images can be pulled from or pushed to registries, enabling collaborative development and deployment.

3. Docker Container

3.1 Definition of Docker Containers

Ein Docker-Container ist eine Laufzeitinstanz eines Docker-Images. Während Images schreibgeschützte Vorlagen sind, sind Container veränderbar und können gestartet, gestoppt und modifiziert werden. Jeder Container arbeitet isoliert, kann aber über definierte Kanäle mit anderen Containern kommunizieren.

3.2 Lebenszyklus eines Containers

Der Lebenszyklus eines Containers umfasst mehrere Zustände: erstellt, ausgeführt, angehalten, gestoppt und gelöscht. Sie können einen Container aus einem Image erstellen, ihn ausführen, für die Ressourcenverwaltung anhalten, ihn nicht mehr benötigen und stoppen und ihn schließlich löschen, wenn Sie Ressourcen freigeben möchten.

# Befehle zur Verwaltung von Docker-Containern
docker create my_image        # Einen neuen Container erstellen
docker start my_container      # Den Container starten
docker pause my_container      # Den Container pausieren
docker stop my_container       # Den Container stoppen
docker rm my_container         # Den Container entfernen

3.3 Container-Orchestrierung

In größeren Anwendungen wird die manuelle Verwaltung einzelner Container unpraktisch. Orchestrierungstools für Container wie Kubernetes, Docker Swarm und Apache Mesos helfen bei der Automatisierung von Bereitstellung, Skalierung und Vernetzung von Containern. Diese Tools erleichtern den Lastenausgleich, die Container-Ermittlung und Wartungsaufgaben, was einen reibungslosen Betrieb in Produktionsumgebungen ermöglicht.

4. Dockerfile

4.1 What is a Dockerfile?

Eine Dockerfile ist eine einfache Textdatei, die Anweisungen zum Erstellen eines Docker-Images enthält. Sie definiert die Umgebung, in der die Anwendung ausgeführt wird, sowie die erforderlichen Schritte zur Zusammenstellung.

4.2 Common Dockerfile Commands

  • FROM: Specifies the base image.
  • RUN: Executes commands in a new layer, typically for installing packages.
  • KOPIE / ADD: Copies files from the host into the container image.
  • CMDLegt den Standardbefehl fest, der beim Starten des Containers ausgeführt wird.
  • EXPOSETeilt Docker mit, dass der Container auf angegebene Netzwerkports lauscht.

Hier ist ein Beispiel-Dockerfile:

FROM node:14
WORKDIR /usr/src/app
COPY package*.json ./
RUN npm install
COPY . .
EXPOSE 8080
CMD [ "node", "server.js" ]

5. Docker Compose

5.1 Einführung in Docker Compose

Docker Compose ist ein Tool zum Definieren und Ausführen von Docker-Anwendungen mit mehreren Containern mithilfe einer einzigen YAML-Datei. Diese Datei wird typischerweise benannt als docker-compose.yml, ermöglicht es Entwicklern, Anwendungsdienste, Netzwerke und Volumes an einer einzigen Stelle zu konfigurieren.

5.2 Benefits of Docker Compose

  • Simplicity: Easier management of multi-container applications.
  • Versionskontrolle: Die Konfiguration kann zusammen mit dem Anwendungscode versioniert werden.
  • UmgebungskonsistenzStellt sicher, dass alle Entwickler dieselbe Version des Anwendungsstacks verwenden.

5.3 Beispiel einer Docker Compose-Datei

Hier ist ein einfaches docker-compose.yml Beispiel für eine Webanwendung mit einer Datenbank

version: '3'
services:
  web:
    image: my_web_image
    ports:
      - "5000:5000"
    depends_on:
      - db
  db:
    image: postgres:latest
    environment:
      POSTGRES_USER: user
      POSTGRES_PASSWORD: password

6. Datenträger und Datenpersistenz

6.1 Understanding Docker Volumes

Docker-Volumes sind ein Mechanismus zum Speichern von Daten, die von Docker-Containern generiert und genutzt werden. Im Gegensatz zu Containern, die kurzlebig sind, bleiben Volumes auch dann erhalten, wenn der Container gestoppt oder gelöscht wird.

6.2 Benefits of Using Volumes

  • Datenpersistenz: Stellt sicher, dass Daten über den Lebenszyklus des Containers hinaus beibehalten werden.
  • Performance: Volumes provide better performance than bind mounts.
  • Daten teilen: Volumes erleichtern die gemeinsame Nutzung von Daten zwischen mehreren Containern.

6.3 Erstellen und Verwalten von Datenträgern

You can create, list, and remove volumes using Docker commands:

docker volume create my_volume         # Erstellen eines neuen Volumes
docker volume ls                        # Auflisten aller Volumes
docker volume rm my_volume              # Entfernen eines Volumes

7. Netzwerkbetrieb in Docker

7.1 Übersicht über Docker-Netzwerke

Docker provides several networking options to facilitate communication between containers. Each container is assigned a unique IP address, and Docker manages the underlying network infrastructure.

7.2 Network Types

  • BrückeDer Standard-Netzwerktyp, der es Containern ermöglicht, auf demselben Host zu kommunizieren.
  • GastgeberTeilt den Netzwerk-Stack des Hosts, was eine bessere Performance, aber weniger Isolation bedeutet.
  • OverlayErmöglicht die Kommunikation zwischen Containern, die auf verschiedenen Docker-Hosts laufen, und wird typischerweise in Orchestrierungsumgebungen verwendet.
  • NoneDeaktiviert alle Netzwerkfunktionen für den Container.

7.3 Erstellen und Verwalten von Netzwerken

Sie können Docker-Netzwerke erstellen und verwalten, und zwar mit Befehlen wie:

docker network create my_network       # Ein neues Netzwerk erstellen
docker network ls                       # Alle Netzwerke auflisten
docker network rm my_network            # Ein Netzwerk entfernen

8. Docker Swarm

8.1 Einführung in Docker Swarm

Docker Swarm is Docker’s native clustering and orchestration tool, allowing you to manage a cluster of Docker nodes as a single virtual system. It enables high availability and load balancing across multiple containers and services.

8.2 Wichtigste Funktionen von Docker Swarm

  • Service-DefinitionDienste und deren Konfigurationen deklarativ definieren.
  • Lastenausgleich: Automatically distribute traffic among containers running the same service.
  • Skalierung: Skalieren Sie Dienste mit einfachen Befehlen einfach nach oben oder unten.

8.3 Bereitstellen eines Dienstes in Docker Swarm

Um einen Service in Docker Swarm bereitzustellen, verwendet man typischerweise den folgenden Befehl:

docker service create --name my_service --replicas 3 my_image

Dieser Befehl erstellt einen Dienst namens mein_Dienst mit drei Replikaten, die das angegebene Image ausführen.

9. Schlussfolgerung

Das Verständnis der Docker-Terminologie ist entscheidend, um diese leistungsstarke Plattform effektiv nutzen zu können. Indem Sie sich mit Konzepten wie Images, Containern, Dockerfiles, Volumes und Netzwerken vertraut machen, können Sie Ihren Entwicklungsprozess verbessern. Docker fördert eine Kultur der Zusammenarbeit und ermöglicht es Teams, effizient zu arbeiten und Anwendungen mit Zuversicht bereitzustellen.

Während du deine Reise mit Docker fortsetzt, denke daran: Übung ist entscheidend. Experimentiere mit verschiedenen Konfigurationen und erkunde die umfangreiche Dokumentation sowie die verfügbaren Community-Ressourcen. Mit einem soliden Verständnis der Docker-Terminologie bist du bestens gerüstet, um die Komplexität containerisierter Anwendungen zu meistern. Viel Erfolg mit Docker!