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 面接の質問: ハッシュ インデックスの設定方法

B-Tree インデックスに加えて、MySQL は次のインデックスも提供します。ハッシュインデックス...

ハイパーリンクを使用してリンクファイルを開く HTML 方式の紹介

a および href 属性 HTML では、英語ではアンカーと呼ばれるハイパーリンクを表すために &...

MySQL データベースの基礎を始めるための一般的なコマンドの概要

この記事では、MySQL データベースの基礎を学ぶためによく使用されるコマンドを例を使って説明します...

ハンドラー PageHandlerFactory-Integrated のモジュール リストに不正なモジュール ManagedPipelineHandler が含まれています

Web プロジェクトを開発する場合、IIS をインストールする必要があります。IIS がインストール...

Docker での Redis の永続ストレージの詳細な説明

この章では、dockerの下にあるSpring BootプロジェクトでRedisを操作し始めます。準...

2019 年に最も役立ち重要なオープンソース ツール トップ 10

Black Duck の 2017 年のオープンソース調査では、回答者の 77% がオープンソース...

データベースの削除から逃走までの MySQL の徹底分析_上級編 (I) - データ整合性

1. データ整合性の概要1. データ整合性の概要データの冗長性とは、データベース内に重複したデータが...

crontab スケジュールされたタスクが実行されない理由の分析と解決

序文Linux のスケジュールされたタスクを実装する方法としては、cron、anacron、at な...

Docker デプロイメント RabbitMQ コンテナ実装プロセス分析

1. イメージをプルするまず、次のコマンドを実行して、イメージをローカル コンピューターにダウンロー...

MySQL の NOT IN 充填ピットの NULL 列の問題の解決方法

以前、会社で小さな機能に取り組んでいたとき、特定の状況でデータがいくつあるかを数えてから問題を修正し...

フロントエンドエンジニアが作ったクールなインタラクティブウェブサイトを推薦します

ウェブサイトリンク: http://strml.net/サミュエル・リード著ヒント: 昨日、Mome...

Docker データ ストレージ tmpfs マウントの詳細な説明

この記事を読む前に、ボリュームとバインドマウントの基本を理解しておいてください。詳細については、次の...

MySQLデータベースのトランザクションとロックの詳細な分析

目次1. 基本概念酸3.自動コミット4. トランザクション分離レベル5. 同時実行の一貫性の問題6....

Vue3はJingdong製品詳細ページの虫眼鏡効果コンポーネントをカプセル化します

この記事では、Jingdong製品詳細ページの虫眼鏡効果コンポーネントに似たvue3カプセル化の具体...

Ubuntu 20.04 は Wi-Fi に接続します (2 つの方法)

最近Ubuntu 20.04をインストールしましたが、Wi-Fiに接続できず、Wi-Fiアイコンも表...