phpの開発環境用のdocker-compose



fattyrabbit/php-fpmを利用したローカル開発環境のdocker-compose

全体ソース:https://bitbucket.org/FattyRabbit/php-dev-docker-compose/src/master/

概要:phpの開発(laravelの開発用)のためにlocal環境を作成する目的で、以下を目指しました。

  • 出来る限り軽い
  • 他のバージョンのPhpを同時に動かす

それで選択したのが「nginx」+「php-fpm」の構成しました。

php-fpmのカスタマイズ

元になるphpのfpmは問題点としてListenポートが「9000」固定で複数のfpmを同時に利用できないところが問題でした。その為にphpのfpm(まずは7.3)のDockerfileを改善してContainerを実行する際にポートを設定出来るように修正を加えました。

改善したphp-fpmのソース:
https://bitbucket.org/dockerfile_test/php-fpm/src/master/

nginx

何回かテスト中に問題として出たのがサーバーの設定ファイルの修正があった場合、Dockerfile内でCOPYを利用すると再Buildしても上手く更新されない場合がありましたので、サーバーの管理をvolumesで管理するように設定しました。
これでDockerの再起動や中のデモンの再起動でも設定の変更が反映されるようになりました。

docker-compose.xml
    proxy:
        build: nginx
        container_name: proxy
        build:
          context: .
          dockerfile: docker-nginx/Dockerfile
        volumes:
          - ./etc/logs/nginx:/etc/nginx/logs
          - ./etc/nginx/conf.d:/etc/nginx/conf.d
          - ./etc/nginx/letsencrypt:/etc/letsencrypt
          - ./www:/var/www/
        ports:
          - 80:80
          - 443:443

php-fpm

このではListenのポートを「9001」にしてみました。

docker-compose.xml
  php-7.3:
    build:
      context: .
      dockerfile: docker-php-7.3/Dockerfile
      args:
        LISTEN_PORT: 9001
    container_name: php-7.3
    volumes:
      - ./www:/var/www/
      - ./etc/php/php.ini:/usr/local/etc/php/php.ini

nginxの設定

実際のウェブサーバーでphpを利用する設定です。

/etc/nginx/conf.d/default.conf
   location ~ \.php$ {
        fastcgi_pass    php-7.3:9001;
        fastcgi_index   index.php;
        fastcgi_param   SCRIPT_FILENAME  $document_root$fastcgi_script_name;
        include         fastcgi_params;
    }