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 の重要なコンポーネントの概要

推薦する

Nginx 構成の実装 https

目次1: https証明書を準備する2: nginx sslモジュールを準備する3: SSL証明書を...

HTML の 5 種類のスペースの意味

HTML には、幅の異なる 5 つのスペース エンティティが用意されています。非改行スペース ( )...

Vue開発ウェブサイトSEO最適化方法の詳細な説明

ページデータの表示には Vue などの js のデータバインディング機構が使用されるため、クローラー...

WeChatアプレットがテキストスクロールを実装

この記事の例では、WeChatアプレットでテキストスクロールを実装するための具体的なコードを参考まで...

jsはクリックしてカードを切り替える機能を実現します

この記事の例では、クリックしてカードを切り替える機能を実現するためのjsの具体的なコードを共有してい...

MySQL でストリーミングクエリを使用してデータ OOM を回避する

目次1. はじめに2. JDBCはストリーミングクエリを実装する3. パフォーマンステスト3.1. ...

CentOS のファイルと権限の基本操作チュートリアル

序文始める前に、ファイル属性とファイル属性を変更する方法について簡単に理解しておく必要があります。 ...

Javascriptジェネレータの紹介と使用

ジェネレータとは何ですか?ジェネレーターは関数内で実行されるコードです。値を返した後、一時停止し、呼...

Navicat 8でMySQL用のデータベースを作成する方法

ウェブサイトを開発する場合、データを保存するためにデータベースを使用する必要があることがよくあります...

Hタグはウェブページ制作において適切に使用すべきである

HTML タグには、ページのタイトルを処理するための特別なタグがあります。これらは h1、h2、h3...

Linux RabbitMQ クラスタ構築プロセス図

1. 全体的な手順冒頭で、RabbitMQ サービスをインストールして実行する方法を紹介しましたが、...

CSSを使用してTDのINPUTの幅を設定する

最近、C# を使用して Web プログラムを作成していたときに、次のような問題が発生しました。 Te...

Reactでのこのリファレンスの詳細な説明

目次原因:以下を実行します: 1. コンストラクター2.レンダリング機能3.bind関数とarrow...

Mysql は最大接続数を表示し、最大接続数を変更します

MySQL 最大接続数の表示と最大接続数の変更1. 最大接続数を確認する '%max_con...