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

W3C Tutorial (14): W3C RDF und OWL Aktivitäten

RDF und OWL sind zwei wichtige semantische Webtec...

Konfigurationsschritte für die MySQL-Gruppenreplikation (empfohlen)

MySQL-Group-Replication ist eine neue Funktion, d...

Vergleich der Effizienz verschiedener Methoden zum Löschen von Dateien in Linux

Testen Sie die Effizienz des Löschens einer große...

Detaillierte Einführung in die Linux-Hostnamenkonfiguration

Inhaltsverzeichnis 1. Konfigurieren Sie den Linux...

Detaillierte Erläuterung der Wissenspunkte zum MySQL Strict Mode

I. Erläuterung des strikten Modus Gemäß den Einsc...

Installationsmethode für komprimierte MySQL 5.6-Pakete

Es gibt zwei Installationsmethoden für MySQL: MSI...

Über das WeChat-Gleitproblem des UniApp-Editors

Das Uniapp-Applet wird ein ähnliches Dropdown-Pro...

Einführung in den HTML-Standard für chinesische Zeichenkodierung

In HTML müssen Sie die von der Webseite verwendet...

Beispielcode für die programmgesteuerte Verarbeitung von CSS-Stilen

Vorteile eines programmatischen Ansatzes 1. Globa...

Zusammenfassung der MySQL-Datenmigration

Inhaltsverzeichnis Vorwort: 1. Über die Datenmigr...

So installieren Sie einen SVN-Server unter Linux

1. Yum-Installation yum installiere Subversion 2....