HOWTO · PHP

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

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

このページの内容

このチュートリアルでは、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

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