nginx generiert automatisch Konfigurationsdateien im Docker-Container

nginx generiert automatisch Konfigurationsdateien im Docker-Container

Wenn ein Unternehmen eine automatisierte Docker-Bereitstellung erstellt, muss es ein Nginx-Image erstellen, damit beim Ausführen von Docker die Konfigurationsdatei im Container automatisch durch externe Angabe von Umgebungsvariablen generiert wird, ohne dass die Konfigurationsdatei im Container geändert werden muss.

Umsetzungsideen

Der letzte Befehl, den Sie ausführen, sieht wahrscheinlich folgendermaßen aus:

docker run -d -p 80:80 -e xxx=xx Imagename Skriptpfad im Image

Das Skript hier ersetzt die CMD-Anweisung in der Docker-Datei, daher müssen wir ein Shell-Skript erstellen, das nginx automatisch generiert und startet.

#!/bin/bash

#Holen Sie sich den lt-Anfang aus der Umgebungsvariable, um ihn von anderen Umgebungsvariablen zu unterscheiden, zum Beispiel lt_analysis=172.17.0.1:8083
Ergebnis=""
für ein in $(env | grep ^lt)
Tun
 OLD_IFS="$IFS"
 IFS="_"
 arr=($a)
 b=${arr[1]}
 IFS="="
 arr=($b)
 IFS="$OLD_IFS"
 Ergebnis="${Ergebnis}
  Standort /${arr[0]}/ {
    Proxy-Passwort http://${arr[1]}/${arr[0]}/;
    Proxy_Verbindungstimeout 90;
    Proxy_Sendezeitüberschreitung 90;
    Proxy_Lese_Timeout 90;
  }"
Erledigt
#Ersetzen Sie das variable Ergebnis in der Konfigurationsdatei nginx_conf
sed -i "s|nginx_conf|$(echo ${result})|g" /etc/nginx/nginx.conf
cd /usr/sbin
./nginx

Eine Sache, die erklärt werden muss, ist, dass die gesamte Konfigurationsdatei nicht im Unternehmen generiert werden muss. Es ist nur erforderlich, den Speicherort zu generieren und dann den in der ursprünglichen Konfigurationsdatei markierten Speicherort zu ersetzen. Nachfolgend sehen Sie den in der ursprünglichen Konfigurationsdatei markierten Speicherort.

http {
  ...
  
  Server {
    ...

    Standort / {
      Stamm-HTML;
      Index Index.html Index.htm;
    }

    nginx_conf

    #Fehlerseite 404 /404.html;
    ...

Ich dachte, dass das Einfügen dieses Shell-Skripts und der Standardkonfigurationsdatei in das Dockerfile-Image von Nginx erfolgreich sein würde, aber ... nachdem ich den obigen Befehl ausgeführt hatte, startete der Container nicht. Als ich das Container-Protokoll überprüfte, erschien die folgende Meldung: ***Syntaxfehler: „(“ unerwartet***. Mein Shell-Skript wurde getestet und kann auf CentOS ausgeführt werden. Warum wird also dieser Fehler gemeldet? Nach der Untersuchung stellte sich heraus, dass das Dockerfile das offizielle Nginx als Basisimage verwendet. Das offizielle Image verwendet Ubuntu und verwendet zum Ausführen von Shell-Skripten nicht mehr Bash, sondern Dash. Was für eine Falle. Mir blieb nichts anderes übrig, als das Dockerfile zu ändern. Im Folgenden wird das Basisimage CentOS verwendet.

VON centos

ENV NGINX_VERSION 1.10.3
ENV OPENSSL_VERSION 1.0.2k
ENV PCRE_VERSION 8.40
ENV ZLIB_VERSION 1.2.11
ENV BUILD_ROOT /usr/local/xx/nginx

# Um den vom endgültig generierten Image belegten Speicherplatz zu reduzieren, wird der Befehl yum update hier nicht ausgeführt, was möglicherweise keine gute Vorgehensweise ist. # Um den Build zu beschleunigen, wird hier die Installationsquelle 163 verwendet. #RUN yum -y update \
Führen Sie den Befehl yum -y install curl \ aus.
  && mv /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo.backup \
  && curl http://mirrors.163.com/.help/CentOS7-Base-163.repo -o /etc/yum.repos.d/CentOS7-Base-163.repo \ 
  && yum -y installiere gcc gcc-c++ make perl zip unzip \
  && mkdir -p $BUILD_ROOT \
  && cd $BUILD_ROOT \
  && curl https://ftp.pcre.org/pub/pcre/pcre-$PCRE_VERSION.zip -o $BUILD_ROOT/pcre-$PCRE_VERSION.zip \
  && curl https://www.openssl.org/source/openssl-$OPENSSL_VERSION.tar.gz -o $BUILD_ROOT/openssl-$OPENSSL_VERSION.tar.gz \
  && curl http://www.zlib.net/zlib-$ZLIB_VERSION.tar.gz -o $BUILD_ROOT/zlib-$ZLIB_VERSION.tar.gz \
  && curl https://nginx.org/download/nginx-$NGINX_VERSION.tar.gz -o $BUILD_ROOT/nginx-$NGINX_VERSION.tar.gz \
  && tar vxzf nginx-$NGINX_VERSION.tar.gz \
  && entpacken Sie pcre-$PCRE_VERSION.zip \
  && tar vxfz zlib-$ZLIB_VERSION.tar.gz \
  && tar vxfz openssl-$OPENSSL_VERSION.tar.gz \
  && cd nginx-$NGINX_VERSION \
  && BUILD_CONFIG="\
    --prefix=/etc/nginx \
    --sbin-path=/usr/sbin/nginx \
    --conf-path=/etc/nginx/nginx.conf \
    --error-log-path=/var/log/nginx/error.log \
    --http-log-path=/var/log/nginx/access.log \
    --pid-path=/var/run/nginx.pid \
    --lock-path=/var/run/nginx.lock \
    --http-client-body-temp-path=/var/cache/nginx/client_temp \
    --http-proxy-temp-path=/var/cache/nginx/proxy_temp \
    --http-fastcgi-temp-path=/var/cache/nginx/fastcgi_temp \
    --http-uwsgi-temp-path=/var/cache/nginx/uwsgi_temp \
    --http-scgi-temp-path=/var/cache/nginx/scgi_temp \
    --with-openssl=$BUILD_ROOT/openssl-$OPENSSL_VERSION \
    --with-pcre=$BUILD_ROOT/pcre-$PCRE_VERSION \
    --with-zlib=$BUILD_ROOT/zlib-$ZLIB_VERSION \
    --mit-http_ssl_module \
    --mit-http_v2_module \ 
    --mit-Threads \
    " \
  && mkdir -p /var/cache/nginx \
  && ./konfigurieren $BUILD_CONFIG \
  && machen && machen installieren \
  && rm -rf $BUILD_ROOT \
  && yum -y remove gcc gcc-c++ make perl zip unzip \
  && yum alles reinigen

#Ersetzen Sie die nginx-Standarddatei KOPIEREN Sie nginx.conf /etc/nginx/
#Fügen Sie ein Shell-Skript hinzu, um automatisch eine Konfigurationsdatei zu generieren. KOPIEREN Sie den Skriptnamen /root/

#Anschlüsse freigeben EXPOSE 80 443

CMD ["nginx", "-g", "Daemon aus;"]

Erinnerung: Der Docker-Container unterstützt keine Hintergrundoperationen. Nachdem der Befehl ausgeführt wurde, wird der Container auf natürliche Weise beendet. Hier müssen wir die Nginx-Konfigurationsdatei festlegen

#Benutzer niemand;
Arbeiterprozesse 1;

#error_log Protokolle/Fehler.log;
#error_log Protokolle/error.log Hinweis;
#error_log Protokolle/error.log-Info;

#pid-Protokolle/nginx.pid;
daemon off; //Hier hinzufügen, um im Hintergrund laufende Ereignisse zu deaktivieren {
  Arbeiterverbindungen 1024;
}


http {

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:
  • Verwenden Sie Docker, um Nginx zu installieren und Probleme und Lösungen zur Portweiterleitung zu konfigurieren
  • Docker stellt Nginx bereit und konfiguriert Reverse-Proxy
  • Detailliertes Tutorial zur Konfiguration von Docker nginx + https-Subdomains
  • Starten Sie die auf Docker basierende nginxssl-Konfiguration
  • So stellen Sie nginx mit Docker bereit und ändern die Konfigurationsdatei
  • Detaillierte Erläuterung der Nginx-Plugin-Konfiguration und Dateien unter Docker

<<:  JavaScript zum Erzielen eines Zeitbereichseffekts

>>:  Detaillierte Schritte zur vollständigen Deinstallation von MySQL 5.7

Artikel empfehlen

Häufige Fragen und Antworten im Vorstellungsgespräch für Stellen als Webdesigner

1. Was sind die Vorlagen für ASP.NET-Webanwendunge...

Nach dem Docker-Lauf ist der Status immer „Beendet“

füge -it hinzu docker run -it -name test -d nginx...

CSS zum Erzielen eines Beispielcodes für eine Bildlaufleiste

Auf manchen Websites sieht man oft Bilder, die ko...

Verwenden Sie den Befehl sed, um die kv-Konfigurationsdatei in Linux zu ändern

sed ist ein Zeichenstromeditor unter Unix, also e...

MySQL Null kann 5 Probleme verursachen (alle schwerwiegend)

Inhaltsverzeichnis 1. Zähldaten gehen verloren Lö...

HTML-Formular und die Verwendung interner Formular-Tags

Code kopieren Der Code lautet wie folgt: <html...

Detailliertes Tutorial zur Installation von CUDA9.0 auf Ubuntu16.04

Vorwort: Dieser Artikel basiert auf den Erfahrung...

So legen Sie einen gepunkteten Rahmen in HTML fest

Verwenden Sie CSS-Stile und HTML-Tag-Elemente Um ...

Detaillierte Erklärung des JavaScript ES6-Moduls

Inhaltsverzeichnis 0. Was ist ein Modul 1.Modul l...