Heim  >  Artikel  >  Betrieb und Instandhaltung  >  So erstellen Sie mit Dockerfile ein Nginx-Image

So erstellen Sie mit Dockerfile ein Nginx-Image

WBOY
WBOYnach vorne
2023-05-14 20:13:104079Durchsuche

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 , geben Sie einfach den Befehl in der Bash-Umgebung ein. Um run einmal zu verwenden, verwenden Sie daher „“ zum Ändern die Zeile und verwenden Sie ' && 'Führen Sie den nächsten Befehl aus. Dieses Format wird im Allgemeinen verwendet;

  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 verwendet werden ;= zum Überschreiben

 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: ...] freigeben

  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 : Legen Sie den Befehl fest, um den Zustand des Containers zu überprüfen.

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:

[root@docker ~]# mkdir mynginx
[root@docker ~]# cd mynginx/
[root@docker mynginx]# pwd
/root/mynginx
[root@docker mynginx]#

Laden Sie das Nginx-Quellcodepaket in das erstellte Verzeichnis (Mynginx-Verzeichnis) herunter:

[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

other Der Inhalt lautet wie folgt:

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 80

Fü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:v3

Die 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. So erstellen Sie mit Dockerfile ein Nginx-Image

[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

Allerdings...

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
exit
rrree

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!

Stellungnahme:
Dieser Artikel ist reproduziert unter:yisu.com. Bei Verstößen wenden Sie sich bitte an admin@php.cn löschen