企業が 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を完全にアンインストールするための詳細な手順
このドキュメントの目的はreact-diagramフレームワーク モデルの Json シリアル化を説...
1. 仮想環境virtualenvのインストール1. virtualenvをインストールするpip3...
本日、ゲームを再起動した後、バックアップしたデータをターゲットデータベースにインポートできないことが...
ローカルでコンテナを作成した後、このコンテナに基づいてローカル イメージを作成し、このイメージを D...
この記事の例では、Vue Element UIカスタム説明リストコンポーネントの具体的なコードを参考...
結果 (完全なコードは下部にあります): 実装は難しくありませんが、繰り返しコードが多くなります。実...
Tomcat を学習したばかりのプログラマーにとって、これはよくある間違いです。 1. 環境変数の問...
目次1. シーンレイアウト2. ハンドルリスナーを追加する1. イベントの変更を監視する2. 座標設...
最近、IM を実行するときに、これらの 3 つのキーワードを同時に使用したときに問題が発生しました。...
Supervisor は非常に優れたデーモン管理ツールです。自動起動、ログ出力、自動ログカットなど、...
通常は、最初に Dockerfile ファイルを定義し、次に docker build コマンドを使...
Nginx ログは、ユーザーの住所の場所や行動プロファイルなどを分析するために使用できます。Elas...
inode番号でファイルを削除するまずls -iを使用して、削除するファイルのinode番号を見つけ...
機能シナリオを簡単に説明しましょう。データ行フィールドは次のとおりです。名前開始日時タイプこの表では...
序文この記事では主に、SQL ステートメントの最適化の一般的な手順について説明します。これは、参考と...