Einführung in Dockerfile Docker kann automatisch Images erstellen, indem es den Inhalt des Dockerfiles liest. Das Dockerfile ist eine Textdatei, die alle Befehle enthält, die während des Build-Prozesses ausgeführt werden müssen. Man kann auch verstehen, dass Dockerfile ein vom Docker-Programm interpretiertes Skript ist, das aus einer Reihe von Anweisungen besteht. Jede Anweisung entspricht einem Befehl im Linux-System. Das Docker-Programm übersetzt diese Dockerfile-Anweisungen in echte Linux-Befehle. Dockerfile hat ein eigenes Schreibformat und unterstützte Befehle. Das Docker-Programm löst die Abhängigkeiten zwischen diesen Befehlen auf, ähnlich wie Makefile. Das Docker-Programm liest die Docker-Datei und generiert gemäß den Anweisungen ein benutzerdefiniertes Image. Im Vergleich zu Blackboxes wie Images werden offensichtliche Skripte wie Dockerfile von Benutzern leichter akzeptiert, da sie klar zeigen, wie das Image generiert wird. Wenn wir mit Dockerfile unsere eigenen zusätzlichen Anforderungen anpassen müssen, müssen wir nur Anweisungen zum Dockerfile hinzufügen oder ändern und das Image neu generieren, wodurch wir uns das Eingeben von Befehlen ersparen. So erstellen Sie ein Docker-Image: Commit, Dockerfile 1. Verwenden Sie Commit, um das Image zu erstellen: Commit ist ein Image, das auf Grundlage des Originalimages erstellt wird. Der Zweck der Verwendung dieser Methode zum Erstellen eines Images besteht darin, einige Konfigurationsinformationen und geänderte Informationen im Image zu speichern. Es entspricht einer Momentaufnahme eines Spiegels. 2. Verwenden Sie Dockerfile, um das Image zu erstellen: Dockerfile wird verwendet, um schnell das erforderliche (benutzerdefinierte) Image zu erstellen. Anleitung für Dockerfile: FROM: Gibt das Basisimage an (FROM ist eine erforderliche Anweisung und muss die erste Anweisung sein). RUN: Wird zum Ausführen von Befehlszeilenbefehlen verwendet. Sein Grundformat: Das Shell-Format lautet: RUN <Befehl>. Geben Sie den Befehl einfach in die Bash-Umgebung ein. Ein Dockerfile darf RUN für nicht mehr als 127 Ebenen verwenden. Verwenden Sie daher RUN einmal, verwenden Sie „\“, um die Zeile zu umbrechen, und verwenden Sie „&&“, um den nächsten Befehl auszuführen. Dieses Format wird allgemein verwendet; exec-Format: RUN <"ausführbare Datei", "Parameter 1", "Parameter 2">, diese Methode ist wie das Format im Funktionsaufruf; KOPIEREN: Eine Datei kopieren. Sein Grundformat: Format 1: COPY <Quellpfad>...<Zielpfad> Format 2: KOPIEREN [„<Quellpfad 1>“,….“<Zielpfad>“] ADD: Eine erweiterte Dateikopierfunktion. Sie fügt einige auf COPY basierende Funktionen hinzu. Wenn die kopierte Datei eine komprimierte Datei ist, wird sie direkt dekomprimiert, ohne dass RUN zum Dekomprimieren verwendet werden muss. CMD: Container-Startbefehl. Sein Grundformat: Shell-Format: CMD <Befehl> Exec-Format: CMD ["ausführbare Datei", "Parameter 1", "Parameter 2"...] Das Parameterlistenformat lautet: CMD ["Parameter 1", "Parameter 2" ...]. Verwenden Sie nach der Angabe der ENTRYPOINT-Anweisung CMD, um bestimmte Parameter anzugeben EINSTIEGSPUNKT: Einstiegspunkt. Sein Grundformat ist in Exec und Shell unterteilt. Der Zweck von ENTRYPOINT ist derselbe wie bei CMD, nämlich die Angabe des Container-Startprogramms und der Parameter. ENTRYPOINT kann während des Betriebs ersetzt werden, ist jedoch umständlicher als CMD und muss über den Parameter --entrypoint von Docker Run angegeben werden. Wenn ENTRYPOINT angegeben wird, ändert sich die Bedeutung von CMD. Anstatt den Befehl direkt auszuführen, wird der Inhalt von CMD als Parameter an die ENTRYPOINT-Anweisung übergeben. Bei der Ausführung wird es zu: <ENTRYPOINT> "<CMD>" ENV: Umgebungsvariablen festlegen. (Sie können die hier verwendeten Variablen verwenden.) Das grundlegende Format ist: Format 1: ENV <Schlüssel> <Wert> Format 2: ENV <Schlüssel1>=<Wert1> <Schlüssel2>=<Wert>... ARG: Parameter erstellen. Die Wirkung von Build-Parametern ist dieselbe wie die von ENV, beide legen Umgebungsvariablen fest. Der Unterschied besteht darin, dass die von ARG erstellten Umgebungsvariablen bei zukünftigen Ausführungen des Containers nicht mehr vorhanden sind. Sein Grundformat: Format 1: ARG <Parametername> [=<Standardwert>] Format 2: Dieser Standardwert kann im Build-Befehl „docker build“ mit --build-arg <parameter name>=<value> überschrieben werden. VOLUME: Definiert ein anonymes Volume. Sein Grundformat: Format 1: VOLUME ["<Pfad1>", "<Pfad2>"...] Format 2: VOLUME <Pfad> EXPOSE: Den Port freilegen. Der EXPOSE-Befehl deklariert den vom Runtime-Container bereitgestellten Port. Aufgrund dieser Deklaration wird der Port beim Starten des Containers nicht geöffnet. Sein Grundformat: Format 1: EXPOSE <Port1> [<Port2>...] WORKDIR: Gibt das Arbeitsverzeichnis an. Sein Grundformat: Format 1: WORKDIR <Pfad zum Arbeitsverzeichnis> BENUTZER: Gibt den aktuellen Benutzer an. USER hilft Ihnen, zu einem bestimmten Benutzer zu wechseln. Sein Grundformat: Format 1: USER <Benutzername> HEALTCHECK: Integritätscheck, um festzustellen, ob der Status des Containers normal ist. Sein Grundformat: Format 1: HEALTCHECK [Optionen] CMD <Befehl> : Legt den Befehl fest, um den Zustand des Containers zu überprüfen Format 2: HEALTCHECK NONE: Wenn das Basisimage Anweisungen zur Integritätsüberprüfung enthält, verwenden Sie dieses Format, um die Anweisungen zur Integritätsüberprüfung zu blockieren. Erstellen Sie das Nginx-Image: Erstellen Sie ein Verzeichnis und schreiben Sie das Dockerfile hinein: [root@docker ~]# mkdir mynginx [root@docker ~]# cd mynginx/ [root@docker mynginx]# pwd /root/mynginx [root@docker mynginx] Laden Sie das Nginx-Quellpaket in das erstellte Verzeichnis (mynginx-Verzeichnis) herunter: [root@docker ~]# wget -P /root/mynginx/ http://nginx.org/download/nginx-1.15.2.tar.gz Dockerfile schreiben: [root@docker mynginx]# vi Docker-Datei Der Inhalt ist wie folgt: VON centos Führen Sie ping -c 1 www.baidu.com aus. RUN yum -y install gcc make pcre-devel zlib-devel tar zlib Füge nginx-1.15.2.tar.gz /usr/src/ hinzu RUN cd /usr/src/nginx-1.15.2 \ && mkdir /usr/local/nginx \ && ./configure --prefix=/usr/local/nginx && make && make install \ && ln -s /usr/local/nginx/sbin/nginx /usr/local/sbin/ \ && nginx Führen Sie den Befehl rm -rf /usr/src/nginx-1.15.2 aus. AUSSETZEN 80 Führen Sie den Docker-Befehl aus, um das Image zu erstellen: [root@docker mynginx]# docker build -t nginx:v3 . Senden des Build-Kontexts an den Docker-Daemon 1,029 MB Schritt 1/7: VON centos ---> 5182e96772bf Schritt 2/7: Führen Sie ping -c 1 www.baidu.com aus. ---> Cache verwenden ---> 2f70f8abaf2a Schritt 3/7: Führen Sie den Befehl yum -y install gcc make pcre-devel zlib-devel tar zlib aus. ---> Cache verwenden ---> dbdda4b7ae6f Schritt 4/7: ADD nginx-1.15.2.tar.gz /usr/src/ ---> Cache verwenden ---> 18ace6285668 Schritt 5/7: AUSFÜHREN cd /usr/src/nginx-1.15.2 && mkdir /usr/local/nginx && ./configure --prefix=/usr/local/nginx && make && make install && ln -s /usr/local/nginx/sbin/nginx /usr/local/sbin/ && nginx ---> Cache verwenden ---> 99629488ede9 Schritt 6/7: RUN rm -rf /usr/src/nginx-1.15.2 ---> Cache verwenden ---> 869fbad71879 Schritt 7/7: EXPOSE 80 ---> Cache verwenden ---> 384bed72ea6f Erfolgreich erstellt 384bed72ea6f Erfolgreich getaggt nginx:v3 Wenn zwei „Successfully“ ausgegeben werden, war der Build erfolgreich! Starten Sie das benutzerdefinierte Image: Verwenden Sie Docker-Images, um das erstellte Image anzuzeigen: Starten Sie das benutzerdefinierte Image: [root@docker ~]# docker run -dit -p 80:80 --name nginx nginx:v3 ecaafe1190447878b98dfb0198e92439db60ff7dab57a1674e0e9e7282a9c858 [root@docker ~]# docker ps -a CONTAINER ID BILD BEFEHL ERSTELLT STATUS PORTS NAMEN ecaafe119044 nginx:v3 "/bin/bash" vor 3 Sekunden Up 2 Sekunden 0.0.0.0:80->80/tcp nginx Hinweis: Unabhängig davon, wie Sie den Container an diesem Punkt starten, befindet er sich immer im beendeten Zustand. Nach verschiedenen Lösungsvorschlägen habe ich endlich herausgefunden, wo das Problem lag. Es stellt sich heraus, dass der Container beim Starten entsprechend einem Thread im Hintergrund gestartet wird. Er wird bereits beim Start gestartet, aber nach der Ausführung des Befehls wird er beendet und läuft nicht im Hintergrund. Verwenden Sie daher den Parameter -dit, um ihn im Hintergrund laufen zu lassen. [root@docker ~]# docker run -dit -p 80:80 --name nginx nginx:v3 ecaafe1190447878b98dfb0198e92439db60ff7dab57a1674e0e9e7282a9c858 [root@docker ~]# docker ps -a CONTAINER ID BILD BEFEHL ERSTELLT STATUS PORTS NAMEN ecaafe119044 nginx:v3 "/bin/bash" vor 3 Sekunden Up 2 Sekunden 0.0.0.0:80->80/tcp nginx Jedoch....... Zu diesem Zeitpunkt trat ein weiteres Problem auf. Obwohl es aktiv war, konnte nicht auf die Webseitenschnittstelle von nginx zugegriffen werden und es wurde angezeigt, dass die Verbindung abgelehnt wurde! ! ! ! [root@docker ~]# curl 192.168.100.22 curl: (7) Verbindung zu 192.168.100.22:80 fehlgeschlagen; Verbindung abgelehnt [root@docker ~]# elinks --dump 192.168.100.22 ELinks: Verbindung abgelehnt Dann habe ich das Problem nach einer Frage bei Baidu, einer Suche bei FQ und einer Suche bei Google endlich gefunden. Es stellt sich heraus, dass Sie nur exec verwenden müssen, um den Container aufzurufen und nginx zu starten. [root@docker ~]# docker exec -it nginx bash [root@ecaafe119044 /]# nginx [root@ecaafe119044 /]# beenden Ausfahrt [root@docker ~]# curl 192.168.100.22 <!DOCTYPE html> <html> <Kopf> <title>Willkommen bei nginx!</title> <Stil> Körper { Breite: 35em; Rand: 0 automatisch; Schriftfamilie: Tahoma, Verdana, Arial, serifenlos; } </Stil> </Kopf> <Text> <h1>Willkommen bei nginx!</h1> <p>Wenn Sie diese Seite sehen, ist der nginx-Webserver erfolgreich installiert und funktioniert. Weitere Konfiguration ist erforderlich.</p> <p>Online-Dokumentation und Support finden Sie unter <a href="http://nginx.org/" rel="external nofollow" >nginx.org</a>.<br/> Kommerzieller Support ist verfügbar unter <a href="http://nginx.com/" rel="external nofollow" >nginx.com</a>.</p> <p><em>Danke, dass Sie nginx verwenden.</em></p> </body> </html> Also! Das Nginx-Image wurde erfolgreich gekauft! ! ! ! Das Obige ist der vollständige Inhalt dieses Artikels. Ich hoffe, er wird für jedermanns Studium hilfreich sein. Ich hoffe auch, dass jeder 123WORDPRESS.COM unterstützen wird. Das könnte Sie auch interessieren:
|
<<: Sekundäre Kapselung des Elements el-table table (mit Tischhöhenanpassung)
Ich plane, meine eigene Website zu erstellen, als...
Warum prettier verwenden? In großen Unternehmen k...
Da Raspberry Pi auf der ARM-Architektur basiert, ...
1. Verwendung des Iframe-Tags <br />Wenn es ...
In diesem Artikel wird hauptsächlich die Verwendu...
Als ich kürzlich an einem Übungsprojekt arbeitete...
Inhaltsverzeichnis Funktion „Verfassen“ Array.Pro...
In diesem Artikelbeispiel wird der spezifische Co...
Inhaltsverzeichnis 1. Standortobjekt 1. URL 2. Ei...
Wenn Sie einen Docker-Container verwenden, ist vi...
Hintergrund go-fastdfs ist ein verteiltes Dateisy...
Dieser Artikel veranschaulicht anhand von Beispie...
Derzeit gibt es drei Möglichkeiten, die Mitte ein...
Hyperlinks ermöglichen es Benutzern, sofort von ei...
Im Allgemeinen sollte die Hintergrundfarbe einer W...