tl;dr
リポジトリを作ったので、ここからcloneしてvagrantを起動するだけで試せます。
https://github.com/qube81/docker-compose-lamp
$ git clone https://github.com/qube81/docker-compose-lamp.git
$ vagrant up
# ...初回は結構待ちます...
# phpinfoが表示されます
http://localhost:8888
# docker/srcがドキュメントルートとsyncしているので、変更が反映されます
$ vim docker/src/index.php
# いらなくなったらvagrantで丸ごと消せます
$ vagrant destroy
dockerを直接使うとイメージが色々インストールされて容量を食ったり、設定とか面倒なので、色々試して終わったらVagrant destroy
でポイ、みたいなお手軽環境を作ってみました。上のリポジトリから使えるので、簡単なメモだけ書きます。
(※追記)
MacでVagrantのnfsマウントでエラーが出る場合があるようです。
こちら http://qiita.com/nagomu/items/57f4b5297b7841781891 の記事で解決しました。
環境
- Vagrant 1.8.6
- VirtualBox 5.0.28
多少古くても動くと思います。
要点のメモ
Vagrant
vagrantのboxにcoreOSを指定します。
config.vm.box = "coreos-alpha"
coreOSにはDockerが入っていますので、下記ページに従ってdocker-composeをインストールします。
https://docs.docker.com/compose/install/
$get_compose = <<-'EOF'
curl -L "https://github.com/docker/compose/releases/download/1.8.1/docker-compose-$(uname -s)-$(uname -m)" > ~/docker-compose
sudo mkdir -p /opt
sudo mkdir -p /opt/bin
sudo mv ~/docker-compose /opt/bin/docker-compose
sudo chown root:root /opt/bin/docker-compose
sudo chmod +x /opt/bin/docker-compose
EOF
config.vm.provision "shell", inline: $get_compose
最後に、docker-composeを起動します。
config.vm.provision "shell", inline: "docker-compose -f /tmp/docker/docker-compose.yml up -d", run: "always"
docker-compose
dockerが公式に配布しているPHPやMySQLのイメージがありますので、そのまま使っちゃいます。
https://hub.docker.com/_/php/
https://hub.docker.com/_/mysql/
今回は7-apacheと5.7を使いました。バーションを変えたい場合はここで変えます。
それぞれ、設定ファイルを書いておくと反映されるようにしてあります。
FROM php:7-apache
COPY ./php.ini /usr/local/etc/php/
FROM mysql:5.7
COPY ./my.cnf /etc/mysql/conf.d/
app用とmysql用にコンテナを起動します。MySQLのデータを永続化させるためにmysqldataというのも作ってみましたが、使い方間違っているかもしれません。
services:
mysqldata:
image: busybox
container_name: docker-mysqldata
volumes:
- /var/lib/mysql
mysql:
build: ./mysql
container_name: docker-mysql
environment:
MYSQL_ROOT_PASSWORD: pass
volumes_from:
- mysqldata
app:
build: ./php
container_name: docker-app
depends_on:
- mysql
ポートフォワーディング
dockerのappコンテナを80番で起動し、coreOS(Vagrant)の8888番で受けるようにしました。
さらに、ホストマシンでも8888で起動できるようにそのまま流します。
これで、ホストマシンで http://localhost:8888 で確認できるようになります。
app:
build: ./php
ports:
- '8888:80' # <-- Vagrantでは8888番で起動
config.vm.network "forwarded_port", guest: 8888, host: 8888 # <-- Vagrantはそのまま横流し
また、MySQLについては一発で入る設定が難しかったので一旦以下のようにして入ります
# coreOSにSSHする
vagrant ssh
# dockerのコマンドでログインします
core@localhost ~ $ docker exec -it docker-mysql mysql -u phpuser -p phpapp
Enter password:(phppass)
また、appのコンテナからmysqlのコンテナへは'mysql'というホスト名で繋ぐことができます
core@localhost ~ $ docker exec -it docker-app bash
mysql -h mysql -u phpuser -p phpapp
Enter password:(phppass)
Synced Folder
ファイルの共有設定もします
app:
volumes:
- ./src:/var/www/html
config.vm.synced_folder "./docker", "/tmp/docker", type: "nfs"
以上の設定により、docker/src
に置いたファイルはcoreOSの/tmp/docker/src
となり、さらにDockerコンテナの/var/www/html
に同期されます。
後片付け
コンテナを起動しているcoreOSごと消すことができます。
vagrant destroy
まとめ
Vagrantとdocker-composeを使ってお手軽なPHP開発環境を作成する雛形について書きました。
Dockerの公式イメージにはfpm版のPHPやpostgress、wordpressといったものもありますので、簡単に差し替えられると思います。vagrant destroyで丸ごと片付けられるので、ちょっと試してみたいというときは便利ではないでしょうか。