この間、私は docker を勉強していたのですが、nginx をデプロイするときに行き詰まりました。主な問題は、ファイルとフォルダのマウント方法がわからなかったことです。何度も実験し、オンライン チュートリアルを確認した結果、次のようにまとめました。 1まずnginxミラーパッケージをダウンロード
2 (キー) nginxイメージ内の設定ファイル、ログ、その他のファイルの特定の場所を確認します。イメージ設定ファイルのパスを見つけることによってのみ、後続のマウントされたファイルとフォルダーがこれらのパスをカバーできます。 ターミナルモードで画像コンテナを開く [root@docker2 nginx]# docker run -i -t nginx /bin/bash ルート@3b39da9212fe:/# ls -l 合計 8 drwxr-xr-x 2 ルート ルート 4096 4月 26 00:00 bin drwxr-xr-x 2 ルート ルート 6 2月 23 23:23 ブート drwxr-xr-x 5 ルート ルート 360 5月30日 01:39 dev drwxr-xr-x 1 ルート ルート 66 5月30日 01:39 など drwxr-xr-x 2 ルート ルート 6 2月 23 23:23 ホーム drwxr-xr-x 1 ルート ルート 45 4月 26 00:00 lib drwxr-xr-x 2 ルート ルート 34 4月 26 00:00 lib64 drwxr-xr-x 2 ルート ルート 6 4月 26 00:00 メディア drwxr-xr-x 2 ルート ルート 6 4月 26 00:00 分 drwxr-xr-x 2 ルート ルート 6 4月 26 00:00 opt dr-xr-xr-x 176 root root 0 5月30日 01:39 proc drwx------ 2 ルート ルート 37 4月 26 00:00 ルート drwxr-xr-x 4 ルート ルート 43 4月 26 00:00 実行 drwxr-xr-x 2 ルート ルート 4096 4月 26 00:00 sbin drwxr-xr-x 2 ルート ルート 6 4月 26 00:00 srv dr-xr-xr-x 13 ルート ルート 0 5月25日 06:07 sys drwxrwxrwt 1 ルート ルート 6 4月 30 13:55 tmp drwxr-xr-x 1 ルート ルート 66 4月 26 00:00 usr drwxr-xr-x 1 ルート ルート 17 4月 26 00:00 var イメージ内のnginx.conf設定ファイルのパスを見つけます/etc/nginx/nginx.conf root@3b39da9212fe:/etc/nginx# ls -l /etc/nginx/ 合計 36 drwxr-xr-x 2 ルート ルート 26 4月 30 13:55 conf.d -rw-r--r-- 1 ルート ルート 1007 4月 9日 16:01 fastcgi_params -rw-r--r-- 1 ルート ルート 2837 4月 9日 16:01 koi-utf -rw-r--r-- 1 ルート ルート 2223 4月 9日 16:01 koi-win -rw-r--r-- 1 ルート ルート 5170 4月 9日 16:01 mime.types lrwxrwxrwx 1 root root 22 Apr 9 16:01 モジュール -> /usr/lib/nginx/modules -rw-r--r-- 1 ルート ルート 643 4月 9日 16:01 nginx.conf -rw-r--r-- 1 ルート ルート 636 4月9日 16:01 scgi_params -rw-r--r-- 1 ルート ルート 664 4月 9日 16:01 uwsgi_params -rw-r--r-- 1 ルート ルート 3610 4月 9日 16:01 win-utf default.conf設定ファイルのパスを見つけます /etc/nginx/conf.d/default.conf root@3b39da9212fe:/etc# ls -l /etc/nginx/conf.d/ 合計 4 -rw-r--r-- 1 ルート ルート 1093 4月 9日 16:01 default.conf デフォルトのホームページフォルダのhtmlパス/usr/share/nginx/htmlを見つけます。 root@3b39da9212fe:/etc# ls -l /usr/share/nginx/ 合計 0 drwxr-xr-x 2 ルート ルート 40 4月 30 13:55 html ログファイルのパス /var/log/nginx を見つける ls -l /var/log/ 合計 96 drwxr-xr-x 1 ルート ルート 60 4月 30 13:55 apt -rw-rw---- 1 ルート utmp 0 4月26日 00:00 btmp -rw-r--r-- 1 ルート ルート 57602 4月30日 13:55 dpkg.log -rw-r--r-- 1 ルート ルート 3264 4月30日 13:55 失敗ログ -rw-rw-r-- 1 ルート utmp 29784 4月30日 13:55 最終ログ drwxr-xr-x 1 ルート ルート 41 4月 30 13:55 nginx -rw-rw-r-- 1 ルート utmp 0 4月26日 00:00 wtmp 次にexitと入力してコンテナターミナルから出ます 3 nginxイメージでmynginxコンテナを起動し、フォルダとファイルをコンテナにマウントします。 ここで、構成ファイルとフォルダーをマウントする理由を説明します。アプリケーションをデプロイして nginx 構成ファイルを簡単に変更する場合、ファイルまたはフォルダーをマウントすると、毎回 docker run -i -t nginx /bin/bash コマンドを使用してイメージ ターミナルに入り、構成ファイルを変更する代わりに、マウント ソースまたはフォルダー内のファイルを変更するだけで済みます。以下では、独自の nginx ホームページを変更し、それをコンテナーにマウントして、元のデフォルトのホームページを上書きする方法を説明します。 Linux システム (私の場合は Centos7) にマウント ソース ファイルとフォルダーを作成します。 mkdir -p /data/nginx/conf mkdir -p /data/nginx/conf.d mkdir -p /data/nginx/html mkdir -p /data/nginx/logs 次に、conf フォルダーに nginx.conf 構成ファイルを作成し、その内容を入力します。私の構成をコピーしないことをお勧めします。上で紹介した最初の手順を使用して、nginx コンテナーのターミナルに入り、nginx.conf 構成ファイルの内容を Linux システムで新しく作成した nginx.conf ファイルにコピーして変更します。これにより、構成ファイル内のパスがイメージ内の構成ファイルのパスと一致するようになります。 [root@docker2 /]# cd /data/nginx/conf [root@docker2 conf]# nginx.conf の詳細 ユーザー nginx; ワーカープロセス 1; error_log /var/log/nginx/error.log 警告; pid /var/run/nginx.pid; イベント { ワーカー接続 1024; } http { /etc/nginx/mime.types を含めます。 デフォルトタイプ アプリケーション/オクテットストリーム; log_format main '$remote_addr - $remote_user [$time_local] "$request" ' '$status $body_bytes_sent "$http_referer" ' '"$http_user_agent" "$http_x_forwarded_for"'; access_log /var/log/nginx/access.log メイン; ファイル送信オン; #tcp_nopush オン; キープアライブタイムアウト65; #gzip オン; /etc/nginx/conf.d/*.conf を含めます。 } conf.d に default.conf ファイルを作成し、次の内容を入力します。また、この内容はイメージ内のデフォルト設定ファイル default.conf からコピーして変更しました。また、関連するパスが nginx イメージ内のパスと一致しない可能性があるため、私の内容をコピーしないことをお勧めします。このようにすると、イメージを起動してコンテナを作成するときに、マウント方法を使用してコンテナ内のパスを上書きすることはできません。 [root@docker2 conf]# /data/nginx/conf.d/default.conf の詳細 サーバー{ 聞く 80; server_name ローカルホスト; #文字セット koi8-r; #access_log /var/log/nginx/host.access.log メイン; 位置 / { ルート /usr/share/nginx/html; インデックス1.html; } #エラーページ 404 /404.html; # サーバーのエラーページを静的ページ /50x.html にリダイレクトします # エラーページ 500 502 503 504 /50x.html; 場所 = /50x.html { ルート /usr/share/nginx/html; } # PHP スクリプトを 127.0.0.1:80 で listen している Apache にプロキシします # #場所 ~ \.php$ { # プロキシパス http://127.0.0.1; #} # PHP スクリプトを 127.0.0.1:9000 で待機している FastCGI サーバーに渡します # #場所 ~ \.php$ { #ルートhtml; #fastcgi_pass 127.0.0.1:9000; # fastcgi_index インデックス.php; # fastcgi_param SCRIPT_FILENAME /scripts$fastcgi_script_name; #fastcgi_params を含めます。 #} # Apacheのドキュメントルートが.htaccessファイルへのアクセスを拒否する # nginxのものと一致します # #場所 ~ /\.ht { # すべて拒否; #} } 元のデフォルト設定ファイルの内容を変更したことに注意してください。上記の場所の 1 つで、nginx のデフォルトのホームページ インデックスを 1.html に変更しました。1.html は私が自分で作成したホームページの名前です。 htmlフォルダに1.htmlホームページファイルを作成し、独自のホームページを作成します。ここでは、notepadd++を使用してWindowsで1.htmlファイルを作成し、ツールを使用してLinuxシステムにコピーしました。中国語がある場合は、エンコードを変換する必要がある場合があります。そうしないと、文字化けする可能性があります。たとえば、ここではansiエンコードを使用しています。 <html> <ヘッド> <title>ミンギンクス</title> </head> <本文> <h1> nginx の使用を歓迎します! </h1> </本文> </html> 次はコンテナを作成し、ファイルとフォルダをマウントします。 [root@docker2 conf]# docker run --name mynginx -d -p 80:80 -v /data/nginx/html:/usr/share/nginx/html -v /data/nginx/conf/nginx.conf:/etc/nginx/nginx.conf -v /data/nginx/conf.d/default.conf:/etc/nginx/conf.d/default.conf -v /data/nginx/logs:/var/log/nginx nginx ターゲット ディレクトリまたはファイル パスは、2 番目の手順で見つかった /etc/nginx/nginx.conf などのイメージ内のパスと一致するようにしてください。 docker ps を実行して正常に起動したかどうかを確認します。 [root@docker2 conf]# docker ps コンテナID イメージ コマンド 作成ステータス ポート名 32ad171d34a2 nginx "nginx -g 'daemon of..." 17 時間前 17 時間前 0.0.0.0:80->80/tcp mynginx 起動に失敗した場合は、まず docker ps -a を使用して失敗したコンテナを表示し、docker rm CONTAILNER ID を使用してコンテナ ID を削除してから問題を特定し、docker run を使用してコンテナを起動します。マウントされたディレクトリとファイルに問題がないことを確認した後でも起動できない場合は、権限の問題です。インターネットでは、docker run の後に --privileged=true パラメータを追加するように言われています。 効果を確認するには、http://IP で Web ページを開きます。 docker で nginx をデプロイし、フォルダーとファイル操作をマウントする方法について、上記の記事ですべてお伝えしました。参考になれば幸いです。また、123WORDPRESS.COM を応援していただければ幸いです。 以下もご興味があるかもしれません:
|
>>: MySQL InnoDB の重要なコンポーネントの概要
目次1: https証明書を準備する2: nginx sslモジュールを準備する3: SSL証明書を...
1. 現在の日付 DATE_SUB(curdate(),INTERVAL 0 DAY) を選択します...
HTML には、幅の異なる 5 つのスペース エンティティが用意されています。非改行スペース ( )...
ページデータの表示には Vue などの js のデータバインディング機構が使用されるため、クローラー...
この記事の例では、WeChatアプレットでテキストスクロールを実装するための具体的なコードを参考まで...
この記事の例では、クリックしてカードを切り替える機能を実現するためのjsの具体的なコードを共有してい...
目次1. はじめに2. JDBCはストリーミングクエリを実装する3. パフォーマンステスト3.1. ...
序文始める前に、ファイル属性とファイル属性を変更する方法について簡単に理解しておく必要があります。 ...
ジェネレータとは何ですか?ジェネレーターは関数内で実行されるコードです。値を返した後、一時停止し、呼...
ウェブサイトを開発する場合、データを保存するためにデータベースを使用する必要があることがよくあります...
HTML タグには、ページのタイトルを処理するための特別なタグがあります。これらは h1、h2、h3...
1. 全体的な手順冒頭で、RabbitMQ サービスをインストールして実行する方法を紹介しましたが、...
最近、C# を使用して Web プログラムを作成していたときに、次のような問題が発生しました。 Te...
目次原因:以下を実行します: 1. コンストラクター2.レンダリング機能3.bind関数とarrow...
MySQL 最大接続数の表示と最大接続数の変更1. 最大接続数を確認する '%max_con...