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:
|
<<: JavaScript zum Erzielen eines Zeitbereichseffekts
>>: Detaillierte Schritte zur vollständigen Deinstallation von MySQL 5.7
1. Was sind die Vorlagen für ASP.NET-Webanwendunge...
füge -it hinzu docker run -it -name test -d nginx...
In diesem Artikel erfahren Sie alles über die Ins...
Auf manchen Websites sieht man oft Bilder, die ko...
sed ist ein Zeichenstromeditor unter Unix, also e...
Inhaltsverzeichnis 1. Zähldaten gehen verloren Lö...
Code kopieren Der Code lautet wie folgt: <html...
Vorwort: Dieser Artikel basiert auf den Erfahrung...
Bei der Verwendung von Nginx als Webserver sind m...
ins und del wurden in HTML 4.0 eingeführt, um Auto...
In der SQL-ähnlichen Anweisung beispielsweise SEL...
1. Problem Die bei der Initialisierung von MySQL ...
Verwenden Sie CSS-Stile und HTML-Tag-Elemente Um ...
Inhaltsverzeichnis 0. Was ist ein Modul 1.Modul l...
Vorwort Vor kurzem habe ich aus beruflichen Gründ...