企業が 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を完全にアンインストールするための詳細な手順
序文このプロジェクトには、衛星測位用のグラフィックスを含むチャートの要件があり、北半球または南半球の...
META タグは、HTML 言語のヘッダー領域にある補助タグです。作成者、日時、Web ページの説明...
ミックスインは、コンポーネントに分散された再利用可能な機能を柔軟な方法で提供します。 Mixin オ...
類似の構造:コードをコピーコードは次のとおりです。 <div></div>&...
MySQLは次のエラーを表示します「コントロール パネル -> 管理ツール -> サービ...
フォームを作成するときに、名前、携帯電話番号、出生地などの 2 つのフィールドを揃える状況に遭遇する...
Win10はmysql5.7の解凍版をインストールします。参考までに、具体的な内容は次のとおりです...
編集者注: この記事は、Teambition チームの @娄昊川 が寄稿したものです。Teambit...
JPQL は Java Persistence Query Language の略です。 Java ...
この記事では、Jingdongの虫眼鏡効果を実現するためのJavaScriptの具体的なコードを紹介...
この記事の例では、参考のためにjsカスタム右クリックメニューの具体的なコードを共有しています。具体的...
この記事の例では、テーブルを追加および削除するためのjsの具体的なコードを参考までに共有しています。...
目次フックとは何ですか?クラスコンポーネント機能コンポーネントフックが作られた理由要約するフックとは...
2005年に業界に入ってから数か月後、労働者の日休みの期間中、1か月以上毎日12時まで残業をしました...
FRAME プロパティを使用して、表の境界線のスタイル タイプを制御します。基本的な構文<T...