LoginSignup
17
17

More than 5 years have passed since last update.

VagrantとcoreOSとdocker-composeでお手軽なPHP開発環境を作る

Last updated at Posted at 2016-10-23

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を指定します。

Vagrantfile
config.vm.box = "coreos-alpha"

coreOSにはDockerが入っていますので、下記ページに従ってdocker-composeをインストールします。
https://docs.docker.com/compose/install/

Vagrantfile
$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を起動します。

Vagrantfile
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を使いました。バーションを変えたい場合はここで変えます。
それぞれ、設定ファイルを書いておくと反映されるようにしてあります。

docker/php/Dockerfile
FROM php:7-apache
COPY ./php.ini /usr/local/etc/php/
docker/mysql/Dockerfile
FROM mysql:5.7
COPY ./my.cnf /etc/mysql/conf.d/

app用とmysql用にコンテナを起動します。MySQLのデータを永続化させるためにmysqldataというのも作ってみましたが、使い方間違っているかもしれません。

docker/docker-compose.yml
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 で確認できるようになります。

docker/docker-compose.yml
app:
    build: ./php
    ports:
      - '8888:80' # <-- Vagrantでは8888番で起動
Vagrantfile
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

ファイルの共有設定もします

docker/docker-compose.yml
app:
  volumes:
      - ./src:/var/www/html
Vagrantfile
  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で丸ごと片付けられるので、ちょっと試してみたいというときは便利ではないでしょうか。

17
17
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
17
17