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アプリケーション環境の組み合わせにデータベースコンテナを追加してみてください。