Heim  >  Artikel  >  Betrieb und Instandhaltung  >  Mit welcher Methode werden Nginx-Plug-in-Dateien unter Docker installiert?

Mit welcher Methode werden Nginx-Plug-in-Dateien unter Docker installiert?

WBOY
WBOYnach vorne
2023-05-13 15:04:121724Durchsuche

Der Zweck der Plug-in-Datei:

  • Die Datei wird nicht durch die Docker-Image-Datei eingeschränkt. Sie kann den Container neu starten und die aktualisierte Datei nicht wiederherstellen

  • Dateien, die während der Ausführung des Containers aufgezeichnet werden, wie z. B. Protokolle. Informationen wie diese können automatisch auf einem externen Speicher gespeichert werden und gehen nicht durch Neustarts des Containers verloren

Es gibt zwei Möglichkeiten, einen Container auszuführen:

  • Docker-Run-Befehl

  • Docker-Compose-Befehl

Die Docker-Run-Befehlsmethode verwendet den Parameter -v, um das externe Hostverzeichnis im Pfad innerhalb des Containers bereitzustellen. Wenn mehrere Bereitstellungspunkte vorhanden sind, geben Sie diese über mehrere an -v-Parameter und nur absolute Pfade können verwendet werden. Der Befehl docker-compose ist einfach zu beschreiben. Um genau zu sein, kann ein Dienst mehrere Container enthalten, und die Bereitstellungskonfiguration des externen Pfads wird ebenfalls konfiguriert -v-Parameter. Der Vorteil besteht darin, dass Sie einen relativen Pfad verwenden können, der natürlich relativ zum Pfad der Datei docker-compose.yml ist. Ein weiterer Vorteil besteht darin, dass der Befehl für Docker-Compose zum Starten des Containers relativ einfach ist.

Angenommen, die Struktur des Bildverpackungspfads lautet wie folgt:

├── build.sh
├── docker-compose.yml
├── Dockerfile
├── mynginx.conf
├── nginx-vol
│   ├── conf.d
│   │   └── mynginx.conf
│   ├── html
│   │   └── index.html
│   └── logs
│       ├── access.log
│       └── error.log
└── run.sh

Dockerfile ist die Konfigurationsdatei zum Erstellen des Bildes und der Inhalt lautet wie folgt:

FROM nginx
LABEL maintainer="xxx" email="<xxx@xxx.com>" app="nginx test" version="v1.0"
ENV WEBDIR="/data/web/html"
RUN mkdir -p ${WEBDIR}
EXPOSE 5180

Geben Sie basierend auf Nginx den neuen Datendateipfad als /data/ an. web/html, und der verfügbar gemachte Port ist 5180.

Kompilieren Sie ein neues Image mit dem folgenden Befehl:

docker build -t nginx:test-v1 .

Das kompilierte Image-Tag ist test-v1. Sie können das lokale Image anzeigen:

docker images
REPOSITORY   TAG       IMAGE ID       CREATED          SIZE
nginx        test-v1   d2a0eaea3fac   56 minutes ago   141MB
nginx        latest    605c77e624dd   9 days ago       141MB

Sie können sehen, dass das Image mit dem Tag test-v1 einfach das neue Image ist zusammengestellt.

Erstellen Sie das externe Nginx-Volume nginx-vol und die zugehörigen Ordner conf.d, logs und html und legen Sie die entsprechenden Inhalte in den entsprechenden Verzeichnissen ab. Der Inhalt von iindex.html im HTML-Ordner lautet beispielsweise wie folgt:

<html>
        <head>
                <meta http-equiv="Content-Type" content="text/html;charset=utf-8" />
                <title>系统时间</title>
        <body>
                <div id="datetime">
                        <script>
                                setInterval("document.getElementById(&#39;datetime&#39;).innerHTML=new Date().toLocaleString();",1000);
                        </script>
                </div>
        </body>
        </head>
</html>

Tatsächlich handelt es sich lediglich um eine Seite, auf der die aktuelle Uhrzeit angezeigt wird.

Der Abschnitt „Protokolle“ ist leer. Der Zweck besteht darin, die Protokolle in den externen Speicher zu schreiben, wenn der Container gestoppt oder das Image zerstört wird.

conf.d unten ist die personalisierte Nginx-Konfiguration. Der Inhalt lautet wie folgt:

server {
    listen       5180;
    #listen  [::]:5180;
    server_name  localhost;

    #access_log  /var/log/nginx/host.access.log  main;
    location / {
        root   /data/web/html;
        index  index.html index.htm;
    }
    #error_page  404              /404.html;
    # redirect server error pages to the static page /50x.html
    #
    error_page   500 502 503 504  /50x.html;
    location = /50x.html {
        root   /usr/share/nginx/html;
    # proxy the PHP scripts to Apache listening on 127.0.0.1:80
    #location ~ \.php$ {
    #    proxy_pass   http://127.0.0.1;
    #}
    # pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000
    #    root           html;
    #    fastcgi_pass   127.0.0.1:9000;
    #    fastcgi_index  index.php;
    #    fastcgi_param  SCRIPT_FILENAME  /scripts$fastcgi_script_name;
    #    include        fastcgi_params;
    # deny access to .htaccess files, if Apache&#39;s document root
    # concurs with nginx&#39;s one
    #location ~ /\.ht {
    #    deny  all;
}

Tatsächlich werden der Port und der Root-Pfad basierend auf der Standard-Default.conf von Nginx geändert. Der Zweck besteht darin, zu veranschaulichen, dass auch Nginx-Konfigurationsdateien verwendet werden können Externer Speicher: Wenn Ihr eigenes Programm die Konfigurationsdatei ändern kann, können Sie die Konfigurationsdatei auf diese Weise ändern, während der Container ausgeführt wird. Die geänderte Konfigurationsdatei wird tatsächlich im externen Speicher gespeichert, sodass sie nicht verschwindet, wenn der Container stoppt Die Dateien im Image werden nicht wiederhergestellt.

Docker-Ausführungsmodus

Der Einfachheit halber können Sie den Ausführungsbefehl in ein Shell-Skript wie run.sh schreiben. Der Inhalt lautet wie folgt:

docker run --name nginx-v1 -p 15180:5180 -v /home/project/nginx-test/nginx-vol/logs:/var/log/nginx -v /home/project/nginx-test/nginx-vol/conf.d:/etc/nginx/conf.d -v /home/project/nginx-test/nginx-vol/html:/data/web/html -d nginx:test-v1

Sie können sehen, dass der Befehl 3 -v enthält entsprechen unterschiedlichen externen Speicher-Mounts und werden verschiedenen Verzeichnissen innerhalb des Containers zugeordnet. Die Ports nach

-p (beachten Sie, dass es sich um Kleinbuchstaben handelt) sind der Host-Port bzw. der Container-Port, dh der 15180-Port des Hosts wird dem 5180-Port des Containers zugeordnet, sodass der Nginx-Dienst-Port 5180 vom Container gestartet wird kann auf den 15180-Port des Hosts zugreifen und zugeordnet werden.

Laufende Container anzeigen:

docker ps -a
CONTAINER ID   IMAGE           COMMAND                  CREATED         STATUS         PORTS                                                 NAMES
cf2275da5130   nginx:test-v1   "/docker-entrypoint.…"   6 seconds ago   Up 5 seconds   80/tcp, 0.0.0.0:15180->5180/tcp, :::15180->5180/tcp   nginx-v1

Detaillierte Zuordnung anzeigen:

docker inspect nginx-v1

zeigt vollständige Informationen an, in denen die vollständige Speicher-Mount-Zuordnung im Abschnitt „Mounts“ eingesehen werden kann.

Schauen Sie direkt unter nginx-vol/logs auf dem Host nach. Sie können sehen, dass das Nginx-Laufprotokoll im Container automatisch in den Speicher des externen Hosts geschrieben wird.

ls -l nginx-vol/logs/
total 12
-rw-r--r-- 1 root root 1397 1月   8 15:08 access.log
-rw-r--r-- 1 root root 4255 1月   8 15:59 error.log

Container stoppen:

docker stop nginx-v1

Container löschen:

docker rm nginx-v1

Docker-Compose-Modus

Docker-Compose installieren

apt-get install docker-compose	

Docker-compose.yml-Datei schreiben

version: "3"
services:
        nginx:
                container_name: mynginx
                image: nginx:test-v1
                ports:
                        - 80:5180
                volumes:
                        - ./nginx-vol/html:/data/web/html
                        - ./nginx-vol/logs:/var/log/nginx
                        - ./nginx-vol/conf.d:/etc/nginx/conf.d
                restart: always

container_name: Geben Sie den Containernamen an

Bild: zur Verwendung Spiegelung und entsprechende Tags

Ports: Host-Port- und Container-Port-Zuordnung

Volumes: Externe Speicher-Mount-Zuordnung

Starten Sie den Container

docker-compose up -d
Creating network "nginxtest_default" with the default driver
Creating mynginx ...
Creating mynginx ... done

Sehen Sie sich den Container an

docker ps -a
CONTAINER ID   IMAGE           COMMAND                  CREATED          STATUS          PORTS                                           NAMES
635e2999c825   nginx:test-v1   "/docker-entrypoint.…"   24 seconds ago   Up 22 seconds   80/tcp, 0.0.0.0:80->5180/tcp, :::80->5180/tcp   mynginx

Sie können sehen, dass der Container gemäß Docker-Compose ausgeführt wird Die .yml-Konfiguration, der Port, der Name und der Mount sind alle normal. Der Zugriff auf Port 80 des Hosts entspricht dem 5180-Dienst des Containers.

Stoppen Sie den Container

docker-compose down
Stopping mynginx ... done
Removing mynginx ... done
Removing network nginxtest_default

Wie Sie sehen, ist es einfacher, Docker-Compose zu verwenden.

Das obige ist der detaillierte Inhalt vonMit welcher Methode werden Nginx-Plug-in-Dateien unter Docker installiert?. 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