PHP開発用にDockerComposeで色々してた

2022/03/23に公開

経緯

今度の仕事でPHPを使うことになるっぽい。
そこでPHP開発用にDockerのコンテナ作ってVSCodeのRemoteContainerで開発したいなと思い、ちょっと環境を作ってました。

方針

TLSを使いたい

開発に使うのに便利なDockerComposeを準備する。
最近はTLS接続が必要になるのでなんとかできるようにしたい。

そのためWebの受付はjwilder/nginx-proxyを使い、ここからリバースプロキシ経由で開発用のPHPが動いているコンテナにつなぎます。

TLSの証明書は.localでまとめて設定しておき、hoge.local, hage.localといったlocalドメインであれば新たに設定は不要とします。
(ただしVIRTUAL HOST設定するので /etc/hosts などの設定は必須となります)

PHP DebugやPHPCSなどを簡単に使いたい

VSCodeで開発する前提としておりまして、該当コンテナに接続した際に、サクッとデバッグ(ブレークポイントの設定などですね)とか、PHPCSによるコードのチェックなどを行えるようにしたいです。

コンテナ作ってGitHubにおきました

そんなわけでなんとなく作っておきました。
内容は稚拙だと思いますので詳しい方は正直この記事見なくていいんじゃないかなって・・・・・

https://github.com/saitoooo/mylocal-nginx-proxy

https://github.com/saitoooo/base_php_container

使い方

大体こんな感じでやってました。

/etc/hosts に.localなホスト名を適当に設定します。
デフォルトは hoge.local で作ってあるのでとりあえずhoge.localで・・・・

127.0.0.1 hoge.local

あとは下記のような感じでやればできるかなと

docker network create shared_net
cd [適当なディレクトリ]
git clone https://github.com/saitoooo/mylocal-nginx-proxy.git -b v1.0
cd mylocal-nginx-proxy
docker-compose up -d
cd ..
git clone https://github.com/saitoooo/base_php_container.git -b v1.0
cd base_php_container
code .

でVSCodeが起動したら、Reopen Containerみたいなやつを選択しましょう。
ビルドからコンテナの起動までやってくれます。ありがたや。

それが終わったら https://hoge.local へブラウザへアクセスすれば、オレオレ証明書の警告が来ます!💦
無視してアクセスすればよくあるphpinfoのページが表示されるかと思います。

ちょっとした説明的なこと

hoge.localじゃないホスト名も作りたい

/etc/hostsに別の hage.local みたいなホスト名書いてくださいな。
そして別のbase_php_containerを作ってweb.envファイルに書いてあるVIRTUAL_HOSTをhoge.localからhage.localに変更してください

新たにdocker-compose upでhagelocalサイトの出来上がりです🤗
もちろん、最初に作ったhoge.localとも同居可能です。

Lima on Dockerでの注意

Lima上にDockerを構築しているとうまくいかないかもしれません。
その場合、mylocal-nginx-proxyのdocker-compose.ymlの書き換えが必要です。
コメントアウトしている部分を外して、その下の行を代わりにコメント化してください。

PHP側のコンテナについて

PHPのコンテナの基本はDockerHubにあるPHP公式イメージを使っています。
https://hub.docker.com/_/php

こちらのphp:8.1-apacheのイメージを使っています。
このイメージに対して、下記のことをおこなっています。

  • LANG=ja_JP.UTF-8 にする
  • mbstring pdo pdo_pgsql gd iconv zip をインストール
  • composerインストール
  • squizlabs/php_codesniffer と friendsofphp/php-cs-fixer をインストール
  • xdebug のインストールと有効化

あと .devcontainer.json によるVSCode使用時における各種拡張の自動インストールと設定をおこなっています。

おまけ

こんなに簡単にできるんだぜー!っていう動画撮ろうと挑戦したけど微妙になった話。

https://youtu.be/oWAAbDTjS48

Discussion