Implementierung zum Erstellen benutzerdefinierter Images mit Dockerfile

Implementierung zum Erstellen benutzerdefinierter Images mit Dockerfile

Vorwort

Im vorherigen Artikel wurden die zum Ausführen von Containern mit Docker verwendeten Images remote von Dockerhub abgerufen. Können wir also unsere eigenen Images erstellen? Die Antwort ist ja. Sie können Ihr eigenes Image über Dockerfile erstellen. Dockerfile selbst ist nicht schwierig, es besteht nur aus einer Reihe von Befehlen. Was mir schwerfällt, ist die Verwendung dieser Befehle von Dockerfile, um Ihr eigenes Image aus einer übergeordneten Perspektive besser zu erstellen. Werfen wir einen Blick darauf.

Einführung in Dockerfile

Dockerfile ist eigentlich eine Datei. Der Name der Datei lautet Dockerfile. Natürlich können Sie diesen Namen auch verwenden und den Namen beim Erstellen des Images angeben. Es wird jedoch allgemein als Dockerfile bezeichnet. Die Hauptfunktion von Dockerfile besteht darin, uns beim Erstellen eines benutzerdefinierten Images zu helfen. Daher wird Dockerfile auch als Image-Build-Datei oder Image-Beschreibungsdatei bezeichnet.

Einige Freunde fragen sich vielleicht: Auf Dockerhub werden viele offizielle Images bereitgestellt, die im Grunde alle Dienste erfüllen. Warum müssen wir das Image also anpassen? Indem Sie Dockerfile zum Erstellen Ihres eigenen Images verwenden, können Sie Ihre eigene Anwendung in ein Image packen und beim Ausführen des Images direkt Dienste mit einigen unserer angepassten Funktionen ausführen.

Wenn Sie beispielsweise das CentOS7-Image von Dockerhub herunterladen, verfügt das offizielle Image nicht über die Vim-Funktion. Daher können wir unser eigenes Image basierend auf dem offiziellen CentOS-Image erstellen, um Vim beim Ausführen des CentOS-Containers automatisch zu installieren.

Dockerfile erstellt den Image-Prozess

Bevor Sie den Dockerfile-Image-Erstellungsprozess vorstellen, müssen Sie ein wichtiges Konzept kennen – das Kontextverzeichnis. Das Verzeichnis, in dem sich das Dockerfile befindet, wird als Kontextverzeichnis bezeichnet.

Docker ist eine CS-Architektur. Der Befehl zum Erstellen eines Images mit Dockerfile lautet „docker build“. Wenn der Befehl im Betriebssystem des Clients ausgeführt wird, packt die Docker-Engine alle Daten in das Verzeichnis, in dem sich das Dockerfile befindet, und sendet sie an den Docker-Server. Daher sollte das Verzeichnis, in dem sich das Dockerfile befindet, nur die Dateien enthalten, die zum Erstellen des aktuellen Images erforderlich sind. Wenn der Server eine Befehlszeile im Dockerfile ausführt, wird im Docker-Cache ein temporäres Image generiert (wenn Sie kein temporäres Image generieren möchten, fügen Sie nach „docker build“ den Parameter „--no_cache“ hinzu). Wenn es bis zur letzten Zeile ausgeführt wird, wird ein endgültiges Image erhalten. Wie in der folgenden Abbildung dargestellt:

Dockerfile-Verwendung

Lassen Sie uns zunächst über den Befehl für Dockerfile zum Erstellen des Images sprechen:

# Befehlsformat: docker build -t Imagename: Tag-Pfad, in dem sich die Docker-Datei befindet docker build -t mycentos:01 .

Hier sind einige häufig verwendete Befehle in Dockerfile. Beachten Sie, dass alle Befehle in Dockerfile groß geschrieben werden.

VON Imagename: Tag: Der erste Befehl im Docker-File, der angibt, auf welcher Basis das Image erstellt werden soll. Obwohl ein benutzerdefiniertes Image erstellt wird, basiert auch dieses benutzerdefinierte Image auf dem offiziellen Basisimage.

# Docker-Datei
FROM centos:7 # gibt an, dass das Image auf Basis von centos7 erstellt wird

RUN: Der Befehl, der beim Erstellen des Images ausgeführt werden muss. Darauf kann ein Shell-Befehl folgen.

# Das erste Syntaxformat RUN yum install -y vim

# Das zweite Syntaxformat RUN ["yum", "install", "-y", "vim"]

EXPOSE: Ports, die der Außenwelt zugänglich gemacht werden. Nur wenn die Ports im Image zugänglich gemacht werden, kann der Parameter -p bei der Ausführung des Befehls „docker run“ angegeben werden.

EXPOSE 9000 # zeigt an, dass Port 9000 freigegeben wird

WORKDIR: Gibt den Pfad beim Betreten des Containers an. Sie können mehrere Pfade schreiben. Wenn im Container kein angegebener Pfad vorhanden ist, wird der Pfad erstellt. Sie können mehrere Pfade schreiben. Der nächste Pfad ist ein relativer Pfad basierend auf dem vorherigen Pfad.

ARBEITSVERZEICHNIS /data
ARBEITSVERZEICHNIS /a

KOPIEREN: Kopiert die angegebene Datei im Kontextverzeichnis in das angegebene Verzeichnis im Image.

# Befehlsformat: KOPIEREN Sie den ursprünglichen Pfad (kann ein absoluter oder relativer Pfad sein) und den Zielpfad im Container# Syntaxformat 1 KOPIEREN Sie /root/app/aa.txt /data 

# Syntaxformat 2 KOPIEREN ["<src>", ..., "<dest>"] --- Syntaxformat 2

ADD: Kopiert die angegebene Datei im Kontextverzeichnis in das angegebene Verzeichnis des Spiegels. Es kann die URL identifizieren und das der URL entsprechende komprimierte Paket automatisch herunterladen. Es kann das lokal komprimierte Paket auch in das angegebene Verzeichnis des Spiegels kopieren und es dann automatisch dekomprimieren.

#Kopieren Sie die angegebene Datei im Kontextverzeichnis in das angegebene Verzeichnis des Spiegels ADD bb.txt /data

# URL automatisch identifizieren und in das angegebene Verzeichnis im Container herunterladen ADD https://www.python.org/ftp/python/3.9.1/Python-3.9.1.tgz /data

# Das komprimierte Paket wird automatisch in das angegebene Verzeichnis ADD xxx.tar /data dekomprimiert

ENTRYPOINT: Wird verwendet, um den Befehl anzugeben, der beim Starten des Containers ausgeführt werden soll. Ähnlich wie CMD wird es häufig verwendet, um den ersten Befehl nach dem Start des Containers festzulegen. Es können mehrere Befehle geschrieben werden; sie können überschrieben werden.

# ENTRYPOINT-Shell-Skript oder ENTRYPOINT ["tail", "-f"...]
ENTRYPOINT tail -f bb.txt
# Überschreiben docker run --entrypoint=cat mycentos:08 /data/bb.txt

CMD: Das letzte CMD wird als Standard verwendet; kann überschrieben werden; kann Parameter an ENTRYPOINT übergeben und kann in Verbindung mit ENTRYPOINT verwendet werden (kann nur in Form eines JSON-Arrays verwendet werden)

# Führen Sie nur die letzte CMD aus
CMD ls $BASEDIR
CMD Katze bb.txt

# Kann überschrieben werden, der Befehl nach Docker Run überschreibt direkt den Befehl nach CMD im Dockerfile docker run mycentos:09 ls /data

# Wird in Verbindung mit ENTRYPOINT verwendet, um Parameter an ENTRYPOINT zu übergeben. Parameter können dynamisch übergeben werden. Beispielsweise bleibt der Projektpfad unverändert, aber der Projektname ändert sich. Bitte beachten Sie, dass bei der gemeinsamen Verwendung der beiden das JSON-Array-Format verwendet werden muss.
EINSTIEGSPUNKT ["ls", "/data"]
CMD [/data/bb"]

oder

Docker führt Mycentos aus: 10 /data/bb/aa

Dies ist das Ende dieses Artikels über die Implementierung zum Erstellen eines benutzerdefinierten Images mit Dockerfile. Weitere Informationen zum Erstellen eines Images mit Dockerfile finden Sie in früheren Artikeln auf 123WORDPRESS.COM oder in den folgenden verwandten Artikeln. Ich hoffe, Sie werden 123WORDPRESS.COM auch in Zukunft unterstützen!

Das könnte Sie auch interessieren:
  • Befehlsanalyse zum Schreiben von Dockerfile-Dateien und Erstellen von Images
  • Erstellen Sie ein Docker-Image mit Dockerfile
  • Schritte zum Erstellen eines Docker-Images mit Dockerfile
  • So erstellen Sie ein Tomcat-Image basierend auf Dockerfile
  • So verwenden Sie Dockerfile zum Erstellen von Images in Docker
  • Beispiel für die Verwendung von Dockerfile zum Erstellen eines Nginx-Images
  • So verwenden Sie Dockerfile zum Erstellen von Images
  • Beispielcode zum Erstellen eines Docker-Images mit der Dockerfile-Anweisung

<<:  Detaillierte Erklärung des Unterschieds zwischen der IE8-Kompatibilitätsansicht (IE7-Modus) und dem eigenständigen IE7

>>:  CSS verwendet die Alibaba-Vektorbibliothek, um den entsprechenden Positionen schnell ansprechende Symboleffekte hinzuzufügen (Beispielcode).

Artikel empfehlen

HTML-Zeichnungsbenutzer-Registrierungsseite

In diesem Artikel wird der spezifische Implementi...

Vue integriert Tencent TIM Instant Messaging

In diesem Artikel wird hauptsächlich die Integrat...

Praxis der Vue Global Custom-Anweisung Modal Drag

Inhaltsverzeichnis Hintergrund Umsetzungsideen Er...

So verwenden Sie den CocosCreator-Objektpool

Inhaltsverzeichnis Vorwort: Spezifische Operation...

JavaScript-Canvas zum Erzielen von Meteoreffekten

In diesem Artikel wird der spezifische Code für J...

Besprechen Sie die Anwendung von Mixin in Vue

Mixins bieten eine sehr flexible Möglichkeit, wie...

Ausführliche Erklärung des Sperrmechanismus in MySQL

Vorwort Um die Konsistenz und Integrität der Date...

Detaillierte Erklärung der Kodierungsprobleme bei MySQL-Befehlszeilenoperationen

1. Überprüfen Sie die MySQL-Datenbankkodierung my...

Implementierung von webpack-dev-server zum Erstellen eines lokalen Servers

Inhaltsverzeichnis Vorwort Webpack-Deb-Server Sta...

Implementierung der Webpack-Codefragmentierung

Inhaltsverzeichnis Hintergrund CommonsChunkPlugin...