Docker-Images vereinfachen die Bereitstellung mehrerer Container, ohne dass dasselbe Image auf mehreren virtuellen Maschinen verwaltet werden muss. Sie können ein Dockerfile verwenden, um die Installation und Konfiguration eines Images und seiner Abhängigkeiten zu automatisieren. ADockerfile ist eine Textdatei mit den Befehlen (die der Reihe nach ausgeführt werden), die zum Automatisieren der Installation und Konfiguration eines Docker-Images verwendet werden. Dieser Artikel erweitert unseren Leitfaden How to Use a Dockerfile to Build a Docker Image, indem er die ausführliche Nutzung von Docker-Images, Containern und Dockerfiles behandelt.
Bevor Sie beginnen
-
Machen Sie sich mit unserem Leitfaden „Erste Schritte“ vertraut, erstellen und aktualisieren Sie ein Linode und installieren Sie Docker. Alternativ können Sie schnell ein aktualisiertes, Docker-fähiges Linode mit der Docker Marketplace App bereitstellen.
-
Stellen Sie sicher, dass Ihr Linode sicher ist, indem Sie unserem Leitfaden zum Einrichten und Sichern einer Compute-Instanz folgen.
-
In diesem Handbuch wird davon ausgegangen, dass Sie mit der Verwendung der Docker-Befehlszeilenschnittstelle (CLI) vertraut sind. Um mehr über die Docker-CLI zu erfahren, sehen Sie sich ihre Dokumentation an.
-
Sehen Sie sich unseren Leitfaden an, um sich mit den Grundlagen von Dockerfiles vertraut zu machen.
Erstellen Sie Ihr Dockerfile für das Docker-Image
Docker benötigt ein funktionierendes Dockerfile für seine Builds. Hier erstellen wir eine Docker-Datei, die ein Ubuntu-Image mit Apache als Webserver einrichtet und den Standard-HTTP-Port 80 verwendet.
-
An der Eingabeaufforderung (entweder über SSH oder Lish im Linode Manager) erstellen und wechseln Sie in ein neues Verzeichnis:
mkdir ~/mydockerbuild && cd ~/mydockerbuild
-
Erstellen Sie ein Dockerfile-Beispiel für Ihre Apache-Anwendung:
touch apache_dockerfile
-
Öffnen Sie das Dockerfile mit dem Texteditor Ihrer Wahl (für dieses Beispiel verwenden wir nano):
nano apache_dockerfile
-
Kopieren Sie das folgende Beispiel in Ihre Dockerfile. Dadurch wird ein Dockerfile erstellt, das ein aktualisiertes Ubuntu-Image generiert, die Betreuerinformationen festlegt, Apache installiert, Container-Port 80 öffnet und schließlich einen Apache-Server startet, wenn es ausgeführt wird:
- Datei:apache_dockerfile
1 2 3 4 5 6 7 8 9
FROM ubuntu MAINTAINER John Doe [email protected] ARG DEBIAN_FRONTEND=noninteractive RUN apt-get update RUN apt-get upgrade -y RUN apt-get install apache2 -y RUN apt-get clean EXPOSE 80 CMD ["apache2ctl","-D","FOREGROUND"]
Hinweis Das
ARG DEBIAN_FRONTEND=noninteractive
Anweisung stellt sicher, dass die nachfolgendeRUN apt-get
Befehle werden ausgeführt, ohne dass beim Erstellen von Bildern zusätzliche Benutzereingaben erforderlich sind. Diese Anweisung könnte auch mitENV
geschrieben werden stattARG
um die Umgebungsvariable in Containern persistent zu machen, die mit dem Image bereitgestellt werden. Da beim Arbeiten in solchen Containern keine Interaktivität zu erwarten ist, wirdARG
wird in diesem Fall empfohlen. -
Speichern und schließen Sie die Datei.
Erstellen Sie ein Docker-Image aus der Dockerfile
-
Erstellen Sie ein Image mit der Bezeichnung
apache_image
aus dem Dockerfile mit demdocker build
Befehl:docker build ~/mydockerbuild -f apache_dockerfile -t apache_image
-
Sobald der Build abgeschlossen ist und Sie zur Eingabeaufforderung zurückgekehrt sind, zeigen Sie die verfügbaren Images Ihres Systems mit dem folgenden Befehl an:
docker images
Die Ausgabe sollte so aussehen (das „ubuntu“-Repository ist auch verfügbar aufgrund der „FROM ubuntu“-Zeile im Dockerfile):
REPOSITORY TAG IMAGE ID CREATED SIZE apache_image latest 7e5c14739da5 7 seconds ago 215MB ubuntu latest 7e0aa2d69a15 6 weeks ago 72.7MB
Hinweis
Standardmäßig sind erstellte Images mit „neueste“ gekennzeichnet. Wenn Sie das Tag ändern möchten, z. B. in „Entwicklung“, formatieren Sie den Befehl wie folgt:
docker build ~/mydockerbuild -f apache_dockerfile -t apache_image:development
Ausführen Ihrer Docker-Images als Container
Wenn Sie den docker run
ausführen Befehl starten Sie einen Docker-Container, der an Ihre Terminalsitzung gebunden ist. Dies wird auch als Ausführen eines Prozesses im Vordergrund bezeichnet . Wenn sich Ihr Root-Prozess im Vordergrund befindet und an eine Terminalsitzung gebunden ist, wird Ihr Container beendet, sobald Sie die Terminalsitzung schließen. Wenn Sie möchten, dass Ihr Container auch nach dem Schließen Ihrer Terminalsitzung ausgeführt wird, können Sie Ihren Container getrennt ausführen Modus. Dadurch wird Ihr Container im Hintergrund ausgeführt .
So führen Sie das Docker-Image als Container im getrennten Modus aus:
-
Geben Sie den folgenden Befehl ein, um einen Container namens
apache
zu erstellen mit Ihrem Bild mit dem-d
Argument, um sicherzustellen, dass Ihr Container im Hintergrund läuft:docker run --name apache -d apache_image
-
Wenn Sie wieder an der Eingabeaufforderung sind, führen Sie den folgenden Befehl aus, um Ihre aktiven Container aufzulisten und zu bestätigen, dass
apache
läuft im Hintergrund:docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 1d5e1da50a86 apache_image "apache2ctl -D FOREG…" 3 minutes ago Up 3 minutes 80/tcp apache
-
Jetzt können Sie Ihre Entwicklungsarbeit mit dem Apache-Server erledigen und haben weiterhin Zugriff auf die Befehlszeile. Ihr Container ist jedoch nicht öffentlich zugänglich, da ihm zusätzliche Portkonfigurationen fehlen. Im nächsten Abschnitt erstellen Sie den Container mit Portkonfigurationen neu, die Ihnen den Zugriff auf den Webserver ermöglichen. Stoppen Sie vorerst den Container:
docker stop apache
Hinweis Sie können die Container-ID anstelle von
apache
eingeben im obigen Befehl. -
Geben Sie
docker ps
ein erneut, um sicherzustellen, dass alle Ihreapache
Container läuft nicht mehr. -
Nachdem der Container gestoppt wurde, können Sie ihn entfernen:
docker rm apache
AchtungDas Entfernen eines Containers auf diese Weise löscht alle Daten innerhalb des Containers. Wenn Sie Anpassungen vorgenommen haben, die Sie auf einen neuen Container übertragen möchten, können Sie stattdessen
docker commit
verwenden So erstellen Sie ein neues Image, das Ihre Aktualisierungen enthält:docker commit apache apache_image_update
Anschließend können Sie basierend auf dem neuen
apache_image_update
einen neuen Container bereitstellen Bild im nächsten Abschnitt.
Konfigurieren Sie die Ports Ihres Docker-Containers
Sie können den run
verwenden Befehlsoptionen, um verschiedene Aspekte Ihres Containers zu konfigurieren. Wenn Ihr Container auf einem Remote-Host ausgeführt wird und seine Anwendung bereitstellt, können Sie seine Ports konfigurieren, um die App für Benutzer verfügbar zu machen.
Beispielsweise können Sie Ihren apache
konfigurieren Container, um den Host-Port 8080
zu verwenden und Containerport 80
wie beim folgenden Beispielbefehl. Beachten Sie das -d
Option, die im Befehl verwendet wird, um den Container als getrennten Prozess auszuführen.
docker run --name apache -p 8080:80 -d apache_image
Die allgemeine Syntax für diesen Befehl lautet wie folgt:
docker run -–name <container name> -p <network port>:<container port> -d <container image label or ID>
Jeder Parameter wird in der folgenden Liste beschrieben:
<container name>
:Name des Docker-Containers<host port>
:Host-Port, der dem offenen Port des Containers zugeordnet ist<container port>
:Port, auf dem der Docker-Container lauscht<container image name>
:Docker-Image-Name, der für Ihre Bereitstellung verwendet wird
Navigieren Sie nun zur IP-Adresse Ihres Linode am Host-Port 8080, indem Sie zu http://<your Linode's IP address>:8080
navigieren in einem Webbrowser. Sie sollten die „Apache2 Ubuntu Default Page“ sehen, die von Ihrem Docker-Container bereitgestellt wird.
Achtung Beim Bereitstellen von Containern mit Portkonfigurationen kann Docker auch Host-Firewallregeln erstellen, um den öffentlichen Zugriff auf diese Container zu ermöglichen. Dies kann die Host-Firewall-Regeln, die Sie auf Ihrem Linode konfiguriert haben, überschreiben oder in Konflikt geraten.
Weiterführende Literatur
Dieser Leitfaden und How to Use a Dockerfile to Build a Docker Image deckte die Grundlagen der Verwendung von Dockerfiles zum Erstellen von Images und Containern ab, aber sie kratzen kaum an der Oberfläche dessen, was Sie mit Docker erreichen können. Weitere Informationen:
-
Weitere Informationen zu Dockerfiles finden Sie in der offiziellen Dockerfile Best Practices-Dokumentation;
-
und trotz seines Namens ist Dockers „Erste Schritte“-Leitfaden ein ausführliches Tutorial, das zu noch ausführlicheren Anleitungen führt, z. B. zum Bereitstellen von Anwendungen in der Cloud und zum Einrichten von CI/CD (kontinuierliche Integration und Bereitstellung).
Weitere Informationen
Weitere Informationen zu diesem Thema finden Sie in den folgenden Ressourcen. Obwohl diese in der Hoffnung bereitgestellt werden, dass sie nützlich sind, beachten Sie bitte, dass wir nicht für die Genauigkeit oder Aktualität extern gehosteter Materialien garantieren können.
- Best Practices zum Schreiben von Dockerfiles
- Offizielle Docker-Images auf Docker Hub
- Docker-Dokumentation