Dockerはnginxをデプロイし、フォルダとファイル操作をマウントします

Dockerはnginxをデプロイし、フォルダとファイル操作をマウントします

この間、私は docker を勉強していたのですが、nginx をデプロイするときに行き詰まりました。主な問題は、ファイルとフォルダのマウント方法がわからなかったことです。何度も実験し、オンライン チュートリアルを確認した結果、次のようにまとめました。

1まずnginxミラーパッケージをダウンロード

docker プル 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 を応援していただければ幸いです。

以下もご興味があるかもしれません:
  • DockerコンテナにNFS共有ディレクトリをマウントする実装
  • Docker - コンテナマウントディレクトリを変更する3つの方法のまとめ
  • Dockerはローカルディレクトリとデータボリュームコンテナ操作をマウントします
  • dockerログマウントの問題を解決する
  • Dockerはelasticsearchイメージを起動し、ディレクトリをマウントした後にエラーを解決します
  • Windows ホストと Docker コンテナに共有フォルダを設定してマウントする手順
  • docker nginxコンテナの起動とローカルへのマウントの詳細な説明
  • docker run で ./ 相対パスを使用してファイルまたはディレクトリをマウントできない問題を解決する

<<:  JavaScript でのモグラ叩きゲームの実装

>>:  MySQL InnoDB の重要なコンポーネントの概要

推薦する

MySQLクライアント認証後の接続失敗の問題に対する完璧なソリューション

MySQL 環境をローカル (192.168.1.152) にデプロイし、リモート クライアント 1...

MySQLのスケジュールタスクが正常に実行できない原因の分析と解決

目次序文原因分析と解決策スケジュールされたタスクを迅速に実行する要約する序文データベースのスケジュー...

ウェブページ制作をマスターするために必要な6つのスキルのまとめ

ウェブデザイナーはジェネラリストであると言わざるを得ません。グラフィックデザイナーは、さまざまな特殊...

リモートDockerを使用した統合テスト環境の構築手順

需要背景チームには統合テストが必要であり、そのためには、mysql や rabbitmq などのミド...

JavaScript が重複したネットワークリクエストを防ぐ方法の例

序文開発中は、インターフェース要求の繰り返しによってさまざまな問題が発生することがよくあります。ネッ...

AngularとIonicのライフサイクルとフック関数を素早く理解するための記事

目次角度成し遂げる呼び出し順序知らせイオニックionic はページのライフサイクルをどのように処理し...

衝突検出を実装するためのjs

この記事の例では、衝突検出を実装するためのjsの具体的なコードを参考までに共有しています。具体的な内...

CentOS システムの rpm インストールと Nginx の設定

目次CentOS rpm のインストールと Nginx の設定導入rpm パッケージのインストールサ...

MySQL RouterはMySQLの読み取りと書き込みの分離を実装します

目次1. はじめに2. MySQLルーターを構成する2.1 MySQLルーターのインストール2.2 ...

webpackの遅延読み込みとプリロードの詳細な説明

目次通常の読み込み遅延読み込みプリロードプリロードを使用しないプリロードの使用要約する通常の読み込み...

ウェブサイトをより高く、よりデザイン的に見せる方法

「ウェブサイトを高級感のあるものにするにはどうすればいいでしょうか? それともデザイン重視にすればい...

よく忘れられがちな CSS のヒント 26 選

これは、よく使われるけれども忘れられがちな CSS 実装方法のコレクションです。抜けや追加があれば、...

Linux カーネルの copy_{to, from}_user() に関する考察

目次1. copy_{to,from}_user() とは何か1. copy_{to,from}_u...

nginx のフロントエンドとバックエンドに同じドメイン名を設定する方法

この記事では、主にnginxのフロントエンドとバックエンドに同じドメイン名を設定する方法を紹介し、皆...

MySQL で重複時間を削除して時間差を計算する実装

目次必要:ドライブ:アイデア:成し遂げる:個人的には、実際の開発ではストアド プロシージャの使用はお...