どうも、きょー。(@kyohei_0801_dmz)です。
メリークリスマス!と言いたいところですが、これ26日に投稿されているらしいです。
街はもうお正月モードになっちゃいましたね。でもクリスマスプレゼント(技術書)ほしいです(スッ> http://amzn.asia/7QmZd6g)。

さて、今回はDockerを使ってPHPの開発環境を構築していきたいと思います。
自分の環境を汚さず構築でき、ほぼコピペで出来ちゃいます。
DBと連携する設定は書いていませんが、これを応用すればできることでしょう。
Let's try!

Docker is 何?

そもそもDockerを知らない人もいらっしゃると思うので説明したいと思います。
そんなの知っているって人はこちらへ。

DockerはDocker Inc.によって開発された仮想化ソフトウェアです。
仮想化ソフトウェアといえば、VirtualBoxをはじめとしたソフトウェア上でOSを動かすものをイメージされる方が多いと思います。
しかしながらDockerはコンテナ技術を採用しており、ハードウェア資源の消費や性能劣化が小さくなっています。
便利な機能も豊富です。ここではDockerイメージ、Dockerfile、Docker Composeについて説明します。

Dockerイメージ

あるシステム(例えばDB)を構築したものです。Dockerイメージが配布されていることもあり、作業が短縮できることもあります。これを基にコンテナ(ひとつのシステム)を起動します。ひとつのDockerイメージから複数のコンテナを起動することも可能です。

Dockerfile

Dockerのコマンド群をひとまとめにし、実行させるようにしたファイルです。記述が同じであれば他のDocker環境でも動作するので、環境の再現性も高いです。

Docker Compose

コンテナ同士の連携やホストOSからファイルの参照を実現するものです(その他にもいろいろな設定ができます)。例えば、MySQLのコンテナを起動してからWebAppを起動したり、ホストOSのあるフォルダの中身をデータファルダとして使用したりできます。yaml形式で設定します。

動作確認環境

動作を確認した環境を示しておきます。Dockerは最新バージョンで問題なさそうです。

  • マシン:MacBook Pro macOS Mojave バージョン 10.14.1
  • Dockerバージョン:18.09.0

フォルダ構造

/任意のフォルダ名
├─ docker-compose.yml
├─ files
│    └ php
│        ├─ Dockerfile
│        └─ default.conf
└─ www
└─ index.php

docker-composeの作成

おまたせしました。ここから構築をしていきます。まずはdocker-composeから。
docker-compose.ymlを作成して以下をコピペしてください。
# docker-compose.yml
version: '3'
services:
  web:
    build: ./files/php
    ports:
      - "3000:80"
    volumes:
      - ./www:/var/www/html
versionは3を使っているので固定です。servicesで起動するDockerイメージを指定します。webはラベルです。わかりやすい名前をつけてあげましょう。buildはDockerfileがあるディレクトリを指定します。DockerfileからDockerイメージを作り、コンテナを起動します。portsはいわゆるポートフォワーディングです。ホストOSの3000番ポートとコンテナの80番ポートを接続します。volumesはホストOSのフォルダとコンテナのフォルダを共有化(マウント)します。

Dockerfileの作成

Dockerfileを作成します。※このファイルに拡張子はありません(重要)
以下をコピペしてください。
FROM php:7.1-apache
RUN apt-get update -y \

    && apt-get clean
COPY default.conf /etc/apache2/sites-available/

FROMは基となるDockerイメージ(ベース・イメージ)を指定します。はじめからphpが使えるようなイメージが配布されているのでそれを使います。
RUNはそのイメージ上で走らせるshellコマンドです。一応アップデートしてあります。
COPYはapache(phpを走らせるためのサーバアプリケーション)の設定ファイルをコンテナ上のフォルダにコピーしています。

default.confの作成

default.confを作成します。これは前述したapacheの設定ファイルです。
以下をコピペしてください。
<VirtualHost *:80>
    ServerAdmin webmaster@localhost
    DocumentRoot /var/www/html
    ErrorLog ${APACHE_LOG_DIR}/error.log
    CustomLog ${APACHE_LOG_DIR}/access.log combined
    EnableSendfile off
</VirtualHost>
これの説明は今回の記事の趣旨から外れているので省略します。気になる人は「apache 設定ファイル」とかで調べるとたくさん記事が出てくるはずです。

起動と終了

  • 起動
    初回だけはちょっと時間がかかります。
    カレントディレクトリをdocker-compose.ymlがあるディレクトリにし、ターミナルで以下のコマンドを実行してください。
    $ docker-compose up -d
  • 終了
    $ docker-compose down

終わりに

いかがでしたか?PHPの環境構築ってすごく面倒なんですけど、これならサクッと作れるんじゃないかなーと思います。Dockerについてはほとんど初心者なので間違いがあれば指摘もお待ちしています。あと、技術書ください。待ってます(笑)。

参考

Twitterでフォローしよう

おすすめの記事