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