GNU/Linux >> LINUX-Kenntnisse >  >> Panels >> Docker

So verwenden Sie Docker-Images, Container und Dockerfiles im Detail

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

  1. 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.

  2. Stellen Sie sicher, dass Ihr Linode sicher ist, indem Sie unserem Leitfaden zum Einrichten und Sichern einer Compute-Instanz folgen.

  3. 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.

  4. 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.

  1. An der Eingabeaufforderung (entweder über SSH oder Lish im Linode Manager) erstellen und wechseln Sie in ein neues Verzeichnis:

    mkdir ~/mydockerbuild && cd ~/mydockerbuild
    
  2. Erstellen Sie ein Dockerfile-Beispiel für Ihre Apache-Anwendung:

    touch apache_dockerfile
    
  3. Öffnen Sie das Dockerfile mit dem Texteditor Ihrer Wahl (für dieses Beispiel verwenden wir nano):

    nano apache_dockerfile
    
  4. 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 nachfolgende RUN apt-get Befehle werden ausgeführt, ohne dass beim Erstellen von Bildern zusätzliche Benutzereingaben erforderlich sind. Diese Anweisung könnte auch mit ENV geschrieben werden statt ARG 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, wird ARG wird in diesem Fall empfohlen.
  5. Speichern und schließen Sie die Datei.

Erstellen Sie ein Docker-Image aus der Dockerfile

  1. Erstellen Sie ein Image mit der Bezeichnung apache_image aus dem Dockerfile mit dem docker build Befehl:

    docker build ~/mydockerbuild -f apache_dockerfile -t apache_image
    
  2. 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:

  1. 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
    
  2. 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
  3. 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.
  4. Geben Sie docker ps ein erneut, um sicherzustellen, dass alle Ihre apache Container läuft nicht mehr.

  5. Nachdem der Container gestoppt wurde, können Sie ihn entfernen:

    docker rm apache
    
Achtung

Das 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

Docker
  1. So entfernen Sie alle Docker-Images, Container, Volumes, Netzwerke und ungenutzte Ressourcen

  2. So exportieren und importieren Sie Docker-Container

  3. So installieren und verwenden Sie Docker in Ubuntu 20.04

  4. So verwenden Sie Docker Compose

  5. So installieren Sie Docker und führen Docker-Container in Ubuntu aus

Was ist Docker Compose und wie wird es verwendet?

So verwenden Sie Docker Cp zum Kopieren von Dateien zwischen Host und Containern

So bereinigen und löschen Sie Docker-Images

So verwenden Sie Hadolint, um Ihre Dockerfiles zu linten

So installieren und verwenden Sie Docker unter Ubuntu 20.04

So installieren und verwenden Sie Docker unter AlmaLinux 8