GNU/Linux >> Linux の 問題 >  >> Panels >> Docker

DockerでNGINXをプロビジョニングし、サーバー機能を向上させる

NGINXなどのWebサーバーワークロードのコンテナ化は、現代のIT業界全体で一般的になっています。 NGINXは完璧なコンテナワークフローを作成し、NGINXをDockerに結合することは完全に論理的なタスクです。

このチュートリアルでは、Windows、macOS、Linuxなどのオペレーティングシステムで実行されているDockerコンテナで新しいNGINXをプロビジョニングする方法を学習します!

前提条件

このチュートリアルを続けるには、次のものがあることを確認してください。

  • Docker Desktop –このチュートリアルではバージョン3.5.1を使用します。
  • Windows 10 –チュートリアルではWindowsを使用してDockerを実行しますが、同じ一般的な手順をLinuxまたはmacOSにも適用できます。
  • Linuxを使用している場合はDockerエンジン。

DockerコンテナでのNGINXのプロビジョニング

まず、NGINXがインストールされたLinuxDockerイメージを作成することから始めましょう。このチュートリアルでは、利用可能な最新のNGINXバージョン(このチュートリアルでは1.21.1)を実行するAlpineLinuxと呼ばれる最小限のLinuxディストリビューションを使用します。

1.まず、必要なすべてのDockerコマンドを実行するターミナルセッションを開きます。

2. docker pullを実行します 取得するコマンド、または pull 、最新の nginx mainlin-alpineを使用したNGINXDockerHubリポジトリからのイメージ ブランチ。 Docker Hubは、Dockerユーザーが利用できるDockerイメージのオープンソースリポジトリです。

docker pull nginx:mainline-alpine

最新のイメージを取得することは開発とテストに最適ですが、多くの場合、 docker pull nginx:1.21.0-alpineなどの特定のバージョンを指定することが本番環境のベストプラクティスです。 。

3.次に、 docker runを実行します nginx:mainline-alpineからコンテナを実行するコマンド 画像。

  • -i –このパラメーターは、対話型コンソールを要求します。対話型コンソールは、内部コンテナー出力を端末に返します。
  • -t –ここでは、キーコマンド ctrl-cの使用を許可する実行中のコンテナーへのPseudo-TTYコンソールを要求します。 インタラクティブコンテナを終了します。
  • -名前 –このコンテナー実行の名前は、新しいコンテナーごとに一意である必要があります(同じ名前の以前のコンテナーが削除された場合を除く)。
  • -p –使用する内部ポートから外部ポート(この場合は 80 の内部ポート) 80の外部ポートにマッピングする必要があります 。
  • 「イメージ名」–コンテナをプロビジョニングするDockerイメージ(この場合は、以前にプルされた nginx:mainline-alpine ) 画像。
docker run -i -t --name nginx-mainline -p 80:80 nginx:mainline-alpine

4. Webブラウザーで、 http:// localhost に移動して、実行中のDockerコンテナーに移動します。 。成功すると、デフォルトのNGINXウェルカムページが表示されます。前の手順で、外部ポート80をコンテナのポート80にマッピングするコンテナを開始しました( -p 80:80 )、NGINXが利用可能である必要があります。

5.最後に、コマンドラインコンソールをもう一度開き、 ctrl-cのキーの組み合わせを押します。 実行中のコンテナを終了します。まだやるべきことがいくつかあります!

ウェブサイトファイルのコンテナへのマッピング

この時点で、サンプルWebページを使用してNGINXDockerコンテナを簡単に起動できます。次に、カスタムWebサイトをNGINXにアップロードする必要があります。コンテナーは不変であり、再作成時にコンテナーへの変更をすべて削除するため、Dockerイメージの外部にWebサイトソースを提供する必要があります。

Linuxで実行されているNGINXWebサーバーは、Webサイトファイルを / usr / share / nginx / htmlに保存します。 ディレクトリ。ファイルをこのディレクトリに直接アップロードするのではなく、保存場所をその場所にマップして、コンテナが起動時に保存場所からそれらのファイルをプルするようにする必要があります。

ローカルホストオペレーティングシステムの場合:

1.まず、NGINXDockerコンテナにマップするディレクトリを作成します。この例では、 C:\ Articles \ NGINX / usr / share / nginx/htmlにマップするために使用されます。

2.新しく作成したディレクトリに、 index.htmlというファイルを作成します。 、以下が含まれます。このファイルは、NGINXがWebサイトに移動するときに提供するファイルになります。

<html>
    <head></head>
    <body>
        <h1>ATA Test!</h1>
        <p>Welcome to your custom NGINX index file.</p>
    </body>
</html>

3.次に、コマンドラインで docker runを呼び出します。 前のセクションのステップ3とほぼすべて同じパラメーターを使用します。ただし、今回は、ボリュームパラメータ -vを含めます。 以下に示すように。

以下の例では、 -v パラメータはローカルのC:\ Articles \ NGINXをマッピングしています 画像の/usr / share / nginx / htmlへのディレクトリ ディレクトリ。このマッピングを作成すると、 / usr / share / nginx / htmlのコンテンツを変更できます。 C:\ Articles \ NGINXのコンテンツを変更してコンテナディレクトリ ディレクトリ。

これはWindowsファイルの場所を示していますが、このコマンドはLinuxでも同じように機能します。例: -v / usr / share / myfiles:/ usr / share / nginx / html

docker run -i -t -v c:\Articles\NGINX:/usr/share/nginx/html --name nginx-mainline -p 80:80 nginx:mainline-alpine

4.最後に、Webブラウザーを開き、 http:// localhostに移動します。 。新しく作成されたindex.htmlに基づいて次のように表示されます。 ローカルのC:\ Articles \ NGINXからファイルをプルしているため ディレクトリ。

DockerNGINXコンテナーを使用したPHP-FPMアプリケーションの実行

これで、NGINX Dockerコンテナを起動して、Webサイトのコンテンツを簡単に変更できるようになりました。超基本的なセットアップが必要な場合は、これでうまくいく可能性があります。ただし、NGINXでWebアプリケーションを実行することを計画している場合は、もう少し作業を行う必要があります。

例として、作成したばかりのNGINXイメージを有効にして、PHP FastCGI Process Manager(FPM)を使用して一般的なWebスクリプト言語PHPを実行してみましょう。

このセクションでは、いくつかの新しい概念を導入する必要があります。コンテナのセットとそれらのリンケージを簡単に定義するには、DockerComposeファイルを使用するのが最適です。 Docker Composeは、一連のサービスと関連アプリケーションをYAML(Yet Another Markup Language)ファイルで定義します。

さらに、デフォルトサイトのカスタム構成ファイルをNGINXコンテナーにコピーする必要があるため、 nginx:mainline-alpineのカスタムバージョン 画像が必要です。既存のイメージを拡張するには、 dockerfile buildで使用およびビルドされます DockerComposeファイルにステップインします。

1.構成ファイルを含むディレクトリを作成します。この例では、ディレクトリ C:\ Articles \ NGINXPHP 使用されます。

2.まず、ファイル dockerfileを作成します 、以下の内容で。

# The image to pull the base configuration from
FROM nginx:mainline-alpine
# The directory where any additional files will be referenced
WORKDIR C:\Articles\NGINXPHP
# Copy the custom default.conf from the WORKDIR (.) and overwrite the existing internal configuration in the NGINX container
COPY ./default.conf /etc/nginx/conf.d/default.conf

3.次に、ファイル docker-compose.ymlを作成します 以下を含むファイル。

# The specification version of docker-compose
version: "3.9"
# The collection of applications composing this service
services:
  # The NGINX custom container
  web:
    # Instead of referencing image: nginx:mainline-alpine here, use build to
    # reference the current directory (.), which will look for a dockerfile
    # by default
    build: .
    # The external directory location to map to an internal location
    volumes:
      - C:\Articles\NGINXPHP:/usr/share/nginx/html
    # The external port mapping to internal port mapping
    ports:
      - "80:80"
  php:
    image: php:fpm-alpine
    # It is important that both containers can reference the same files
    volumes:
      - C:\Articles\NGINXPHP:/usr/share/nginx/html

4.最後に、NGINX構成ファイル default.confを作成します 、次のように。

server {
    # The port to listen on
    listen 80;
    # The root directory, which must exactly match the internal volume share
    root /usr/share/nginx/html;

    # For all files with the PHP extension run the following
    location ~ ^/.+\.php(/|$) {
        # Pass the request to the host "php" and port 9000 (default PHP-FPM port)
        fastcgi_pass  php:9000;
	# Include the default NGINX FastCGI Parameters
        include       fastcgi_params;
	# Define one additional parameter telling PHP-FPM where to find the file
        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
    }
}

ホスト名の「PHP」はどこから来たのか不思議に思うかもしれません。デフォルトでは、サービスに含まれるすべてのアプリケーションによって共有されるネットワークは、親ディレクトリの名前を使用して作成されます。各コンテナには、アプリケーション名と同じホスト名が割り当てられます。この例では、ネットワークは nginxphpです。 ホスト名はwebです およびphp

5.ターミナルセッションで、カスタムDocker構成ファイルディレクトリ(この例では C:\ Articles \ NGINXPHP )に移動します。 。コマンドdocker-composeupを実行します カスタムサービスを生成して開始します。

6.コンテナのセットが稼働しているので、構成をテストするためのPHPファイルが必要です。ファイルindex.phpを作成します 、 C:\ Articles \ NGINXPHPであるNGINXDocker共有ディレクトリ内 このチュートリアルでは。

<?php phpinfo(); ?>

7. Webブラウザーを開き、http://localhost/index.phpに移動して、PHPファイルが正しく表示されていることを確認します。

結論

Docker NGINXコンテナーは、テストと開発に非常に役立ちます。適切な注意と注意を払えば、Dockerコンテナは本番Webサーバーの機能も大幅に向上させるのに役立ちます!

NGINXコンテナとリンクされたPHP-FPMコンテナが正常にプロビジョニングされたので、完全なWebアプリケーション環境の組み合わせにデータベースコンテナを追加してみてください。


Docker
  1. PrometheusとGrafanaを使用してLinuxサーバーを監視する

  2. Dockerを使用してOpenVPNサーバーをインストールしてホストする方法

  3. Docker(およびLinuxコンテナー)とは何ですか?

  1. Dockerイメージをあるサーバーから別のサーバーにパッケージ化して転送する方法

  2. UbuntuとCentOSでNginxサーバーブロックを設定する方法

  3. MariaDB、Puma、Nginxを使用してUbuntu14.04サーバーにRedmineをインストールします。

  1. Debian GNU/Linuxに基づくNginxWebサーバーのDockerイメージ

  2. Ubuntu14.04および16.04へのNginxのインストール

  3. Ubuntu 18.04 /Debian9にNginxをインストールして構成する方法