DockerでNginxサーバーを作成する方法

DockerでNginxサーバーを作成する方法

動作環境: MAC

Docker バージョン: Docker version 17.12.0-ce, build c97c6d6

1. Nginxサーバーを起動する

Nginxサーバーを起動し、シミュレートされたターミナルに入ります

docker run -p 8080:80 --name nginx_web -it nginx /bin/bash

2. Nginxイメージ設定ファイルの場所を理解する

ログファイルの場所: /var/log/nginx

設定ファイルの場所: /etc/nginx

リソースの保存場所: /usr/share/nginx/html

上記の設定パスは私のコンピュータ上の仮想 Linux のアドレスです。ご自身の設定場所をご確認ください。

3. Nginxのデフォルトのホームページを変更し、実行できるかテストする

重要なヒント: 面倒なことはしたくない場合は、ステップ4から直接実行できます。

nginx の共有フォルダ

echo "<h1>Hello Docker</h1>" > index.html

ここを訪れた友人の中には、localhost:8080 ポートにアクセスすると、Nginx のウェルカム インターフェイスが最初に表示され、2 回目に 404 プロンプトが表示されることに気付く人もいるかもしれません。

この記事ではこの問題について詳しく説明しません。理解できない場合は、以下を参照してください。
1. dockerでnginxを実行するときにdaemon offを使用する理由
2. Docker コンテナを終了後も実行し続けるにはどうすればよいですか?
3. Docker runコマンドの使い方

Docker は docker run を実行した後、まず現在のオペレーティング システムに基づいて Linux の簡略化されたバージョン (システム操作の最も簡略化された機能のみを含む) を仮想化し、次に Nginx イメージを読み込みます。 Nginx イメージが仮想 Linux 環境にロードされると、システム内でスクリプトを実行するのと同じになり、このスクリプトが Nginx です。

デフォルトの Nginx はデーモン プロセスとして実行されないためです。したがって、Docker はポート 80 でリクエストをリッスンすると、完了後に Nginx プロセスを終了します。コンテナ内にはプロセスが 1 つだけ存在し、非デーモン プロセスです。リクエスト プロセスの実行後に破棄されます。そうすると、このコンテナが存在する必要がなくなるため、Docker 内のこのサービスは停止されます。これが、docker top を実行したときに現在実行中のコンテナが表示されない理由です。

Nginx が一度だけ実行された後に終了する問題の一時的な解決策として、対話型ターミナルに入り、nginx & を実行して、nginx をバックグラウンドでデーモン プロセスとして実行することができます。

稼働中のコンテナを見る

roverliang$ docker ps
コンテナID イメージ コマンド 作成ステータス ポート名

何もない場合は、実行中のコンテナがないことを意味します。

実行が終了したコンテナを表示する

roverliang$ docker ps -a
コンテナID イメージ コマンド 作成ステータス ポート名
5bff285f60b3 nginx "/bin/bash" 9 分前 終了 (0) 6 分前 nginx_web

起動したコンテナを再起動します

docker で nginx_web を起動します

コンテナに入る

docker アタッチ nginx_web

echo "<h1>Hello Docker</h1>" > /usr/share/nginx/html/index.html

nginx & 

次に、ショートカットキーのControl + Qを使用して現在のコンテナを終了します。

次にブラウザで再度アクセスします: http://localhost:8080/

大変な苦労の末、ようやく期待通りのコンテンツが見つかりました。

こんにちは、Docker

4. 以前のNginxデモをプレイ可能なデモにする

まず、ローカルマシンにマップする必要があるフォルダを作成します

 mkdir -p docker_study/log docker_study/etc docker_study/html

注: ホームディレクトリに作成してください

nginxの設定ファイルをdockerにコピーします

docker cp 65bc23f952db:/etc/nginx/ /Users/roverliang/docker_study/etc/

コンテナを閉じる

docker を停止します。

練習用のデモを削除し、最初から使えるデモを構築します。

docker rm nginx_web

ファイルの変更を容易にするために、Nginxイメージをローカルディレクトリにマップします。

docker 実行 \
-p 8080:80 \
--name nginx_web \
-v /Users/roverliang/docker_study/log/:/var/log/nginx \
-v /Users/roverliang/docker_study/etc/nginx.conf:/etc/nginx/nginx.conf \
-v /Users/roverliang/docker_study/html/:/usr/share/nginx/html \
-それ \
-d \
nginx \
/bin/bash \

この時点では、http://localhost:8080/ にアクセスしてもコンテンツが見つからない場合があります。しかし、心配しないでください。問題を解決するプロセスは、新しいことを学ぶプロセスです。オンラインで情報を検索し続け、以下を参照してください。

Dockerはnginxを実行する

以下は、私が突然啓蒙された記事の一節です。

以前実行したときは、通常、対話モードを使用しました。-i でコンテナの stdin がオンになっていることを確認し、-t でコンテナの tty ターミナルを生成し、コマンドの最後に /bin/bash を追加して対話を確実に行えるようにしました。しかし実際には、nginx は実行されていなかったため、コンテナのポート バインディングが永続的ではなかったと考えられます。

次に、コンテナをシャットダウンして削除し、次のコマンドで再起動する必要があります。

docker 実行 \
-p 8080:80 \
--name nginx_web \
-v /Users/roverliang/docker_study/log/:/var/log/nginx \
-v /Users/roverliang/docker_study/etc/nginx.conf:/etc/nginx/nginx.conf \
-v /Users/roverliang/docker_study/html/:/usr/share/nginx/html \
-d \
nginx

5. Nginxの設定を変更してウェブサイトを解析する

先ほどコピーしたnginxの設定を修正する

cd /Users/roverliang/docker_study/etc
vim nginx.conf

Http モジュールに次の構成を追加します。

 サーバ
  {  
    聞く 80; 
    サーバー名 www.test_nginx.com;
    インデックス index.html;
    ルート /usr/share/nginx/html;
  }  

次にホストに戻り、ホスト 127.0.0.1 www.test_nginx.com をバインドします。

完了です!

以上がこの記事の全内容です。皆様の勉強のお役に立てれば幸いです。また、123WORDPRESS.COM を応援していただければ幸いです。

以下もご興味があるかもしれません:
  • docker で nginx+php+mysql を設定する方法
  • 無効な Nginx クロスドメイン設定 Access-Control-Allow-Origin の解決策
  • Nginx に React プロジェクトをデプロイする方法の例
  • nginx.conf ファイルの構文強調表示とフォーマット設定には nginx.vim ツールを使用します。
  • nginx 設定チュートリアルにおける add_header の落とし穴の詳細な説明
  • nginx プロキシ サーバーで双方向証明書検証を構成する方法
  • Nginx プロキシ使用時にヘッダーに「_」が含まれることで情報が失われる問題の解決方法
  • シェルスクリプト nginx 自動化スクリプト
  • dockerでnginxを実行するときにdaemon offが使用される理由についての簡単な説明
  • nginx proxy_cache バッチキャッシュクリアスクリプトの紹介

<<:  Windows 10 と MySQL 5.5 のインストールとインストールなしの使用の詳細なチュートリアル (画像とテキスト)

>>:  MySQLは現在の日付と時刻を取得する関数

推薦する

MySQLでカーソルトリガーを使用する方法

カーソル選択クエリによって返される行のセットは、結果セットと呼ばれます。結果セット内の行は、入力した...

HTML チュートリアル: よく使われる HTML タグのコレクション (5)

導入された HTML タグは、必ずしも XHTML 仕様に完全に準拠しているわけではありません。実際...

MySQL で誕生日から年齢を計算する複数の方法

以前はMySQLをあまり使用していなかったため、MySQLの機能にあまり詳しくありませんでした。この...

Vueは、選択した月に応じて日付に対応する曜日を動的に表示します。

私たち謙虚なプログラマーは、今でもこう歌わなければなりません。「あなたも私も、この世に生まれて、一日...

CSS グリッドレイアウトを使用してレスポンシブな縦棒グラフを作成する方法

私はしばらくの間チャートをいじっていましたが、好奇心から、CSS を使用してチャートを作成するより良...

Nginx ロケーションマッチングルールの例

1. 文法 場所 [=|~|~*|^~|@] /uri/ { ... } 2. 説明上記の構文から、...

MySQL サービスに iptables ファイアウォール ポリシーを追加するためのソリューション

MySQL データベースが Centos7 システムにインストールされており、オペレーティング シス...

Webpack4プラグインの実装原理についての簡単な説明

目次序文知る練習すれば完璧になる序文wabpack では、ローダーの他にプラグインがコア機能です。プ...

iframe を更新する 3 つの方法

コードをコピーコードは次のとおりです。 <iframe src="1.htm&quo...

MySQLで論理SQLを置き換える際の落とし穴を回避する方法の詳細な説明

重複キーの置換と挿入の違い置換の使用法競合がない場合、挿入と同等となり、他の列のデフォルト値が使用さ...

vscodeを使用してuniappを開発する方法

私はフロントエンド プロジェクトの開発に常に vscode を使用してきたため、現在ではいくつかの小...

Linux でファイルの種類を理解して識別する方法

序文ご存知のとおり、Linux ではハードディスクやグラフィック カードなどすべてがファイルです。 ...

SQL と NoSQL の違いのまとめ

主な違い: 1. タイプSQL データベースは主にリレーショナル データベース (RDBMS) とし...

オペレーターが知っておくべき 18 個の Nginx プロキシ キャッシュ構成のヒント (どれを知っていますか?)

アプリケーションや Web サイトのパフォーマンスが成功の重要な要素であることは誰もが知っています。...

大規模なデータテーブルのコピー効率を向上させるMySQLソリューション

序文この記事では主に、MySQL で大規模なデータ テーブルのコピーの効率を向上させることに関する関...