Dockerfiles richtig nutzen: Eigene Images erstellen

Nachdem wir im ersten Teil dieser Serie die Grundlagen von Docker kennengelernt und erste Container gestartet haben, beschäftigen wir uns nun mit der Erstellung eigener Images. Docker bietet dafür das Konzept der Dockerfiles, die den Aufbau eines Images Schritt für Schritt beschreiben.


Was ist ein Dockerfile?

Ein Dockerfile ist eine einfache Textdatei, in der alle Anweisungen stehen, um ein Image automatisch zu erstellen. Statt ein Image manuell aufzubauen, können Entwickler mit einem Dockerfile den Prozess reproduzierbar und versionierbar gestalten.

Vorteile:

  • Einheitliche Entwicklungs- und Produktionsumgebungen
  • Leichte Weitergabe von Projekten
  • Automatisierbare Builds in CI/CD-Pipelines

Aufbau eines Dockerfiles

Ein typisches Dockerfile besteht aus Anweisungen wie:

BefehlBedeutung
FROMBasis-Image, z. B. FROM ubuntu:20.04
RUNFührt Befehle im Container aus, z. B. RUN apt-get update
COPYKopiert Dateien vom Host in den Container
WORKDIRSetzt das Arbeitsverzeichnis im Container
CMD oder ENTRYPOINTStartbefehl für den Container

Einfaches Beispiel: Webserver

Ein minimaler Webserver mit Nginx könnte so aussehen:

# Basis-Image
FROM nginx:latest

# Kopiere statische Webseite in den Container
COPY ./html /usr/share/nginx/html

# Container startet automatisch Nginx (Standard in diesem Image)

Speichern Sie die Datei als Dockerfile im Projektordner.


Image erstellen und starten

Erstellen des Images:

docker build -t mein-webserver .

Starten des Containers:

docker run -d -p 8080:80 mein-webserver

Die Webseite ist nun unter http://localhost:8080 erreichbar.


Best Practices für Dockerfiles

  • Kleine Basis-Images verwenden, z. B. alpine, um die Größe zu reduzieren
  • Mehrere RUN-Befehle kombinieren, um wenige Layer zu erzeugen
  • .dockerignore-Datei nutzen, um unnötige Dateien nicht ins Image zu kopieren
  • Versionsangaben machen, um reproduzierbare Builds zu gewährleisten


Kommentare

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert