Heim > Artikel > Betrieb und Instandhaltung > So erstellen Sie mit Dockerfile ein Nginx-Image
Einführung in die Docker-Datei
Docker kann automatisch ein Image erstellen, indem es den Inhalt der Docker-Datei liest. Die Docker-Datei ist eine Textdatei, die alle Befehle enthält, die während des Erstellungsprozesses ausgeführt werden müssen. Es kann auch verstanden werden, dass Dockfile ein Skript ist, das vom Docker-Programm interpretiert wird. Jede Anweisung entspricht einem Befehl unter dem Linux-System. Das Docker-Programm übersetzt diese Dockerfile-Anweisungen in echte Linux-Befehle. Dockerfile verfügt über 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 Bild. Im Vergleich zu einem Black-Box-ähnlichen Bild ist ein offensichtliches Skript wie Dockerfile für Benutzer einfacher zu akzeptieren. Es zeigt deutlich, wie das Bild generiert wird. Wenn wir mit Dockerfile unsere eigenen zusätzlichen Anforderungen anpassen müssen, müssen wir nur Anweisungen zur Dockerfile hinzufügen oder ändern und das Bild neu generieren, wodurch die Mühe beim Eingeben von Befehlen entfällt.
Docker-Methode zum Erstellen eines Images: commit, dockerfile
1. Verwenden Sie commit, um ein Image zu erstellen:
Commit ist ein Image, das auf der Grundlage des Originalimages erstellt wird Speichern Sie einige der Konfigurationsinformationen und geänderten Informationen. Entspricht einem Schnappschuss eines Bildes.
2. Verwenden Sie Dockerfile, um das Image zu erstellen:
Dockerfile ist ein (benutzerdefiniertes) Image, das zum schnellen Erstellen erforderlich ist.
dockerfile-Anweisungen:
von: Geben Sie das Basisbild an (von ist eine erforderliche Anweisung und muss die erste Anweisung sein).
run: wird zum Ausführen von Befehlszeilenbefehlen verwendet. Sein Grundformat:
Shell-Format: run
Exec-Format: Führen Sie aus. Diese Methode ähnelt dem Format in Funktionsaufrufen.
Kopie: Kopieren Sie die Datei. Sein Grundformat:
irgendwo in |. Pfad>"]
Hinzufügen: Erweitertes Kopieren von Dateien, Hinzufügen einiger Funktionen auf der Basis des Kopierens. Wenn das komprimierte Paket kopiert wird, wird es direkt dekomprimiert, ohne dass dies erforderlich ist Verwenden Sie „run“, um zu dekomprimieren.
cmd: Container-Startbefehl. Sein Grundformat:
Shell-Format: cmd
Exec-Format: cmd ["ausführbare Datei", "Parameter 1", "Parameter 2"...]
Parameterlistenformat: cmd [" Parameter 1 ", "Parameter 2"...], verwenden Sie nach der Angabe des Einstiegspunktbefehls cmd, um die spezifischen Parameter anzugeben
Einstiegspunkt: Einstiegspunkt. Das Grundformat ist in Exec und Shell unterteilt. Der Zweck von Entrypoint ist derselbe wie bei CMD, nämlich der Angabe des Container-Startprogramms und der Parameter. Der Einstiegspunkt 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 seinen Befehl direkt auszuführen, wird der Inhalt von „cmd“ als Parameter an den „entrypoint“-Befehl übergeben. Bei der Ausführung wird es zu:
env: Umgebungsvariablen festlegen. (Sie können die hier verwendeten Variablen verwenden) Das Grundformat:
Format 1: env
Format 2: env arg: Build-Parameter. Die Wirkung von Build-Parametern und env ist die gleiche. Der Unterschied besteht darin, dass die von arg erstellten Umgebungsvariablen nicht vorhanden sind, wenn der Container in Zukunft ausgeführt wird. Sein Grundformat: Format 1: arg Format 2: Dieser Standardwert kann im Build-Befehl docker build --build-arg volume: definiert ein anonymes Volume. Sein Grundformat: Format 1: Volume [" Format 2: Volume Expose: Offengelegter Port. Die Expose-Direktive deklariert den vom Laufzeitcontainer bereitgestellten Port. Beim Starten des Containers wird der Port aufgrund dieser Deklaration nicht geöffnet. Sein Grundformat: Format 1: Arbeitsverzeichnis: Geben Sie das Arbeitsverzeichnis an. Sein Grundformat: Format 1: Arbeitsverzeichnis Benutzer: Geben Sie den aktuellen Benutzer an. user hilft Ihnen, zum angegebenen Benutzer zu wechseln. Sein Grundformat: Format 1: Benutzer Gesundheitsprüfung: Gesundheitsprüfung, um festzustellen, ob der Status des Containers normal ist. Sein Grundformat: Format 1: Healthcheck [Option] cmd Format 2: Healthcheck none: Wenn Das Basisbild Es gibt Anweisungen zur Gesundheitsprüfung, und Sie können dieses Format verwenden, um die Anweisungen zur Gesundheitsprüfung zu blockieren ein Verzeichnis im Verzeichnis. Schreiben Sie die Docker-Datei in: Laden Sie das Nginx-Quellcodepaket in das erstellte Verzeichnis (Mynginx-Verzeichnis) herunter: [root@docker ~]# mkdir mynginx
[root@docker ~]# cd mynginx/
[root@docker mynginx]# pwd
/root/mynginx
[root@docker mynginx]#
[root@docker ~]# wget -p /root/mynginx/ http://nginx.org/download/nginx-1.15.2.tar.gz
Schreiben Sie die Docker-Datei: #🎜🎜 #[root@docker mynginx]# vi dockerfile
from centos run ping -c 1 www.baidu.com run yum -y install gcc make pcre-devel zlib-devel tar zlib add nginx-1.15.2.tar.gz /usr/src/ 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 run rm -rf /usr/src/nginx-1.15.2 expose 80Führen Sie den Docker-Befehl aus, um das Image zu erstellen:
[root@docker mynginx]# docker build -t nginx:v3 . sending build context to docker daemon 1.029mb step 1/7 : from centos ---> 5182e96772bf step 2/7 : run ping -c 1 www.baidu.com ---> using cache ---> 2f70f8abaf2a step 3/7 : run yum -y install gcc make pcre-devel zlib-devel tar zlib ---> using cache ---> dbdda4b7ae6f step 4/7 : add nginx-1.15.2.tar.gz /usr/src/ ---> using cache ---> 18ace6285668 step 5/7 : 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 ---> using cache ---> 99629488ede9 step 6/7 : run rm -rf /usr/src/nginx-1.15.2 ---> using cache ---> 869fbad71879 step 7/7 : expose 80 ---> using cache ---> 384bed72ea6f successfully built 384bed72ea6f successfully tagged nginx:v3Die Ausgabe von zwei erfolgreich bedeutet, dass der Build erfolgreich war ! Starten Sie das benutzerdefinierte Image: Verwenden Sie Docker-Images, um das erstellte Image anzuzeigen:
Benutzerdefiniertes Bild starten:
[root@docker ~]# docker run -dit -p 80:80 --name nginx nginx:v3 ecaafe1190447878b98dfb0198e92439db60ff7dab57a1674e0e9e7282a9c858 [root@docker ~]# docker ps -a container id image command created status ports names ecaafe119044 nginx:v3 "/bin/bash" 3 seconds ago up 2 seconds 0.0.0.0:80->80/tcp nginx
Hinweis: Zu diesem Zeitpunkt befindet sich der Container immer noch im beendeten Zustand, egal wie Sie ihn starten.
Nach verschiedenen Lösungen habe ich endlich herausgefunden, wo das Problem lag. Es stellt sich heraus, dass der Container beim Start im Hintergrund gestartet wird, der einem Thread entspricht. Er wird bereits beim Start gestartet, wird jedoch nach der Ausführung des Befehls beendet und läuft nicht im Hintergrund. Verwenden Sie daher den Parameter -dit um es einfach 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 image command created status ports names ecaafe119044 nginx:v3 "/bin/bash" 3 seconds ago up 2 seconds 0.0.0.0:80->80/tcp nginxAllerdings...Zu diesem Zeitpunkt trat ein weiteres Problem auf, aber auf die Nginx-Webseitenschnittstelle konnte nicht zugegriffen werden und die Verbindung wurde abgelehnt! ! ! !
[root@docker ~]# curl 192.168.100.22 curl: (7) failed connect to 192.168.100.22:80; 拒绝连接 [root@docker ~]# elinks --dump 192.168.100.22 elinks: 拒绝连接Dann, nachdem ich Baidu, fq und Google gefragt hatte, fand ich endlich das Problem. 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 /]# exit exitrrree
Das obige ist der detaillierte Inhalt vonSo erstellen Sie mit Dockerfile ein Nginx-Image. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!