初心者|docker-compose|PHP+ Nginx + MySQL


docker-compose.ymlファイルだけでphp環境を簡単に構築できないかと思い、調べて見ました。(残念ながらdocker-compose.ymlファイルだけではダメでしたが...)

リスペクトな記事

この記事を作成するにあたり、参考にさせていただいた記事です。
本件、同様の既存記事を踏襲する内容となります。

DockerによるPHP開発環境構築(PHP + MySQL + Nginx)
Docker + Nginx + PHP-FPM なら40秒くらいで環境を準備できる docker-compose が楽しくなってきました。

したいこと

dockerを使って、ローカル環境でphpを使いたい

したこと

1) docker-compose.yml の用意

下記、コピペでOKです

docker-compose.yml
version: "3"
services:
  db:
    image: mysql:5.7
    volumes:
      - ./db/mysql:/var/lib/mysql
    restart: always
    environment:
      MYSQL_ROOT_PASSWORD: root_pass_fB3uWvTS

  phpmyadmin:
    image: phpmyadmin/phpmyadmin:latest
    restart: always
    ports: ["8888:80"]
    depends_on: ["db"]

  php:
    image: php:7.4-fpm
    volumes:
      - ./nginx/html:/usr/share/nginx/html
      - ./php/php.ini:/usr/local/etc/php/conf.d/php.ini
    depends_on: ["db"]

  nginx:
    image: nginx:latest
    volumes:
      - ./nginx/conf.d/default.conf:/etc/nginx/conf.d/default.conf
      - ./nginx/html:/usr/share/nginx/html
    restart: always
    ports: ["8080:80"]
    depends_on: ["php"]

2)とりあえず docker-compose up

docker-compose.ymlファイルのあるディレクトリでdocker-compose up -dしてみてください。エラーが出るはずです。

エラーが出たことを確認しましたらdocker-compose downで停止してください。

エラーが出た理由はnginx:サービスで使う default.conf ファイルがクライアント側に存在しないためです。

default.conf ファイルを用意する必要があります

3)【重要】 nginx用のdefault.confファイルの用意

default.conf ファイルを用意します。

default.conf
server {
    listen       80;
    server_name  localhost;
    root   /usr/share/nginx/html;
    index  index.php index.html;

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

    location ~ [^/]\.php(/|$) {
        fastcgi_pass php:9000;
        fastcgi_index index.php;    
        fastcgi_param SCRIPT_FILENAME  $document_root$fastcgi_script_name;
        include       fastcgi_params;
    }
}

4) default.confファイルの保存先

上記の工程(2)でdocker-compose up -dをした後であれば、docker-compose.ymlファイルのあるディレクトリにnginx php dbという3つのディレクトリが生まれているはずです。

ディレクトリnginx / conf.dの中にdefault.confファイルを保存してください。

「default.conf」というディレクトリが先に存在している場合は、削除してください(入れ替えてください)

5)もう一度 docker-compose up

再度にdocker-compose up -dしてください。今回は上手く立ち上がったのではないでしょうか?

6)確認してみる

動作確認のため、ディレクトリnginx / htmlの中にindex.phpファイルをおいてください。(index.phpファイルの内容は何でも結構です)

index.phpの例
<?php
echo phpinfo();

ブラウザでhttp://localhost:8080/へアクセスして表示されれば確認完了です


補足

データベースとphpMyAdminは不要です

上記の docker-compose.yml には個人的な都合でmysqlとphpmyadminを入れておりますが、php環境を作る目的だけであれば不要なものです。
よってサービスdb:phpmyadmin:は削除いただいてOKです。ただし、削除する場合はサービスphp:内にあるdepends_on: ["db"]削除することを忘れないように。

もし、phpMyAdminへアクセスする場合はhttp://localhost:8888/です。
ユーザー名root、パスワードroot_pass_fB3uWvTSでログインできるはずです。

nginx−default.conf の記述について

こちらの参考サイトがとても勉強になりました。

参考サイト:nginx連載4回目: nginxの設定、その2 - バーチャルサーバの設定
参考サイト:nginx連載5回目: nginxの設定、その3 - locationディレクティブ

nginx と PHP-FPM の関係性について

こちらの参考サイトがとても勉強になりました。

参考サイト:nginx と PHP-FPM の仕組みをちゃんと理解しながら PHP の実行環境を構築する

FastCGIって何?

こちらの参考サイトがとても勉強になりました。

参考サイト:調べなきゃ寝れない!と調べたら余計に寝れなくなったソケットの話