docker-compose で PHP の実行環境を作る
PHP の勉強をはじめるにあたって、最初に取り組んだのが実行環境の構築です。 この記事ではそれを振り返ってみます。
そんなことをしなくても
今時は PHP を書いて実行できる Web サービスはいくらでもあるので、 そういう面倒なのはいいから PHP を書いて動かすことだけしたいという人はそっちを当たると良いと思います。 知っている範囲だと Cloud9 や paiza.io なんてのがあります。
ぼくは今後役立つだろうと思ったので、あえて手元に実行環境を作る方を選びました。
前提知識
- Linux はそこそこ触ったことがある
- Docker についてはなんとなく知っているけれど、使ったことはない
つくる環境
- いわゆる LAMP 環境です
- CentOS 7 上に Docker をインストールして使います
- Docker コンテナ上で PHP, Apache, MySQL を動かします
- コンテナの立ち上げには docker-compose を使います
環境構築手順
1. Docker インストール
2017年12月27日現在、サポートされている CentOS のバージョンは 7 です。 6 以下だったら上げときましょう。
CentOS の Docker CE x86_64 をインストールします。
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 インストール
こちらはさくっと終わります。
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. Dockerfile
や docker-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
でアクセスします。
id:root、パスワード:pass でログインできれば成功です。
適当な SQL でも投げてみましょう。
参考文献
環境作成にあたって、以下の記事を参考しました。 各設定の詳しい解説はそちらを参照してください。 また、docker-compose 等のコードも fork して使用させていただいています。