Service-Images erstellen
Im vorherigen Schritt haben Sie Ihre Services mit vorhandenen Docker-Images in der docker-compose.yaml
-Datei definiert. In diesem Schritt lernen Sie, wie Sie benutzerdefinierte Docker-Images für Ihre Services mit Dockerfiles erstellen und diese in Ihre docker-compose.yaml
-Datei integrieren.
Erstellen Sie zunächst ein einfaches Verzeichnis für unseren Web-Service und ein Dockerfile darin. Navigieren Sie zum Projektverzeichnis, falls Sie sich nicht bereits dort befinden:
cd ~/project
Erstellen Sie ein Verzeichnis namens web
und wechseln Sie hinein:
mkdir web
cd web
Erstellen Sie nun mit dem nano
-Editor ein Dockerfile namens Dockerfile
im web
-Verzeichnis:
nano Dockerfile
Fügen Sie folgenden Inhalt in das Dockerfile
ein:
FROM ubuntu:latest
RUN apt-get update && apt-get install -y nginx
COPY index.html /var/www/html/
EXPOSE 80
CMD ["nginx", "-g", "daemon off;"]
Dieses Dockerfile bewirkt folgendes:
FROM ubuntu:latest
: Verwendet das neueste Ubuntu-Basis-Image.
RUN apt-get update && apt-get install -y nginx
: Aktualisiert die Paketliste und installiert Nginx.
COPY index.html /var/www/html/
: Kopiert eine index.html
-Datei (die wir als nächstes erstellen) in das Nginx-Webroot-Verzeichnis.
EXPOSE 80
: Öffnet Port 80 im Container.
CMD ["nginx", "-g", "daemon off;"]
: Gibt den Befehl an, der beim Start des Containers ausgeführt wird, um Nginx im Vordergrund zu starten.
Speichern Sie das Dockerfile mit Strg + X
, dann Y
und Enter
.
Erstellen Sie nun die index.html
-Datei, die das Dockerfile kopiert. Bleiben Sie im Verzeichnis ~/project/web
und erstellen Sie die Datei:
nano index.html
Fügen Sie folgenden einfachen HTML-Inhalt in index.html
ein:
<!doctype html>
<html>
<head>
<title>Hello from Docker!</title>
</head>
<body>
<h1>Welcome to my Dockerized Nginx!</h1>
<p>This page is served from a custom Docker image.</p>
</body>
</html>
Speichern Sie die index.html
-Datei mit Strg + X
, dann Y
und Enter
.
Navigieren Sie zurück zum Projektstammverzeichnis, wo sich Ihre docker-compose.yaml
-Datei befindet:
cd ~/project
Wir müssen die docker-compose.yaml
-Datei anpassen, um den web
-Service aus dem erstellten Dockerfile zu bauen, anstatt ein vorgefertigtes Image zu verwenden. Öffnen Sie die docker-compose.yaml
-Datei zur Bearbeitung:
nano docker-compose.yaml
Ändern Sie die Definition des web
-Services, um die build
-Anweisung anstelle von image
zu verwenden:
version: "3.8"
services:
web:
build: ./web
ports:
- "80:80"
db:
image: postgres:latest
environment:
POSTGRES_PASSWORD: mysecretpassword
Hier gibt build: ./web
an, dass Docker Compose das Image für den web
-Service mit dem Dockerfile im Verzeichnis ./web
(relativ zur docker-compose.yaml
-Datei) erstellen soll.
Speichern Sie die geänderte docker-compose.yaml
-Datei mit Strg + X
, dann Y
und Enter
.
Nun können Sie die in Ihrer docker-compose.yaml
-Datei definierten Images mit dem Befehl docker-compose build
erstellen. Da Docker Compose nicht vorinstalliert ist, müssen Sie es zuerst installieren.
sudo apt-get update
sudo apt-get install docker-compose-plugin -y
Nach der Installation des Docker Compose-Plugins können Sie den Befehl docker compose
verwenden (beachten Sie das Leerzeichen statt eines Bindestrichs in neueren Versionen).
docker compose build
Dieser Befehl liest Ihre docker-compose.yaml
-Datei und erstellt das Image für den web
-Service basierend auf dem Dockerfile
im ./web
-Verzeichnis. Er lädt außerdem das postgres:latest
-Image für den db
-Service, falls es noch nicht vorhanden ist. Sie sehen eine Ausgabe, die den Build-Prozess für das web
-Image anzeigt.
Nach Abschluss des Builds können Sie die Docker-Images auf Ihrem System auflisten, um das neu erstellte Image zu sehen.
docker images
Sie sollten ein Image mit einem Namen sehen, der mit Ihrem Projektverzeichnis und dem Service-Namen verknüpft ist (z.B. project-web
) sowie das postgres
-Image.