nginxはdockerコンテナ内に設定ファイルを自動的に生成します

nginxはdockerコンテナ内に設定ファイルを自動的に生成します

企業が Docker 自動デプロイメントを構築する場合、Docker の実行時にコンテナ内の設定ファイルを変更することなく、外部から環境変数を指定してコンテナ内の設定ファイルが自動的に生成されるように、nginx イメージを作成する必要があります。

実装のアイデア

最終的に実行するコマンドはおそらく次のようになります。

docker run -d -p 80:80 -e xxx=xx イメージ名 イメージ内のスクリプトパス

ここでのスクリプトは dockerfile 内の CMD 命令を置き換えるため、nginx を自動的に生成して起動するシェル スクリプトを作成する必要があります。

#!/bin/bash

#環境変数から lt の先頭を取得して、他の環境変数と区別します。例: lt_analysis=172.17.0.1:8083
結果=""
$(env | grep ^lt) 内の a について
する
 OLD_IFS="$IFS"
 IFS="_"
 arr=($a)
 b=${arr[1]}
 IFS="="
 引数=($b)
 IFS="$OLD_IFS"
 結果="${結果}
  場所 /${arr[0]}/ {
    プロキシパス http://${arr[1]}/${arr[0]}/;
    プロキシ接続タイムアウト 90;
    プロキシ送信タイムアウト 90;
    プロキシ読み取りタイムアウト 90;
  }"
終わり
#nginx_conf設定ファイル内の変数 result を置き換えます
sed -i "s|nginx_conf|$(echo ${result})|g" /etc/nginx/nginx.conf
/usr/sbin にコピー
./nginx

説明する必要があるのは、ビジネスで構成ファイル全体を生成する必要がないということです。場所を生成し、元の構成ファイルでマークされた場所を置き換えることだけが必要です。以下は、元の構成ファイルでマークされた場所です。

http {
  ...
  
  サーバー{
    ...

    位置 / {
      ルートhtml;
      インデックス index.html index.htm;
    }

    nginx_conf

    #エラーページ 404 /404.html;
    ...

このシェルスクリプトとデフォルトの設定ファイルを nginx の dockerfile イメージに入れれば成功すると思ったのですが…上記コマンド実行後、コンテナが起動しませんでした。コンテナのログを確認すると、***Syntax error: “(” expected*** というメッセージが出てきました。私のシェルスクリプトはテスト済みで centos でも実行できるのですが、なぜこのエラーが報告されるのでしょうか?調べてみると、dockerfile は公式の nginx をベースイメージとして使っていることがわかりました。公式イメージは Ubuntu を使っていて、シェルスクリプトの実行に bash ではなく dash を使うようになっています。なんて落とし穴なんでしょう。仕方なく dockerfile を修正しました。以下はベースイメージ centos を使う場合です。

Centosより

環境変数 NGINX_VERSION 1.10.3
環境変数 OPENSSL_VERSION 1.0.2k
環境変数 PCRE_VERSION 8.40
環境変数 ZLIB_VERSION 1.2.11
環境変数 BUILD_ROOT /usr/local/xx/nginx

# 最終的に生成されるイメージが占めるスペースを減らすため、ここでは yum update コマンドは実行されませんが、これは良い方法ではないかもしれません。# ビルドを高速化するために、ここでは 163 インストール ソースが使用されます。# RUN yum -y update \
実行 yum -y install curl \
  && 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 gcc をインストール gcc-c++ perl を zip で解凍 \
  && 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 \
  && pcre-$PCRE_VERSION.zip を解凍します \
  && tar vxfz zlib-$ZLIB_VERSION.tar.gz \
  && tar vxfz openssl-$OPENSSL_VERSION.tar.gz \
  && cd nginx-$NGINX_VERSION \
  && ビルド_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 \
    --http_ssl_module \ で始まる
    --http_v2_module \ で始まる 
    --スレッドあり\
    "\
  && mkdir -p /var/cache/nginx \
  && ./configure $BUILD_CONFIG \
  && メイク && メイク インストール \
  && rm -rf $BUILD_ROOT \
  && yum -y 削除 gcc gcc-c++ make perl zip unzip \
  && yum すべてをクリーン

#nginxのデフォルトファイルを置き換える COPY nginx.conf /etc/nginx/
#設定ファイルを自動的に生成するシェルスクリプトを追加します。COPY スクリプト名 /root/

#ポートを公開 EXPOSE 80 443

CMD ["nginx", "-g", "デーモンオフ;"]

注意: dockerコンテナはバックグラウンド操作をサポートしていません。コマンドが実行されると、コンテナは自然に終了します。ここでnginx設定ファイルを設定する必要があります。

#ユーザーnobody;
ワーカープロセス 1;

#error_log ログ/error.log;
#error_log ログ/error.log 通知;
#error_log ログ/error.log 情報;

#pid ログ/nginx.pid;
daemon off; //バックグラウンド実行イベントをオフにするにはここに追加します {
  ワーカー接続 1024;
}


http {

以上がこの記事の全内容です。皆様の勉強のお役に立てれば幸いです。また、123WORDPRESS.COM を応援していただければ幸いです。

以下もご興味があるかもしれません:
  • Docker を使用して Nginx をインストールし、ポート転送の問題と解決策を構成する
  • DockerはNginxをデプロイし、リバースプロキシを構成する
  • Docker nginx + https サブドメイン設定の詳細なチュートリアル
  • docker に基づいて nginxssl 設定を開始する
  • Dockerでnginxをデプロイし、設定ファイルを変更する方法
  • Docker での nginx プラグインの設定とファイルの詳細な説明

<<:  時間範囲効果を実現するためのJavaScript

>>:  MySQL 5.7を完全にアンインストールするための詳細な手順

推薦する

Axios を使用して Vue2 がリクエストを開始する詳細なプロセス記録

目次序文Axiosのインストールと設定シンプルなGETリクエストを開始するPOSTリクエストを行うシ...

mysql バックアップ スクリプト mysqldump の使い方の詳細な説明

この記事では、参考までにMySQLバックアップスクリプトを紹介します。具体的な内容は次のとおりです。...

Vueでデータを読み取るためにこれを悪用しないでください

目次序文1. これを使用してデータ内のデータを読み取るプロセス2. Dep.target はいつ存在...

ウェブページサイズに関する調査

<br />統計によると、Web ページの平均サイズは 2003 年以降 3 倍に増加し...

LinuxでのDockerのインストールチュートリアル

Docker パッケージは、デフォルトの CentOS-Extras リポジトリにすでに含まれていま...

CSS3 のフィルタプロパティの使用に関する詳細な説明

最近、イントラネットポータルを修正していたときに、フィルターを使用する必要がある箇所に遭遇しました。...

HTML マークアップ言語 - フォーム

123WORDPRESS.COM HTML チュートリアル セクションに戻るには、ここをクリックして...

Mysql データベースの高度なビュー、トランザクション、インデックス、自己接続、ユーザー管理の例の分析の使用

この記事では、ビュー、トランザクション、インデックス、自己接続、ユーザー管理など、MySQL データ...

Vue スキャフォールディング プロジェクトを作成するための詳細な手順

vue スキャフォールディング -> vue.cli大規模で完全に機能する Vue プロジェク...

MySQL のインデックス有効条件とインデックス無効条件の結合

目次1. ジョイントインデックスの故障の条件2. インデックス失敗の条件1. ジョイントインデックス...

Dockerコンテナの中国語言語パックの設定の問題を解決する

Dockerでdocker search centosを使用する場合docker pull dock...

HTML でのフォームとフォーム送信操作に関する情報のコレクション

ここでは、フォーム要素とフォーム送信に関する知識を紹介します。フォーム要素フォーム要素の DOM イ...

win10にUbuntu18デュアルシステムをインストールするとmmx64.efiが見つからないという問題が発生する

Ubuntu 18のインストール中に、USBディスクからUbuntuのインストールを開始すると、mm...

Nginx 外部ネットワーク アクセス イントラネット サイト構成操作

背景:サイトはフロントエンドとバックエンドから分離されています: vue+springbootフロン...

Linux で crontab 出力リダイレクトが有効にならない問題の解決方法

質問LINUX では、定期的なタスクは通常、cron デーモン プロセス [ps -ef | gre...