ikasama over technology

忘れたくないことを忘れないために

docker-compose で PHP の実行環境を作る

PHP の勉強をはじめるにあたって、最初に取り組んだのが実行環境の構築です。 この記事ではそれを振り返ってみます。

そんなことをしなくても

今時は PHP を書いて実行できる Web サービスはいくらでもあるので、 そういう面倒なのはいいから PHP を書いて動かすことだけしたいという人はそっちを当たると良いと思います。 知っている範囲だと Cloud9paiza.io なんてのがあります。

ぼくは今後役立つだろうと思ったので、あえて手元に実行環境を作る方を選びました。

前提知識

  • Linux はそこそこ触ったことがある
  • Docker についてはなんとなく知っているけれど、使ったことはない

つくる環境

  • いわゆる LAMP 環境です
  • CentOS 7 上に Docker をインストールして使います
  • Docker コンテナ上で PHP, Apache, MySQL を動かします
  • コンテナの立ち上げには docker-compose を使います

環境構築手順

1. Docker インストール

docs.docker.com

2017年12月27日現在、サポートされている CentOS のバージョンは 7 です。 6 以下だったら上げときましょう。

CentOS の Docker CE x86_64 をインストールします。 f:id:ikasamak503:20171227202139p:plain

Docker のインストールに必要なパッケージ。なかったら先にインストールしましょう。

$ sudo yum install -y yum-utils \
  device-mapper-persistent-data \
  lvm2

Docker CE のリポジトリを追加します。

$ sudo yum-config-manager \
    --add-repo \
    https://download.docker.com/linux/centos/docker-ce.repo

Docker をインストール。

$ sudo yum install docker-ce

docker -v でバージョンが表示されたらインストール成功です。

$ docker -v
Docker version 17.03.1-ce, build c6d412e

ちなみに、docker を動かすためには root 権限が必要です。

$ docker images
Got permission denied while trying to connect to the Docker daemon socket at unix:///var/run/docker.sock: Get http://%2Fvar%2Frun%2Fdocker.sock/v1.27/images/json: dial unix /var/run/docker.sock: connect: permission denied

それが面倒なら、docker コマンドを実行するユーザを docker グループに所属させましょう。

$ sudo gpasswd -a <username> docker

2. docker-compose インストール

docs.docker.com

こちらはさくっと終わります。

sudo curl -L https://github.com/docker/compose/releases/download/1.18.0/docker-compose-`uname -s`-`uname -m` -o /usr/local/bin/docker-compose
chmod +x /usr/local/bin/docker-compose

3. Dockerfiledocker-compose.yml の準備

ぼくが使っているものは以下にあります。これをクローンしても動きます。たぶん。

https://github.com/ikasam/docker-lamp

  • docker-compose.yml
version: '2'
services:
  mysql:
    build: ./mysql
    environment:
      MYSQL_ROOT_PASSWORD: pass
    volumes:
      - db:/var/lib/mysql
  php:
    build: ./php
    ports:
      - '8080:80'
    volumes:
      - ./html:/var/www/html
    depends_on:
      - mysql
volumes:
  db:
  • mysql/Dockerfile
FROM mysql:5.7
COPY ./charset-utf8.cnf /etc/mysql/conf.d/
  • php/Dockerfile
FROM php:7-apache
COPY php.ini /usr/local/etc/php/
RUN apt-get update \
  && docker-php-ext-install pdo_mysql mysqli mbstring

4. コンテナの起動

docker-compose.yml があるディレクトリ上で、以下のコマンドを実行します。

$ docker-compose up -d

5. 動作確認

phpMyAdmin を置いて、PHP の動作と MySQL との連携を確かめます。

$ cd html/
$ wget https://files.phpmyadmin.net/phpMyAdmin/4.4.13.1/phpMyAdmin-4.4.13.1-all-languages.tar.gz
$ tar zxf phpMyAdmin-4.4.13.1-all-languages.tar.gz
$ mv phpMyAdmin-4.4.13.1-all-languages myadmin
$ cd myadmin/
$ cp config.sample.inc.php config.inc.php

config.inc.php に書いてある接続先を、localhost から mysql に変更します。

$cfg['Servers'][$i]['host'] = 'mysql';

ブラウザでアクセスします。

今回の例では port を 8080 にしているので、http://<IPアドレス>:8080/myadmin でアクセスします。

f:id:ikasamak503:20171228022609p:plain

id:root、パスワード:pass でログインできれば成功です。

f:id:ikasamak503:20171228022443p:plain

適当な SQL でも投げてみましょう。

参考文献

環境作成にあたって、以下の記事を参考しました。 各設定の詳しい解説はそちらを参照してください。 また、docker-compose 等のコードも fork して使用させていただいています。

qiita.com

qiita.com