PHP-FPM および Nginx Docker コンテナーのセットアップ

John Wachira 2023年6月20日
  1. PHP CLI コンテナーのセットアップ
  2. PHP-FPM と NGINX を使用して Web スタックをセットアップする
PHP-FPM および Nginx Docker コンテナーのセットアップ

このチュートリアルでは、Docker でローカルに開発する場合に、PHP、PHP-FPM、および NGINX コンテナーをセットアップする方法について説明します。

ポイント:

  1. コマンドラインでコンテナを構築して実行します。
  2. Docker ファイルとその用途。
  3. コンテナがどのように相互作用するか。

Docker プログラムと Git Bash がデバイスにインストールされていることを確認します。

PHP CLI コンテナーのセットアップ

ソースコードを保存するディレクトリ C:/delft/docker-php/app を作成します。

mkdir -p "C:/delft/docker-php/app"

このチュートリアルでは、公式の PHP イメージを使用します。 以下のコードを実行します。

docker run -d --name docker-php -v "C:/delft/docker-php/app":/var/www php:7.0-cli

これの意味は、

  1. docker run - コンテナを実行します。
  2. -d - バックグラウンドで実行されます (切り離されます)。
  3. --name docker-php - docker-php を指定します。
  4. -v "C:/delft/docker-php/app":/var/www - これにより、Windows ホスト上のディレクトリ C:/delft/docker-php/app/var/ と同期されます wwwコンテナ内。
  5. php:7.0-cli - このイメージを使用してコンテナを構築します。

出力:

$ docker run -d --name docker-php -v "C:/delft/docker-php/app":/var/www php:7.0-cli
Unable to find image 'php:7.0-cli' locally

私たちのマシンにはイメージがないため、Docker は公式レジストリからイメージを取得しようとします。

docker ps -a コマンドを実行して、コンテナーが実行されているかどうかを確認します。

コンテナーは、初期化の直後に実行を停止することに注意してください。 docker run コマンドに -i 引数を追加する必要があります。

docker run コマンドを再度実行する前に、以下のコマンドを実行してください。

docker rm docker-php

上記のコマンドは、最初の docker-php を削除します。再度使用することはできないからです。 -i フラグを指定して docker run コマンドを実行できるようになりました。

docker run -di --name docker-php -v "C:/delft/docker-php/app":/var/www php:7.0-cli
7b3024a542a2d25fd36cef96f4ea689ec7ebb758818758300097a7be3ad2c2f6

docker ps -a コマンドを実行して、コンテナーが実行されているかどうかを確認します。

ログインするには、以下のコマンドを実行します。

winpty docker exec -it docker-php bash

PHP-FPM と NGINX を使用して Web スタックをセットアップする

PHP-FPM および Nginx コンテナーをセットアップする方法について説明します。

NGINX のセットアップ

公式の Nginx イメージを実行するためのコンテナーとして機能するサーバーを取得することから始めます。 docker-compose.yml を作成して、最新の Nginx イメージを実行します。 ポート 80 と 8080 を使用します。

web:
 image: nginx:latest
 ports:
 - "8080:80"

次に、docker-compose up コマンドを実行します。

出力:

nginx

docker-compose.yml ファイルをローカル リポジトリにマウントします。 docker-compose.yml ファイルがあるフォルダー delft を使用します。

web:
    image: nginx:latest
    ports:
        - "8080:80"
    volumes:
        - ./delft:/delft

この時点で、Nginx はフォルダーの存在を認識していません。 これを解決するには、次の site.conf ファイルを使用します。

server {
    index index.html;
    server_name php-docker.local;
    error_log  /var/log/nginx/error.log;
    access_log /var/log/nginx/access.log;
    root /delft;
}

セットアップを有効にする必要があります。 docker-compose.yml ファイルをもう少し変更しましょう。

web:
    image: nginx:latest
    ports:
        - "8080:80"
    volumes:
        - ./delft:/delft
        - ./site.conf:/etc/nginx/conf.d/site.conf

deft フォルダーに index.html を追加して、以下のコードを実行します。

docker-compose up

Nginx が稼働しているはずです。

PHP-FPMを追加

次のステップは、Nginx コンテナーにリンクする公式の PHP7-FPM を取得することです。 更新された docker-compose.yml ファイルは次のようになります。

web:
    image: nginx:latest
    ports:
        - "8080:80"
    volumes:
        - ./delft:/delft
        - ./site.conf:/etc/nginx/conf.d/site.conf
    links:
        - php
php:
    image: php:7-fpm

次に、PHP-FPM コンテナーを使用して PHP ファイルを解釈するように Nginx コンテナーを構成します。 更新された site.conf ファイルは次のようになります。

server {
    index index.php index.html;
    server_name php-docker.local;
    error_log  /var/log/nginx/error.log;
    access_log /var/log/nginx/access.log;
    root /delft;

    location ~ \.php$ {
        try_files $uri =404;
        fastcgi_split_path_info ^(.+\.php)(/.+)$;
        fastcgi_pass php:9000;
        fastcgi_index index.php;
        include fastcgi_params;
        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
        fastcgi_param PATH_INFO $fastcgi_path_info;
    }
}

プログラムをテストしてみましょう。 まず、index.html ファイルの名前を index.php に変更し、内容を次のように変更します。

<?php
echo phpinfo();

docker-compose up コマンドを実行する前に、delft フォルダーを PHP コンテナーにマウントする必要があります。 docker-compose.yml ファイルへの最後の繰り返しは、次のようになります。

web:
    image: nginx:latest
    ports:
        - "8080:80"
    volumes:
        - ./delft:/delft
        - ./site.conf:/etc/nginx/conf.d/site.conf
    links:
        - php
php:
    image: php:7-fpm
    volumes:
        - ./delft:/delft

docker-compose up コマンドを実行すると、以下の画像が生成されます。

phpinfo

これでチュートリアルは終わりです。

著者: John Wachira
John Wachira avatar John Wachira avatar

John is a Git and PowerShell geek. He uses his expertise in the version control system to help businesses manage their source code. According to him, Shell scripting is the number one choice for automating the management of systems.

LinkedIn