Prozessanalyse von reservierten Wortanweisungen in Dockerfile

Prozessanalyse von reservierten Wortanweisungen in Dockerfile

Ich habe Docker schon einmal kurz erlernt, um ein Projekt schnell bereitzustellen. Der Vorgang ging sehr schnell und ich war mit dem Schreiben von Dockerfile-Dateien etwas ungewohnt.

Also habe ich diesen Artikel geschrieben. Ich hoffe, das kann Ihnen allen helfen! ! !

1. Was ist Dockerfile?

Konzept:

Dockerfile ist eine Build-Datei, die zum Erstellen eines Docker-Images verwendet wird. Es ist ein Skript, das aus einer Reihe von Befehlen und Parametern besteht.

Drei Schritte zum Erstellen:

  • Schreiben einer Docker-Datei
  • Docker-Build
  • Docker-Lauf

Centos-Beispiel:

CentOS-Beispiel:

VON Grund auf #Das echte Basisbild,
HINZUFÜGEN centos-7-x86_64-docker.tar.xz /

# Bezeichnungsbeschreibung LABEL \  
    org.label-schema.schema-version="1.0" \
    org.label-schema.name="CentOS-Basisimage" \
    org.label-schema.vendor="CentOS" \
    org.label-schema.license="GPLv2" \
    org.label-schema.build-date="20201113" \
    org.opencontainers.image.title="CentOS-Basisimage" \
    org.opencontainers.image.vendor="CentOS" \
    org.opencontainers.image.licenses="GPL-2.0-only" \
    org.opencontainers.image.created="2020-11-13 00:00:00+00:00"

CMD ["/bin/bash"] #Der in der letzten Zeile ausgeführte Befehl

Wo habe ich es gefunden? Ich habe es auf hub.docker.com gefunden: centos.

Wir wissen nicht, wie das geht, aber wir können uns zunächst ansehen, wie andere es schreiben. Ich denke, jeder kennt das Abschreiben von Hausaufgaben. Allgemein bekannt als CV-Methode😂.

2. Analyse des Dockerfile-Erstellungsprozesses

Erste Schritte:

Jede reservierte Wortdirektive (der Schwerpunkt des heutigen Beitrags) muss大寫字母werden und ihr muss跟隨至少一個參數.

wie:

VON Grund auf #Das echte Basisbild,
HINZUFÜGEN centos-7-x86_64-docker.tar.xz /

Anweisungen werden sequenziell von oben nach unten ausgeführt.

# kennzeichnet einen Kommentar.

#Dies ist ein Kommentar

Jeder Befehl erstellt eine neue Bildebene und überträgt das Bild.

Sie können es wie bei den Matrjoschkas machen, genau wie im Folgenden.

Analyse des Dockerfile-Ausführungsprozesses: docker führt einen Container von einem Basis-Image aus aus

  • Führen Sie einen Befehl aus und nehmen Sie Änderungen am Container vor
  • Führen Sie einen Vorgang ähnlich dem docker commit aus, um eine neue Image-Ebene zu übermitteln.
  • docker führt dann einen neuen Container basierend auf dem gerade übermittelten Image aus
  • Führen Sie die nächste Anweisung im dockerfile aus, bis alle Anweisungen ausgeführt sind.

Später im Text werden Fälle aufgeführt, die im Zusammenhang mit den Fällen noch einmal durchgelesen werden können und so das Verständnis erleichtern.

Kleines Extra:

  • In dieser Phase betrachten wir Dockerfile , Docker Image und Docker Container als drei verschiedene Softwarephasen.
  • Dockerfile ist für die Entwicklung ---> Docker-Image wird zum Auslieferungsstandard ---> Docker-Container umfasst Bereitstellung sowie Betrieb und Wartung
  • Im Dockerfile wird alles definiert, was für den Vorgang benötigt wird. Die zuvor benötigten Umgebungsvariablen, abhängigen Pakete, Laufzeitumgebung usw. werden alle in die Dockerfile Datei geschrieben. Im Vergleich zum Herunterladen so vieler Software und zum Konfigurieren so vieler Dinge auf dem Linux-Server vorher ist es wirklich viel einfacher. Zumindest für einen Neuling wie mich ist die Bereitstellung mit Docker wirklich viel einfacher.
  • Docker -Image ist ein Docker-Image, das während des Docker-Builds generiert wird, nachdem eine Datei mit Dockerfile definiert wurde. Wenn Docker -Image ausgeführt wird, beginnt es tatsächlich mit der Bereitstellung von Diensten.

Docker-Container können Dienste bereitstellen, sobald sie ausgeführt werden.

3. Anweisungen für reservierte Wörter in Dockerfile

Die Anweisungen für reservierte Wörter von Dockerfiel lauten wie folgt:

  1. AUS
  2. WARTUNGSMITTEL
  3. LAUFEN
  4. EXPONIEREN
  5. ARBEITSVERZEICHNIS
  6. Umwelt
  7. HINZUFÜGEN
  8. KOPIE
  9. VOLUMEN
  10. CMD
  11. EINSTIEGSPUNKT
  12. EINBAUEN

3.1 VON

Basisimage, also das Image, auf dessen Basis das aktuelle neue Image erstellt wird.

#Bild basierend auf openjdk:8 erstellen VON openjdk:8

3.2 BETREIBER

Name und E-Mail-Adresse des Bildverwalters

WARTUNGSMITARBEITER Ning Zaichun [email protected]

3.3 LAUF

Anweisungen zum Ausführen beim Erstellen des Containers

RUN mkdir -p /conf/my.cn

3.4 AUSSETZEN

Der vom aktuellen Container freigegebene Port

#Stellen Sie die erforderlichen Ports von MyCat bereit EXPOSE 8066 9066

3.5 ARBEITSVERZEICHNIS

Geben Sie das Standardarbeitsverzeichnis an, in das sich das Terminal nach dem Erstellen des Containers einloggen soll.

#Containerdatenvolumen, wird für Datenspeicherung und Persistenzarbeit verwendet WORKDIR /usr/local/mycat

3.6 Umwelt

Wird verwendet, um Umgebungsvariablen während der Image-Erstellung festzulegen

#Wird verwendet, um während des Image-Erstellungsprozesses die Umgebungsvariable ENV MYCAT_HOME=/usr/local/mycat festzulegen

Diese Umgebungsvariable kann in allen nachfolgenden RUN-Anweisungen verwendet werden, als ob das Umgebungsvariablenpräfix vor dem Befehl angegeben worden wäre; diese Umgebungsvariablen können auch direkt in anderen Anweisungen verwendet werden.

wie:

Führen Sie $MYCAT_HOME/mycat aus

3.7. HINZUFÜGEN und KOPIEREN

HINZUFÜGEN:

Kopieren Sie die Dateien im Hostverzeichnis in das Image. Der Befehl ADD verarbeitet die URL automatisch und dekomprimiert das Tarball.

HINZUFÜGEN centos-6-docker.tar.xz /

KOPIE:

Ähnlich wie ADD werden Dateien und Verzeichnisse in das Image kopiert.

Kopiert die Dateien/Verzeichnisse vom <Quellpfad> im Build-Kontextverzeichnis zum Speicherort <Zielpfad> in der neuen Ebene des Images.

KOPIEREN Quelle Ziel KOPIEREN ["Quelle" "Ziel"]

3.8 LAUTSTÄRKE

Containerdatenvolumes werden zur Datenpersistenz und -speicherung verwendet.

#Legen Sie die Zuordnungsadresse der Mycat-Konfigurationsdateiadresse offen und ordnen Sie beim Start den Hostordner VOLUME /usr/local/mycat direkt zu

3.9 CMD und ENTRYPOINT

CMD

Der CMD-Befehl ähnelt dem RUN-Befehl und hat ebenfalls zwei Formate:

  • shell -Format: CMD<Befehl>
  • exec -Format: CMD ["ausführbare Datei", "Parameter 1", "Parameter 2"....]

In Dockerfile können mehrere CMD-Anweisungen enthalten sein, aber nur die letzte wird wirksam. CMD wird nach docker run durch die Parameter ersetzt.

EINSTIEGSPUNKT

Gibt einen Befehl an, der beim Starten des Containers ausgeführt werden soll.

Der Zweck von ENTRYPOINT ist derselbe wie bei CMD, nämlich die Angabe des Container-Startprogramms und der Parameter.

Der Unterschied:

Hier ist eine kurze Erklärung des Unterschieds. Sie können CMD als Überschreiben verstehen

CMD cat /conf/my.cnfCMD /bin/bash

Beide Anweisungen werden in die Dockerfile Datei geschrieben. Nur CMD /bin/bash wird ausgeführt, aber CMD cat /conf/my.cnf wird nicht ausgeführt, da CMD /bin/bash das vorherige direkt überschreibt.

Anders verhält es sich ENTRYPOINT . Sie können ENTRYPOINT einfach als Anfügen verstehen.

Dies spiegelt sich hauptsächlich in docker run wider. Wenn dockerfile mit CMD endet, können zur Laufzeit keine weiteren Befehle hinzugefügt werden, da sonst der CMD Befehl im Dockerfile überschrieben wird.

Wenn die letzte Zeile im Dockerfile mit ENTRYPOINT endet, können Sie nach dem Befehl docker run einige Befehle anhängen.

3.10 ONBUILD

Beim Erstellen eines geerbten Dockerfile wird der Befehl ausgeführt. Nachdem das übergeordnete Image vom untergeordneten Image geerbt wurde, wird der onbuild des übergeordneten Images ausgelöst.

4. Tatsächliche Kampffälle

4.1. Erstellen Sie Ihr eigenes CentOS-Image

4.1.1、Einführung:

Lassen Sie uns zunächst ein CentOS aus der Alibaba Cloud abrufen, um zu sehen, welche Probleme es gibt, und dann können wir es anpassen.

docker pull centos # Rufen Sie das Image ab docker run -it centos # Führen Sie das Image aus # ===== Test ====vim ceshi.txtifconfig pwd

Warum ist das so? Weil Centos im Docker-Repository eine abgespeckte Version ist, die nur den Kernel und sonst nichts enthält.

Zur Lösung der oben genannten Probleme ist ein angepasstes Centos erforderlich.

4.1.2. Dockerfile schreiben

Schreiben Sie eine Docker-Datei für unser benutzerdefiniertes Centos

FROM centosMAINTAINER 宁在春<[email protected]>ENV MYPATH /usr/localWORKDIR $MYPATHRUN yum -y install vimRUN yum -y install net-toolsEXPOSE 80 CMD echo $MYPATHCMD echo "success"CMD /bin/bash #Nur der letzte wird ausgeführt 

Kopieren Sie dieses anschließend hinein.

mkdir -p /usr/local/docker/mycentos # Eigenen Speicherort erstellen vim Dockerfile

4.1.3. CentOS-Image erstellen

docker build -f /usr/local/docker/mycentos/Dockerfile -t mycentos:1.1 .

erklären:

  • -f: gefolgt von der Dockerfile-Datei
  • -t: Es folgen der Bildname und die Versionsnummer.
  • Der letzte Dezimalpunkt: gibt das aktuelle Verzeichnis an.
  • Docker Build -f Dockerfile Datei -t Imagename: Tag.
  • Wenn die Dockerfile-Datei den Namen „Dockerfile“ trägt und sich im aktuellen Verzeichnis befindet, kann sie wie folgt abgekürzt werden:
  • docker build -t Imagename:Tag .docker build -t mycentos:1.1 .

implementieren:

Das Letzte zu sehen bedeutet Erfolg.

docker images Alle Bilder anzeigen:

4.1.4. Centos-Image ausführen

docker run -it mycentos:1.3pwdifconfig

Der Grund, warum das Verzeichnis, in das wir den Container eingeben, von / auf /usr/local geändert wird, liegt darin, dass es bereits in der Dockerfile-Datei angegeben ist.

ENV MYPATH /usr/localWORKDIR $MYPATH

4.1.5. Änderungsverlauf des Bildes anzeigen

Docker-Verlauf mycentos:1.1 

Auch hier ist zu erkennen, dass das Image durch die Anweisungen in der Dockerfile-Datei Schicht für Schicht aufgebaut wird.

4.2 ONBUILD Beispiel

Baue als Erster einen Ehemann-Spiegel

Schreiben Sie eine dockerfile -Datei und nennen Sie sie dockerfile2

FROM centosRUN yum -y install curlONBUILD RUN echo "Ich wurde vom Unterabbild geerbt, gib diese Anweisung aus" CMD ["crul", "-s","http://ip.cn"]
docker build -f /usr/local/docker/mycentos/Dockerfile2 -t mein_Vater_centos .

Erstellen Sie ein Spiegelbild

Schreiben Sie eine dockerfile -Datei und nennen Sie sie dockerfile3

VON mein_Vater_centosRUN yum -y installiere curlCMD ["crul", "-s","http://ip.cn"]
docker build -f /usr/local/docker/mycentos/Dockerfile3 -t my_son_centos . 

Sie können sehen, dass die Anweisungen im übergeordneten Bild ausgegeben werden.

Dies ist das Ende dieses Artikels über reservierte Wortanweisungen in Dockerfile. Weitere relevante Dockerfile-Anweisungen für reservierte Wörter finden Sie in früheren Artikeln auf 123WORDPRESS.COM oder in den folgenden verwandten Artikeln. Ich hoffe, dass jeder 123WORDPRESS.COM in Zukunft unterstützen wird!

Das könnte Sie auch interessieren:
  • Befehlsanalyse zum Schreiben von Dockerfile-Dateien und Erstellen von Images
  • Dockerfile – einfache Einführung
  • Kenntnisse im Bereich Docker-Image-Layering und Dockerfile-Schreiben
  • Der Unterschied zwischen VOLUME und docker -v in Dockerfile
  • Lösung für das Problem „/bin/sh: pip: Befehl nicht gefunden“ beim Erstellen der Docker-Datei
  • Docker führt die Befehlsanalyse für den DockerFile-Build-Prozess aus

<<:  Implementierung eines einfachen Altersrechners auf Basis von HTML+JS

>>:  CSS füllt das übergeordnete Container-Div mit img-Bildern und passt sich der Containergröße an

Artikel empfehlen

Beispiel für den Aufbau eines Redis-Sentinel-Clusters basierend auf Docker

1. Übersicht Redis Cluster ermöglicht hohe Verfüg...

Eine kurze Analyse der Verwendung von USING und HAVING in MySQL

Dieser Artikel veranschaulicht anhand von Beispie...

Detaillierte Erklärung der allgemeinen Verwendung von MySQL-Abfragebedingungen

Dieser Artikel veranschaulicht anhand von Beispie...

So konfigurieren Sie Anti-Hotlinking für den Nginx-Websitedienst (empfohlen)

1. Prinzip des Hotlinking 1.1 Vorbereitung der We...

So ändern Sie den Bildlaufleistenstil in Vue

Inhaltsverzeichnis Zunächst müssen Sie wissen, da...

Eine kurze Erläuterung der Unterschiede zwischen FTP, FTPS und SFTP

Inhaltsverzeichnis Einführung in FTP, FTPS und SF...

Lösung für den Fehler bei der Verbindung mit MySQL in Docker

Szenario: Nach der Installation der neuesten Vers...

Mit CSS3 3D-Effekten einen Würfel erstellen

Wenn wir lernen, die 3D-Effekte von CSS3 zum Erst...

js realisiert die Funktion zum Klicken zum Wechseln der Karte

In diesem Artikelbeispiel wird der spezifische Co...

So verwenden Sie DQL-Befehle zum Abfragen von Daten in MySQL

In diesem Artikel zeigt Ihnen der Blogger die häu...

Detailliertes Installationstutorial für Windows 10 + MySQL 8.0.11 Zip

Vorbereiten: Downloadadresse für das MySQL 8.0 Wi...