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は現在の日付と時刻を取得する関数

推薦する

Linux インデックスノード inode の詳細な説明

1. inodeの紹介inode を理解するには、まずファイル ストレージから始める必要があります。...

Linux の grep コマンドと egrep コマンドの詳細な説明

反復/egrep構文: grep [-cinvABC] 'word' ファイル名-c...

MySQL の int、char、varchar のパフォーマンスを比較する

インターネットには、真実のように見える「噂」がたくさんあります。もちろん、悪意のあるものではありませ...

vue backtop コンポーネントを実装するための完全なコード

効果: コード: <テンプレート> <div class="back-t...

2015-2016年に主流となるインタラクティブ体験のトレンド

5月の最も重要なインタラクティブデザイン記事!今年、Baiduのデザイナーは体験の観点から出発し、大...

ウェブページヘッダーの最適化の提案

ロゴの最適化: 1.ロゴ画像はできるだけ小さくしてください。 2. 一般的には背景として配置されます...

Vue フロントエンドと Django バックエンドを使用して、一定期間内のデータをクエリする方法

序文開発プロセスでは、すべてのデータではなく特定の期間内のデータをクエリするなど、クエリのフィルタリ...

Ansibleを使用してディレクトリ内のすべてのコンテンツを削除する方法

Ansible を使用する学生は、以下に示すように、Ansible が特定のフォルダーまたはファイル...

CSSセレクターでの正規表現の使用

はい、CSS にも正規表現があります (アーメン) CSS で目立つための 2 つの強力なツール: ...

クラウドデータ移行サービスの観点から見たMySQLの大規模テーブル抽出モードの原理分析

概要: MySQL JDBC 抽出にはどのような方法を使用すればよいでしょうか? その方法を説明しま...

Linux で推奨される 9 つの優れたコード比較ツールの概要

コードを書くとき、2 つのファイル間の違い、または同じファイルの異なるバージョン間の違いを知る必要が...

Tomcatの再構成後に起動が遅くなる問題を迅速に解決

Jenkins+Tomcatサーバーの設定中に、Tomcat設定ファイルが変更され、サーバーのTom...

デザイナーの「職業病」について

デザイナーは世界で最も繊細で感情的な人々だと私はいつも感じています。私がこう言うときに優越感を感じる...

デザイン: 意志の強いデザイナー

<br />長年の専門的なアートデザイン教育を通じて「美とは何か」を学びましたが、「美を...

Alibaba Cloud OSS アクセス権設定(RAM 権限制御)実装

シナリオmyBuket の static/material/ ディレクトリなど、Alibaba Cl...