docker-composeでPHP環境を作成してみた

ちょっと仕事でPHPを使いそうな気がしてるので、その開発環境用にと思い数年ぶりにPHPの環境を作成。 せっかく作るなら、dockerとか利用して少しはモダンにやろうと思って、UbuntuにDockerをインストールしてからDocker-comporse経由でphp_infoを表示するところまでやってみたのでそのメモです。

Dockerのインストール

この辺はDockerの公式サイトの手順通りにやったので、すんなりといきました。

docs.docker.com

インストールコマンド群
$ sudo apt-get update
$ sudo apt-get install apt-transport-https ca-certificates curl software-properties-common
$ curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -
$ sudo apt-key fingerprint 0EBFCD88
$ sudo add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable"
$ sudo apt-get update
$ sudo apt-get install docker-ce
dockerのインストールの確認
docker -v

docker-comporseのインストール

この辺はDockerの公式サイトの手順通りにやったので、すんなりといきました。

docs.docker.com

インストールコマンド群
$ curl -L https://github.com/docker/compose/releases/download/1.15.0/docker-compose-`uname -s`-`uname -m` > /usr/local/bin/docker-compose
$ sudo chmod +x /usr/local/bin/docker-compose

※ /usr/local/bin でPermision errorになった場合には sudo -i でrootユーザに変更してから、curl コマンドを行う

docker-comporseのインストールの確認
docker-comporse -v

ここまで、docker環境が出来たので、次にnginx + PHP環境をDocker上に作成していく。

今回のフォルダ構成
├── docker
│   ├── docker-compose.yml
│   ├── nginx
│   │   ├── Dockerfile
│   │   └── server.conf
│   └── phpfpm
│       └── Dockerfile
└── public
    └── index.php

docker-compose.yml の作成

nginxのコンテナとPHPのコンテナ(webというコンテナ名にしてる)の起動手順などを記載しておく

version: '2'
services:
  nginx:
    build: ./nginx
    ports:
      - "80:80"
    volumes:
      - ../public:/var/www/html
    links:
            - web:web
    container_name: nginx

  web:
    build: ./phpfpm
    volumes:
      - ../public:/var/www/html
    container_name: web

実際の各コンテナのbuildの設定は、各コンテナのフォルダを用意しDockerファイルに設定する

nginxのDockerファイル

FROM nginx
ADD server.conf /etc/nginx/conf.d/server.conf

nginxのポートの設定等の設定ファイルもDockerファイルと同じフォルダに配置する

server {
    listen 80 default;
    server_name _;
    root /var/www/html;
    index index.php index.html index.htm;
    charset utf-8;

    access_log off;
    error_log off;

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

    location ~ \.php$ {
        fastcgi_pass web:9000;
        fastcgi_index index.php;
        fastcgi_param SCRIPT_FILENAME  $document_root$fastcgi_script_name;
        include       fastcgi_params;
    }
}

phpのDockerファイル

FROM php:fpm

実行される、index.php ファイルを用意する

<?php
phpinfo();

ここまで、起動する準備が完了。

ここからは、 docker-compose.yml が配置されてるディレクトリで実行する

dockerコンテナのイメージを作成する

 docker-compose build

※ build時じゃないと、DockerファイルのADDコマンドとかが動作しないので、buildしておく

dockerコンテナの実行

 docker-compose up -d

起動中のdockerコンテナ確認

 docker-compose ps

起動中のdockerコンテナ停止と削除

 docker-compose down

今回のサンプルのソース

github.com