Images vor Container-Start erstellen
In den vorherigen Schritten haben wir vorgefertigte Docker-Images von Docker Hub (wie nginx:latest) verwendet. Häufig müssen Sie jedoch eigene benutzerdefinierte Docker-Images für Ihre Anwendungen erstellen.
Docker Compose kann automatisch Images erstellen, die in Ihrer docker-compose.yml-Datei definiert sind, bevor die Dienste gestartet werden. Dies erfolgt typischerweise durch Angabe eines build-Kontexts anstelle eines image-Namens für einen Dienst.
Passen wir unsere docker-compose.yml-Datei an, um ein einfaches benutzerdefiniertes Nginx-Image zu erstellen.
Erstellen Sie zunächst ein neues Verzeichnis namens nginx_custom in ~/project:
cd ~/project
mkdir nginx_custom
Erstellen Sie nun eine Dockerfile im nginx_custom-Verzeichnis:
nano ~/project/nginx_custom/Dockerfile
Fügen Sie folgenden Inhalt zur Dockerfile hinzu:
FROM nginx:latest
RUN echo '<h1>Hello from Custom Nginx!</h1>' >/usr/share/nginx/html/index.html
Diese Dockerfile basiert auf dem offiziellen nginx:latest-Image und ersetzt die standardmäßige index.html-Datei durch eine benutzerdefinierte Version.
Ändern Sie nun Ihre ~/project/docker-compose.yml-Datei, um diese Dockerfile für den Build des web-Service-Images zu verwenden. Öffnen Sie die Datei zur Bearbeitung:
nano ~/project/docker-compose.yml
Passen Sie die web-Service-Definition an, um build statt image zu verwenden:
version: "3.8"
services:
web:
build: ./nginx_custom
ports:
- "80:80"
Wenn Sie nun docker compose up ausführen, wird Docker Compose zunächst das Image erstellen, das durch die Dockerfile im ./nginx_custom-Verzeichnis definiert ist, und dann einen Container mit diesem neu erstellten Image starten.
Stellen Sie sicher, dass Sie sich im ~/project-Verzeichnis befinden, und führen Sie aus:
cd ~/project
docker compose up -d
Sie sehen eine Ausgabe, die anzeigt, dass Docker Compose das Image erstellt und anschließend den Container erzeugt und startet.
Um zu überprüfen, ob die benutzerdefinierte Nginx-Seite ausgeliefert wird, verwenden Sie curl:
curl http://localhost
Sie sollten die Ausgabe <h1>Hello from Custom Nginx!</h1> sehen, was bestätigt, dass das Image erstellt wurde und der Container mit dem benutzerdefinierten Inhalt läuft.
Zum Aufräumen stoppen Sie die laufenden Dienste:
cd ~/project
docker compose down