<Docker>最小構成!Nginx+PHPを構築する(phpinfo)

Docker
この記事が対象とする環境
ホスト(HOST) ※実行マシン
Windows
Docker Desktop
ゲスト(GUEST)※Dockerコンテナ
nginx v1.25.2
PHP v8.2.9-fpm

PHPをNginxのFastCGIで動かす

PHPをNginxのFastCGIで動かし、phpinfo()でPHP情報を表示させる環境をDockerで作成します。WEBサーバーにApacheを使用する場合はまた違った構成を作成する必要があります。

PHPを最小限の構成で動かすための設定となりますので超シンプルですが、nginxのdefault.confの記述で苦労するケースもあるかと思います。

他の要素を入れていない最小構成となりますので参考になれば幸いです。

Docker設定

index.phpをdocker-composeコマンドでdockerコンテナに配置しています。

フォルダ構成

your root/
|-- compose.yaml
|-- app/
|    `-- index.php
`-- nginx/
   `-- default.conf

compose.yaml

phpイメージはfpm版を使用します。php-fpm(FastCGI Process Manager)はphpをCGIとして動作させるためのものです。 phpにはCGI版とモジュール版があり、nginxはプロセス常駐できないためCGI版を使用し、Apacheではモジュール版を使用するのが一般的です。

your root\compose.yaml

services:
  #PHP
  php:
    #イメージ+バージョン ※latestを常に最新が適用されるが意図しない挙動になる可能性あり
    image: php:8.2.9-fpm
    #コンテナ名
    container_name: php
    volumes:
        #ソース(ローカルフォルダ:コンテナフォルダ)
        - ./app/:/var/www/html
  #WEBサーバー
  nginx:
    #イメージ+バージョン ※latestを常に最新が適用されるが意図しない挙動になる可能性あり
    image: nginx:1.25.2
    #コンテナ名
    container_name: nginx
    #ポート(外部ポート:内部ポート)
    ports:
      - 8080:80
    volumes:
      #nginx設定ファイル(ローカルフォルダ:コンテナフォルダ)
      - ./nginx/default.conf:/etc/nginx/conf.d/default.conf

index.php

your root\app\index.php

<?php
	echo phpinfo();
?>

default.conf

your root\nginx\default.conf

server {
    listen       80;
    listen  [::]:80;
    server_name  localhost;

    root /var/www/html;
    index index.html index.htm index.php;

    location / {
        try_files $uri $uri/ /index.php$is_args$args;
        index index.html index.htm index.php;
    }

    location ~ \.php$ {
        root /var/www/html;
        fastcgi_pass   php:9000;
        fastcgi_index  index.php;
        fastcgi_param  SCRIPT_FILENAME  $document_root$fastcgi_script_name;
        include        fastcgi_params;
    }
}

Docker起動

初回のイメージダウンロードを含めると20秒くらい。2回目以降は1秒くらいで起動します。

docker-compose up -d
[+] Running 19/19
 ✔ nginx 7 layers [⣿⣿⣿⣿⣿⣿⣿]   0B/0B Pulled     7.6s
   ✔ 360eba32fa65 Pull complete                   2.8s
   ✔ c5903f3678a7 Pull complete                   3.9s
   ✔ 27e923fb52d3 Pull complete                   3.9s
   ✔ 72de7d1ce3a4 Pull complete                   4.0s
   ✔ 94f34d60e454 Pull complete                   4.0s
   ✔ e42dcfe1730b Pull complete                   4.0s
   ✔ 907d1bb4e931 Pull complete                   4.0s
 ✔ php 10 layers [⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿]   0B/0B Pulled  13.7s
   ✔ 52d2b7f179e3 Pull complete                   5.1s
   ✔ 635676b59bff Pull complete                   5.1s
   ✔ 08dbc2d7054b Pull complete                   9.2s
   ✔ 8748b1b28b49 Pull complete                   9.2s
   ✔ b04d8af66928 Pull complete                   9.3s
   ✔ 69144a61d337 Pull complete                   9.3s
   ✔ a01221eef26d Pull complete                  10.0s
   ✔ ae47ae2f8471 Pull complete                  10.0s
   ✔ 20996512645c Pull complete                  10.0s
   ✔ 9efa77f63891 Pull complete                  10.0s
[+] Running 3/3
 ✔ Network yourroot_default  Created              0.0s
 ✔ Container nginx           Started              0.8s
 ✔ Container php             Started              0.7s

Webサーバー接続確認

ブラウザを起動し、URL「http://localhost:8080/」に接続するとPHP情報が表示されます。

Docker停止

docker-compose down
[+] Running 3/3
 ✔ Container nginx           Removed     0.5s
 ✔ Container php             Removed     0.4s
 ✔ Network yourroot_default  Removed     0.2s

札幌在住エンジニア。JavaやPHPやWordPressを中心とした記事が中心です。

【SE歴】四半世紀以上
【Backend】php / java(spring) / c# / AdobeFlex / c++ / VB / cobol
【Frontend】 vue.js / jquery他 / javascript / html / css
【DB】oracle / mysql / mariadb / sqlite
【infrastructure】aws / oracle / gcp
【license】aws(saa-c03) / oracle master / XML Master / Sun Certified Programmer for the Java 2 Platform 1.4

Nobelをフォローする
Docker
Nobelをフォローする

コメント

タイトルとURLをコピーしました