Programming

PHPが動くWEBサーバーをDockerで環境構築

ホストPCに開発環境を入れたくない人は、通常DockerやVagrantで環境構築します。
個人的な意見で恐縮ですが、今後VagrantよりDockerの方が流行っていきます。
今回は、DockerでPHPが動くWEBサーバーの仮想環境を構築していきます。

必要な知識

必要な知識としては、docker-composeを使用するので
知らない人は、docker-composeの使い方を調べながらやっていくといいかもしれません。

docker-composeは、インストールしたあと
docker-compose.ymlというファイルを作成して

$ docker-compose up -d

というコマンドを実行してDockerをバックグラウンドで複数立ち上げるのが基本です。
今回の場合は、nginxとphp-fpmのサーバ(コンテナ)が必要になります。

また、docker-compose.ymlではimageやbuildやvolumesという文字が出てきます。
それぞれ以下の意味です。

image: Docker HUBから指定の名前のイメージをインストールする
build: 指定のディレクトリでDockerfileを使用してビルドする
volumes: 永続化したいディレクトリやファイル共有したいホスト側のディレクトリを指定する

ディレクトリの構成

docker-compose.ymlにディレクトリの指定をするので同じディレクトリ構成にするかdocker-compose.ymlを変更するかしないと、勝手に片方変更するとエラーでます。

.
├── data
│   └── html
│       ├── hello.php
│       └── index.php
├── docker-compose.yml
└── web
    └── default.conf

各ファイル

docker-compose.yml

version: "3"
services:
  php7:
    image: "php:7.2-fpm-alpine"
    volumes:
      - "./data/html/:/var/www/html/"
  nginx:
    image: "nginx:alpine"
    ports:
      - "8080:80"
    restart: "always"
    volumes:
      - "./web/default.conf:/etc/nginx/conf.d/default.conf"
    links:
      - "php7"

web/default.conf

server {
    listen       80;
    server_name  _;
    root  /var/www/html;
    charset utf-8;

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

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

data/html/index.php

<?php phpinfo(); ?>

data/html/hello.php

<h1><?php echo "Hello World !!" ?></h1>

使い方

ディレクトリとファイルを配置したあと、以下のコマンドを実行します

$ docker-compose up -d

そうすると、ブラウザで[localhost:8080]がindex.phpに繋がり、phpのバージョンが見れるようになっているはずです。

まとめ

Dockerはimageの取得ではじめ少しダウンロードが長いですが2回目からはダウンロード済みのものを使用するので非常に高速で使い勝手がいいです。

ぜひやってみてください。