Docker auf Ubuntu installieren und konfigurieren

DockerDockerBeginner
Jetzt üben

💡 Dieser Artikel wurde von AI-Assistenten übersetzt. Um die englische Version anzuzeigen, können Sie hier klicken

Einführung

Dockerfiles bilden die Grundlage für die Erstellung von Docker-Images, und das Verständnis der Befehle Entrypoint und Cmd ist entscheidend für die effektive Konfiguration und Ausführung von Containern. Dieses Tutorial befasst sich mit den Unterschieden zwischen diesen beiden Befehlen, ihren Anwendungsfällen und Best Practices für die Kombination, um eine optimale Container-Setup und -Bereitstellung zu erreichen.

Docker-Grundlagen

Einführung in Docker

Docker ist eine leistungsstarke Containerisierungstechnologie, die die Softwareentwicklung und -bereitstellung revolutioniert. Als Open-Source-Plattform ermöglicht Docker Entwicklern, Anwendungen konsistent in verschiedenen Computing-Umgebungen zu verpacken, zu verteilen und auszuführen.

Kernkonzepte der Containerisierung

Containerisierung ist eine leichte Alternative zur vollständigen Maschinenvirtualisierung, die es Anwendungen ermöglicht, in isolierten Umgebungen zu laufen. Docker nutzt Containertechnologie, um portable und effiziente Softwarebereitstellungslösungen zu schaffen.

graph TD A[Anwendungscode] --> B[Docker-Container] B --> C[Konsistente Bereitstellung] B --> D[Isolierte Umgebung]

Wichtige Docker-Komponenten

Komponente Beschreibung Funktion
Docker Engine Kerndienstprogramm Verwaltet den Container-Lebenszyklus
Docker Image Leichtgewichtiges Template Definiert die Containerkonfiguration
Docker Container Ausführbare Instanz Führt die Anwendung aus

Installation unter Ubuntu 22.04

## Paketindex aktualisieren
sudo apt update

## Abhängigkeiten installieren
sudo apt install apt-transport-https ca-certificates curl software-properties-common

## Offiziellen GPG-Schlüssel von Docker hinzufügen
curl -fsSL | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg

## Docker-Repository einrichten
echo "deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/docker-archive-keyring.gpg]  $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null

## Docker Engine installieren
sudo apt update
sudo apt install docker-ce docker-ce-cli containerd.io

Grundlegende Docker-Befehle

## Docker-Version überprüfen
docker --version

## Ein Image von Docker Hub ziehen
docker pull ubuntu:latest

## Lokale Images auflisten
docker images

## Einen Container starten
docker run -it ubuntu:latest /bin/bash

Container-Lebenszyklusverwaltung

Docker bietet umfassende Tools zur Verwaltung des Container-Lebenszyklus, einschließlich Erstellung, Ausführung, Stopp und Entfernung. Container können mit einfachen Befehlen einfach gestartet, angehalten und beendet werden.

Leistung und Effizienz

Container bieten erhebliche Vorteile gegenüber herkömmlicher Virtualisierung:

  • Minimale Ressourcenbelastung
  • Schnelle Startzeiten
  • Konsistente Bereitstellung über verschiedene Umgebungen
  • Effiziente Ressourcennutzung

Dockerfile-Beherrschung

Dockerfile-Verständnis

Ein Dockerfile ist eine Textdatei, die sequenzielle Anweisungen zum Erstellen eines Docker-Images enthält. Es definiert die Umgebung, Abhängigkeiten und Konfiguration, die erforderlich sind, um einen konsistenten und reproduzierbaren Container zu erstellen.

graph LR A[Dockerfile] --> B[Docker Build] B --> C[Docker Image] C --> D[Docker Container]

Essenzielle Dockerfile-Befehle

Befehl Zweck Beispiel
FROM Basis-Image-Auswahl FROM ubuntu:22.04
RUN Ausführung von Shell-Befehlen RUN apt-get update
COPY Kopieren von Dateien ins Image COPY app/ /application
WORKDIR Festlegen des Arbeitsverzeichnisses WORKDIR /application
ENV Festlegen von Umgebungsvariablen ENV APP_VERSION=1.0
EXPOSE Definieren von Container-Ports EXPOSE 8080
CMD Standard-Container-Befehl CMD ["python", "app.py"]

Beispiel-Dockerfile für eine Python-Anwendung

## Basis-Image
FROM python:3.9-slim

## Arbeitsverzeichnis festlegen
WORKDIR /application

## Projektdateien kopieren
COPY . /application

## Abhängigkeiten installieren
RUN pip install --no-cache-dir -r requirements.txt

## Anwendungsport freigeben
EXPOSE 5000

## Anwendung ausführen
CMD ["python", "app.py"]

Docker-Images erstellen

## Image mit Tag erstellen
docker build -t myapp:v1 .

## Erstellte Images auflisten
docker images

## Image-Details anzeigen
docker inspect myapp:v1

Mehrstufige Build-Strategie

## Build-Phase
FROM maven:3.8.1-openjdk-11 AS build
WORKDIR /app
COPY pom.xml .
COPY src ./src
RUN mvn package

## Laufzeit-Phase
FROM openjdk:11-jre-slim
COPY --from=build /app/target/app.jar /application.jar
ENTRYPOINT ["java", "-jar", "/application.jar"]

Best Practices

  • Minimierung der Image-Layers
  • Verwendung spezifischer Image-Tags
  • Nutzung des Build-Cache
  • Entfernen unnötiger Dateien
  • Vermeiden der Installation unnötiger Pakete

Docker-Laufzeitkonfiguration

Container-Ausführungsparameter

Docker bietet umfangreiche Konfigurationsoptionen zur Steuerung des Container-Laufzeitverhaltens. Dies ermöglicht eine präzise Verwaltung der Ressourcenzuweisung, des Netzwerkaufbaus und der Ausführungsumgebungen.

graph LR A[Docker-Laufzeitkonfiguration] A --> B[Ressourcenlimits] A --> C[Netzwerkeinstellungen] A --> D[Volume-Mapping] A --> E[Umgebungsvariablen]

Laufzeitkonfigurationsoptionen

Parameter Beschreibung Beispiel
-m, --memory Speicherobergrenze docker run -m 512m image
--cpus CPU-Ressourcenzuweisung docker run --cpus=2 image
-p, --publish Port-Mapping docker run -p 8080:80 image
-v, --volume Volume-Montage docker run -v /host:/container image
--env Umgebungsvariablen docker run --env KEY=value image

Container-Ressourcenverwaltung

## Container mit CPU- und Speicherobergrenzen ausführen
docker run -d \
  --name webapp \
  --memory=512m \
  --cpus=1.5 \
  --restart=always \
  myapp:latest

Netzwerkkonfiguration

## Benutzerdefiniertes Netzwerk erstellen
docker network create mynetwork

## Container in einem bestimmten Netzwerk ausführen
docker run -d \
  --network mynetwork \
  --network-alias webapp \
  myapp:latest

Volume und persistenter Speicher

## Benannte Volume erstellen
docker volume create appdata

## Volume an Container mounten
docker run -v appdata:/app/data \
  -d myapp:latest

Erweiterte Ausführungsstrategien

## CMD vs. ENTRYPOINT-Beispiel
FROM python:3.9
WORKDIR /app
COPY . .
ENTRYPOINT ["python"]
CMD ["app.py"]

Optimierung der Laufzeitparameter

## Container-Laufzeitinspektion
docker inspect container_name

## Echtzeit-Ressourcenüberwachung
docker stats container_name

Zusammenfassung

In diesem umfassenden Leitfaden haben wir die Befehle ENTRYPOINT und CMD in Dockerfiles, ihre Unterschiede und die gemeinsame Verwendung für eine optimale Containerkonfiguration und -bereitstellung untersucht. Durch das Verständnis der Rolle jedes Befehls und die Einhaltung bewährter Verfahren können Sie effizientere und zuverlässigere Docker-Images erstellen, die den Anforderungen Ihrer Anwendung entsprechen.