企業が 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 を応援していただければ幸いです。 以下もご興味があるかもしれません:
|
>>: MySQL 5.7を完全にアンインストールするための詳細な手順
目次MySQL 共通関数1. 数値関数文字列関数3. 時間機能4. システム機能5. 集計関数MyS...
会社の影響力が拡大し、製品が改良され続けるにつれて、関連するイメージデザインもそれに追いつき、徐々に...
1. オンラインインストール現在、Linux x86アーキテクチャのオンラインインストールのみを試し...
キャラクター小数点文字番号エンティティ名---未使用空間---スペースバー! ! ---感嘆符「 」...
このセクションでは、その他の重要かつ興味深い W3C アクティビティの概要を説明します。このセクショ...
この記事では、例を使用して MySQL ユーザーと権限の管理について説明します。ご参考までに、詳細は...
プロトタイプチェーン継承プロトタイプ継承は、ECMAScript における主な継承方法です。基本的な...
目次1. NFS の概要2. NFS構築1. NFSサーバーの構築2. NFSクライアントの構築3....
次の背景画像を持つ div があるとします。 次の反射効果を作成します。 方法はたくさんありますが、...
この記事では、カルーセルアニメーションを実現するためのVueの具体的なコードを例として紹介します。具...
目次フックとは何ですか?クラスコンポーネント機能コンポーネントフックが作られた理由要約するフックとは...
トランザクションは、複数の SQL ステートメントの原子性、つまり、それらが一緒に完了するか、一緒に...
目次1. 概要1.1 定義1.2 機能説明2. ELKを展開する2.1 ディレクトリとファイルを作成...
1. 最新のnginx dockerイメージをダウンロードする $ docker pull ngin...
仕事で必要になったため、インターネットで多くの情報を見つけましたが、それらはすべてコピーアンドペース...