この間、私は 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 の重要なコンポーネントの概要
MySQL 環境をローカル (192.168.1.152) にデプロイし、リモート クライアント 1...
目次序文原因分析と解決策スケジュールされたタスクを迅速に実行する要約する序文データベースのスケジュー...
ウェブデザイナーはジェネラリストであると言わざるを得ません。グラフィックデザイナーは、さまざまな特殊...
需要背景チームには統合テストが必要であり、そのためには、mysql や rabbitmq などのミド...
序文開発中は、インターフェース要求の繰り返しによってさまざまな問題が発生することがよくあります。ネッ...
目次角度成し遂げる呼び出し順序知らせイオニックionic はページのライフサイクルをどのように処理し...
この記事の例では、衝突検出を実装するためのjsの具体的なコードを参考までに共有しています。具体的な内...
目次CentOS rpm のインストールと Nginx の設定導入rpm パッケージのインストールサ...
目次1. はじめに2. MySQLルーターを構成する2.1 MySQLルーターのインストール2.2 ...
目次通常の読み込み遅延読み込みプリロードプリロードを使用しないプリロードの使用要約する通常の読み込み...
「ウェブサイトを高級感のあるものにするにはどうすればいいでしょうか? それともデザイン重視にすればい...
これは、よく使われるけれども忘れられがちな CSS 実装方法のコレクションです。抜けや追加があれば、...
目次1. copy_{to,from}_user() とは何か1. copy_{to,from}_u...
この記事では、主にnginxのフロントエンドとバックエンドに同じドメイン名を設定する方法を紹介し、皆...
目次必要:ドライブ:アイデア:成し遂げる:個人的には、実際の開発ではストアド プロシージャの使用はお...