Docker

DockerでNginxとPHPを連携させてサクっと動かす

Docker に少しずつ慣れてきましたが、今回は動的なことをしたいモックサーバを急遽使いたかったので、ローカルの Docker で Nginx と PHP(php-fpm)が動作するコンテナを作成してみました。

それぞれのサーバの要件は以下の通り。

Nginx

コンテナ上では80番ポートで起動する
ローカルのホストOS上では10080番で受ける
コンテナ起動時にconfファイルをマウントする

PHP

コンテナ上では9000番ポートで起動する
Nginxからは9000番ポートにリバースプロキシ
コンテナ起動時にphpファイルをマウントする

Nginx と php-fpm 間は UNIX ドメインソケットでも良かったかも・・・。

ローカルのファイルの準備

以下のようなディレクトリ構成を準備します。

最初はこのくらいシンプルに練習していけばいいと思います。

Nginxの設定

今回は、docker-compose.yml に設定を定義して運用を楽にしてみます。

まずは、Nginx の設定から。

イメージは nginx:1.13.5-alpine を使用します。

ポイントは depends_on で php のコンテナと連動させている部分でしょうか。

この web コンテナを起動すると php のコンテナも一緒に起動します。

default.conf ではホスト名に何が指定されても受け入れるようにしているくらいで、他には特別は設定はしていません。

PHPの設定

次に PHP の設定です。

イメージは php:7.1.9-fpm-alpine を使用します。

site/html 配下に index.php などの PHP ファイルを配備して、コンテナ側の /var/www/html にマウントされます。

また、もし PHP の設定で上書きしたい項目がある場合は site/conf/php.ini に定義をして、コンテナ側の /usr/local/etc/php/php.ini にマウントします。

コンテナの起動

docker-compose コマンドを使います。

これで、web と php のコンテナが起動します。

以下の docker または docker-compose コマンドの ps オプションで確認します。

両方のコンテナが起動していれば完了です。

あとは、以下の URL にアクセスして動作確認してみましょう。

http://localhost:10080/

まとめ

Docker で Nginx と PHP を連動して動かす方法を紹介しました。

今回はシンプルな構成でしたが、以下のような開発時のちょっとしたモックを作る際に利用できます。

リクエストパラメータを受けて、そのパラメータを加工したレスポンスを返す

遷移先のサーバが別の文字コードを使っている場合の文字化けチェック

前者は外部の API サーバとまだ疎通できない場合に、自前でモックとして代用するようなケースですね。

後者は、外部のサービスの遷移先にパラメータを渡すけど外部のサーバの文字コードが違う場合、そして戻ってくる際も別の文字コードでパラメータが連携してくるパターンのような面倒な場合の代用ですね。

下手に自サイト内で別の文字コードを返すようなページを用意するよりも安全で確実です。