Website-Suche

So erstellen und konfigurieren Sie automatisch benutzerdefinierte Docker-Images mit Dockerfile – Teil 3


Dieses Tutorial konzentriert sich auf die Erstellung eines benutzerdefinierten Docker-Images auf Basis von Ubuntu mit installiertem Apache-Dienst. Der gesamte Prozess wird mithilfe einer Dockerfile automatisiert.

Docker-Images können automatisch aus Textdateien mit dem Namen Dockerfiles erstellt werden. Eine Docker-Datei enthält schrittweise geordnete Anweisungen oder Befehle, die zum Erstellen und Konfigurieren eines Docker-Images verwendet werden.

Anforderungen

  • Installieren Sie Docker und lernen Sie die Manipulation von Docker-Containern – Teil 1
  • Anwendungen unter Docker-Containern bereitstellen und ausführen – Teil 2

Grundsätzlich enthält eine Docker-Datei verschiedene Anweisungen, um einen bestimmten Container basierend auf Ihren Anforderungen zu erstellen und zu konfigurieren. Die folgenden Anweisungen werden am häufigsten verwendet, einige davon sind obligatorisch:

  1. FROM=Obligatorisch als erste Anweisung in einer Docker-Datei. Weist Docker an, das Basis-Image abzurufen, aus dem Sie das neue Image erstellen. Verwenden Sie ein Tag, um das genaue Bild anzugeben, aus dem Sie erstellen:
Ex: FROM ubuntu:20.04
  1. MAINTAINER=Autor des Build-Images
  2. RUN=Diese Anweisung kann in mehreren Zeilen verwendet werden und führt alle Befehle aus, nachdem ein Docker-Image erstellt wurde.
  3. CMD=Führen Sie einen beliebigen Befehl aus, wenn das Docker-Image gestartet wird. Verwenden Sie nur eine CMD-Anweisung in einer Docker-Datei.
  4. ENTRYPOINT=Wie CMD, wird aber als Hauptbefehl für das Bild verwendet.
  5. EXPOSE=Weist den Container an, bei der Ausführung Netzwerkports abzuhören. Die Container-Ports sind vom Host aus standardmäßig nicht erreichbar.
  6. ENV=Container-Umgebungsvariablen festlegen.
  7. ADD=Ressourcen kopieren (Dateien, Verzeichnisse oder Dateien von URLs).

Schritt 1: Dockerfile-Repository erstellen oder schreiben

1. Zuerst erstellen wir eine Art Dockerfile-Repository, um Dateien in Zukunft zum Erstellen anderer Images wiederzuverwenden. Erstellen Sie irgendwo in der Partition /var ein leeres Verzeichnis, in dem wir die Datei mit den Anweisungen erstellen, die zum Erstellen des neuen Docker-Images verwendet werden.

mkdir -p /var/docker/ubuntu/apache
touch /var/docker/ubuntu/apache/Dockerfile

2. Beginnen Sie als Nächstes mit der Bearbeitung der Datei mit den folgenden Anweisungen:

vi /var/docker/ubuntu/apache/Dockerfile

Dokerfile-Auszug:

FROM ubuntu
MAINTAINER  your_name  <[email >
RUN apt-get -y install apache2
RUN echo “Hello Apache server on Ubuntu Docker” > /var/www/html/index.html
EXPOSE 80
CMD /usr/sbin/apache2ctl -D FOREGROUND

Gehen wir nun die Dateianweisungen durch:

Die erste Zeile sagt uns, dass wir aus einem Ubuntu-Image erstellen. Wenn kein Tag übermittelt wird, beispielsweise 14:10, wird das neueste Bild von Docker Hub verwendet.

In der zweiten Zeile haben wir den Namen und die E-Mail-Adresse des Bilderstellers hinzugefügt. Die nächsten beiden RUN-Zeilen werden beim Erstellen des Images im Container ausgeführt und installieren den Apache-Daemon und echo etwas Text in die Standard-Apache-Webseite .

Die EXPOSE-Zeile weist den Docker-Container an, auf Port 80 zu lauschen, aber der Port ist für Außenstehende nicht verfügbar. Die letzte Zeile weist den Container an, den Apache-Dienst im Vordergrund auszuführen, nachdem der Container gestartet wurde.

3. Als letztes müssen wir mit der Erstellung des Images beginnen, indem wir den folgenden Befehl ausführen, der lokal ein neues Docker-Image mit dem Namen ubuntu-apache basierend auf dem erstellt Zuvor erstellte Docker-Datei, wie in diesem Beispiel gezeigt:

docker build -t ubuntu-apache /var/docker/ubuntu/apache/

4. Nachdem das Image von Docker erstellt wurde, können Sie alle verfügbaren Images auflisten und Ihr Image identifizieren, indem Sie den folgenden Befehl ausführen:

docker images

Schritt 2: Führen Sie den Container aus und greifen Sie über das LAN auf Apache zu

5. Um den Container kontinuierlich (im Hintergrund) auszuführen und vom Host oder einem anderen Remote-Computer in Ihrem LAN auf die vom Container bereitgestellten Dienste (Ports) zuzugreifen, führen Sie den folgenden Befehl an der Eingabeaufforderung Ihres Host-Terminals aus :

docker run -d -p 81:80 ubuntu-apache

Hier führt die Option -d den Container ubuntu-apache im Hintergrund aus (als Daemon) und die Option -p ordnet den Container-Port < zu80 an Ihren lokalen Host-Port 81. Der externe LAN-Zugriff auf den Apache-Dienst ist nur über Port 81 möglich.

Der Befehl Netstat gibt Ihnen eine Vorstellung davon, welche Ports der Host überwacht.

Nachdem der Container gestartet wurde, können Sie auch den Befehl docker ps ausführen, um den Status des laufenden Containers anzuzeigen.

6. Die Webseite kann auf Ihrem Host über die Befehlszeile angezeigt werden, indem Sie das Dienstprogramm curl für die IP-Adresse Ihres Computers, Ihren lokalen Host oder die Docker-Net-Schnittstelle an Port 81 verwenden. Verwenden Sie den IP-Befehl Zeile, um die IP-Adressen der Netzwerkschnittstellen anzuzeigen.

ip addr               [List nework interfaces]
curl ip-address:81    [System Docker IP Address]
curl localhost:81     [Localhost]

7. Um die Container-Webseite von Ihrem Netzwerk aus zu besuchen, öffnen Sie einen Browser an einem entfernten Standort und verwenden Sie das HTTP-Protokoll, die IP-Adresse des Computers, auf dem der Container ausgeführt wird, gefolgt von Port 81, wie auf der Abbildung dargestellt Bild unten.

http://ip-address:81

8. Um einen Einblick in die Prozesse zu erhalten, die im Container ausgeführt werden, geben Sie den folgenden Befehl ein:

docker ps
docker top <name or ID of the container>

9. Um das Container-Problem zu stoppen, geben Sie den Befehl docker stop gefolgt von der Container-ID oder dem Namen ein.

docker stop <name or ID of the container>
docker ps

10. Wenn Sie dem Container einen beschreibenden Namen zuweisen möchten, verwenden Sie die Option --name, wie im folgenden Beispiel gezeigt:

docker run --name my-www -d -p 81:80 ubuntu-apache
docker ps

Jetzt können Sie den Container zur Manipulation (Start, Stopp, Top, Statistiken usw.) nur unter Verwendung des zugewiesenen Namens referenzieren.

docker stats my-www

Schritt 3: Erstellen Sie eine systemweite Konfigurationsdatei für den Docker-Container

11. Unter CentOS/RHEL können Sie eine systemd-Konfigurationsdatei erstellen und den Container wie gewohnt für jeden anderen lokalen Dienst verwalten.

Erstellen Sie beispielsweise mit dem folgenden Befehl eine neue Systemd-Datei mit dem Namen apache-docker.service:

vi /etc/systemd/system/apache-docker.service

apache-docker.service Dateiauszug:

[Unit]
Description=apache container
Requires=docker.service
After=docker.service

[Service]
Restart=always
ExecStart=/usr/bin/docker start -a my-www
ExecStop=/usr/bin/docker stop -t 2 my-www

[Install]
WantedBy=local.target

12. Nachdem Sie die Bearbeitung der Datei abgeschlossen haben, schließen Sie sie, laden Sie den Systemd-Daemon neu, um die Änderungen widerzuspiegeln, und starten Sie den Container, indem Sie die folgenden Befehle ausgeben:

systemctl daemon-reload
systemctl start apache-docker.service
systemctl status apache-docker.service

Dies war nur ein einfaches Beispiel dafür, was Sie mit einer einfachen Docker-Datei tun können, aber Sie können einige ziemlich anspruchsvolle Anwendungen vorab erstellen, die Sie in nur wenigen Sekunden mit minimalem Ressourcen- und Aufwand starten können.

Weiterführende Literatur: