企業が 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を完全にアンインストールするための詳細な手順
PHP で MySQL サーバーが消えた問題1. 背景以前、Codeigniter でコンソール コ...
大規模な開発に Docker を使用する場合でも、クリーンアップ戦略がなければ、ディスクがすぐにいっ...
写真といえば、まず背景画像が思い浮かびます。私たちの装飾の多くは背景画像を使用して実現されているから...
この記事の例では、WeChatアプレットの検索ボックス機能を実装するための具体的なコードを参考までに...
目次スケルトンスクリーンとはアプレットでスケルトン画面を生成する方法導入方法表示と非表示ユーザーエク...
目次Redux Toolkitが解決する問題何が含まれていますか? Redux Toolkit AP...
序文ある日、突然 MySQL の次のキー ロックについて尋ねられ、私の即座の反応は次のようなものでし...
1. 問題複数のフローティング要素は親要素の幅を拡張できず、親要素の高さが 0 になる可能性がありま...
序文この友人がどれくらいDockerを使っていなかったのかは分かりませんが、突然Dockerコマンド...
MySQL ストアド プロシージャ パラメータには、in、out、inout の 3 種類があります...
目次1.MySQLは時間間隔を加算または減算します2. 日付を減算する最近、MySQL を見直してい...
目次オーディオトランスコーディングツール原理JAVE プロジェクトの問題このプロジェクトの特徴拡張機...
解決策 1: HEAD に次のコードを挿入するなど、HTML ドキュメントで条件付きインポートを使用...
目次1. 大文字と小文字の区別を決定するパラメータ2. パラメータ変更に関する注意事項要約: 1. ...
mysql クエリ制御ステートメントフィールド重複排除 **キーワード: 明確** 構文: テーブル...