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 でリモート接続を許可する方法

MySql でリモート接続を許可する方法この目標を達成するには、2つのことを行う必要がある。ユーザー...

Node.jsサービスDockerコンテナアプリケーション実践のまとめ

この記事では、Docker コマンドの使用とインストールについては説明しません。Docker を基礎...

WindowsにOpenSSLをインストールし、OpenSSLを使用して公開鍵と秘密鍵を生成します。

1. OpenSSL公式サイト公式ダウンロードアドレス: https://www.openssl....

MYSQLでリモートアクセス権限を有効にする方法

1. MySQLデータベースにログインするmysql -u ルート -pユーザーテーブルを表示する ...

Dockerイメージをプライベートリポジトリにアップロードする方法の例

イメージは、GitHub と同様に Docker パブリック リポジトリに直接簡単にプッシュできます...

Winows Server 2019 アクティベーション コードとボリューム ライセンス エディション KMS インストール キー GVLK

最近、社内文書の整理とファイルサーバーの構成を予定しています。以前はサーバー2003を使い慣れていま...

CentOS7にMariaDB 10.2.4をインストールする方法の詳細な説明

CentOS 6 以前のバージョンでは、MySQL サーバー/クライアント インストール パッケージ...

dockerfile における ENTRYPOINT と CMD の組み合わせと違い

前回の記事【dockerコンテナのためのdockerfileを詳しく解説】では、dockerfile...

CSS 3.0 テキストホバージャンプ特殊効果コード

これは、CSS 3.0 で実装されたテキストのホバーとジャンプ効果です。効果は次のとおりです。 以下...

Alibaba Cloud Server Ubuntu 上の Workbench が MySQL に接続できない問題の解決策 (テスト済み)

過去 2 日間、ワークベンチが Alibaba Cloud Server に接続できない問題を解決す...

JavaScriptコールバック関数の詳細な理解

目次序文クイックレビュー: JavaScript 関数関数とは何ですか?関数を宣言する関数の呼び出し...

PostgreSQL正規表現の一般的な機能の概要

PostgreSQL正規表現の一般的な機能の概要正規表現は、複雑なデータ処理を必要とするプログラムに...

MySQL 5.7.20 の解凍バージョンをインストールするための詳細な手順 (2 つの方法)

Windows 64ビットでのMySQLのインストールについて説明します。5.7以降、MySQLの...

Nginx 構成の実装 https

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

Vueは秒殺しのカウントダウンコンポーネントを実装する

この記事では、2番目のキルカウントダウンコンポーネントを実装するためのVueの具体的なコードを参考ま...