情シスは何度でも甦るさ。

OracleDB/Ruby好きの情シス部員がお送りします

初めてDocker触ってwordpressの開発環境を作るまで

前回、Dockerを使ってwordpressの動作環境は作れた。 ryoben.hateblo.jp

じゃ、次は開発環境を作りましょう。

開発環境とは

  • ローカルのPC上(MAC)でソースを編集できる
  • ソース編集したらすぐブラウザ上で変更を確認できる

方法検討

Docker-Toolboxは、MAC(Windows)=>VM=>Dockerコンテナ(WordPress)という三段構え。

なので、MAC上でWordPressのソースを直接いじるってことは、VMをスルーしてコンテナの中のファイルを触る必要がある。
そこで、前回の課題のデータの永続化という話が出てくる。

Docker runコマンドのオプションで、 −v [ホストディレクトリ]:[コンテナディレクトリ] とすると、ホスト(ここではVM)のディレクトリをコンテナ上にマウントすることができる。
で、さらに、Docker-Toolboxはデフォルトで、MACの /Users ディレクトリをVM上にマウントする。 (winだとC:\Users)

ということで、MACの/Userディレクトリ配下にwordpressのソースを置いて、それをVM経由して、Dockerコンテナにマウントすると、MACのソースをいじる=コンテナのソースをいじる。ということになる。

やってみる

wordpressのソースがどこにあるか確認

Dockerfileを見るに、
/var/www/html にあるみたい。(/usr/src/wordpressにもあるみたいだけど・・・)
コンテナにbashで入って、確認してみる。

docker exec -it wordpress bash

cd
/var/www/html

ls
index.php  wp-blog-header.php    wp-cron.php    wp-mail.php
license.txt  wp-comments-post.php  wp-includes    wp-settings.php
readme.html  wp-config-sample.php  wp-links-opml.php  wp-signup.php
wp-activate.php  wp-config.php         wp-load.php    wp-trackback.php
wp-admin   wp-content        wp-login.php   xmlrpc.php

あるある。

WordPressのソースをローカルにコピーする

このソース達を、ローカルにコピーしないとローカルで編集できない。 で、wordpressのDockerfileには、もともとこの/var/www/html にVOLUME指定がされている。
これは、何かというと、ホストのディレクトリを指定しないけど、ホスト上にデータを永続化してねっていう意味。
で、どこに永続化してるかというと、docker inspectコマンドで確認できる

docker inspect wordpress
〜〜〜色々表示ある
"Mounts": [
    {
        "Name": "eff35da0504f6b7892b4b1f2ee9526784749d0f6028c8d459bcc908874ca0a3b",
        "Source": "/mnt/sda1/var/lib/docker/volumes/eff35da0504f6b7892b4b1f2ee9526784749d0f6028c8d459bcc908874ca0a3b/_data",
        "Destination": "/var/www/html",
        "Driver": "local",
        "Mode": "",
        "RW": true
    }
〜〜〜

このMountsのSourceの場所が、VM上のディレクトリ。

コンテナの/var/www/html
= VMホストの /mnt/sda1/var/lib/docker/volumes/eff35da0504f6b7892b4b1f2ee9526784749d0f6028c8d459bcc908874ca0a3b/_data

VMにログインする

docker-machine ssh default

でもって、先ほどの、ディレクトリに移動しようとするが、エラーになる。 /mnt/sda1/var/lib/docker/volumesの権限が足りねえ

ls -la
drwx------   11 root     root          4096 Sep 21 14:25 volumes

権限追加する。

cd /mnt/sda1/var/lib/docker
sudo chmod 755 volumes

ls -la
drwxr-xr-x   11 root     root          4096 Sep 21 14:25 volumes

これで、OK。
中身を除く。

cd volumes/eff35da0504f6b7892b4b1f2ee9526784749d0f6028c8d459bcc908874ca0a3b/_data/

ls
index.php             wp-config-sample.php  wp-login.php
license.txt           wp-config.php         wp-mail.php
readme.html           wp-content/           wp-settings.php
wp-activate.php       wp-cron.php           wp-signup.php
wp-admin/             wp-includes/          wp-trackback.php
wp-blog-header.php    wp-links-opml.php     xmlrpc.php
wp-comments-post.php  wp-load.php

あるある。

で、MAC側にディレクトリ作って、さっきのファイル達をコピーする。

mkdir -p  /Users/ryoben/dev/docker/wordpress/
cp -r /mnt/sda1/var/lib/docker/volumes/eff35da0504f6b7892b4b1f2ee9526784749d0f6028c8d459bcc908874ca0a3b/_data /Users/ryoben/dev/docker/wordpress/

ローカルにやってきた。

f:id:ryoben:20150924014226p:plain

コンテナに、ローカルのディレクトリをマウントする

今動かしてたコンテナは用無しなので、さよなら

docker stop wordpress

ローカルのディレクトリをマウントするコンテナを立ち上げる

docker run --name wordpress2 --link mysql -p 8080:80 -v /Users/ryoben/dev/docker/wordpress:/var/www/html -d wordpress

nameオプションで、名前かぶるとエラーになるので、名前をwordpress2にしてます。同じ名前にしたい場合は、先に

docker rm wordpress

を実行して、コンテナを削除しとくこと。

これで、再度ブラウザで、192.168.99.100:8080 にアクセスすると、wordpressの画面が開いた。

確認

ほんとにローカルのファイル見てんのか?って、気になったので、ローカルのindex.phpの内容を、phpinfo(); に変えてみる。

f:id:ryoben:20150924014710p:plain

確かに変わってる。

感想

  • とりあえず、vagrantで作ってた開発環境を置き換えることはできそう。
  • ただ、vagrantを置き換えるメリットは、あんまり感じないのが正直なところ。開発環境だけ置き換えるってのはメリット少ないのかな。いや、早いけど。
  • 他の端末にも開発環境を展開する時は、docker以外に、ローカルにフォルダを作って、gitでソース持ってきて、コマンド叩くって手順が必要。もっといい方法があるんだろうな、きっと。
  • mysqlのデータを本番から持ってきてimportするとかは、docker cpとかでファイルコピーして、コンテナ内でmysqlコマンドでサクッとできんのかな。今度確かめる。
  • シルバーウィーク終わってもた・・・。