この投稿は、wordpress のプラグイン開発環境を docker 上に構築することを題材として、boot2docker および docker のネットワークや共有ディスクの理解を深めることを目的としています。
boot2docker 上で docker コンテナを稼働させるときに、開発用PC から docker コンテナまでの間に距離を感じている方は、この 2つの架け橋 によって、グッと距離が近くに感じられるようになるハズです。
なお、docker や boot2docker のインストール方法などについては記載しておりません。
開発用PC と dockerコンテナ の距離感
やりたいことはシンプルなのですが、開発用PC と dockerコンテナ の間に仮想化が2階層はいってくると、とたんに距離を感じてしまいます。
サーバー構成と要件
- wordpress が動作する Webサーバー 1台
- wordpress のデータを保持する DBサーバー 1台
- 上記の Webサーバー と DBサーバー を連携させます。
- 開発用PC から wordpress のサイトにブラウザでアクセスできること。
- 開発用PC から wordpress のプラグイン関連ファイルの読み書きできること。
やりたいことは、とてもシンプルです!
ところが、いざ docker で環境を構築しようとすると…。
構築する環境
- Webサーバー と DBサーバー は、dockerコンテナ として構築します。
- 開発用PC は Linux ではないため、boot2docker を使用します。
こうなると、開発用PC から dockerコンテナ まで、少し距離を感じてきませんか?
- 開発用PC のブラウザから、どうやって dockerコンテナ内の wordpress にアクセスしようか…。
- 開発用PC から、どうやって docker コンテナ内の plugins フォルダを読み書きしようか…。
さあ、橋を架けましょう
次のたった2行の docker コマンドだけで、環境構築が完了してしまいます。
boot2docker$ docker run --name some-mysql -e MYSQL_ROOT_PASSWORD=mysecretpassword -d mysql
boot2docker$ docker run --name some-wordpress --link some-mysql:mysql -d -p 80:80 -v /c/Users/someone/plugins:/var/www/html/wp-content/plugins wordpress
いったい、何が起きているのでしょうか?
docker コマンド内のオプション指定が、どこのリンクに影響しているのかを確認してみてください。
さらに距離を近づけてくれているのが、boot2docker の Host only interface と 自動マウントされる共有フォルダ です。(特に何も設定することなく、有効になっているハズです)
- Host only interface のおかげで、ポートフォワードの設定をすることなく、dockerコンテナが公開しているポートへ 開発用PC から接続できます。
- 自動マウントされる共有フォルダのおかげで、コンテナ内 と 開発用PC の両方から同一フォルダを参照できるようになります。(開発用PC の C:\Users\ が、boot2docker の LinuxVM 上の /c/Users/ に自動マウントされています)
実際にアクセスするには
wordpress のサイトにブラウザからアクセスするには
開発用PC 上で、boot2docker.exe コマンドを使って、Host only interface の IPアドレス を調べてください。
PC> boot2docker.exe ip
The VM's Host only interface IP address is: 192.168.xxx.xxx
ブラウザから http://192.168.xxx.xxx/ にアクセスすれば、dockerコンテナ上の wordpress サイトを参照できます。
wordpress の plugin フォルダを読み書きするには
開発用PC の C:\Users\someone\plugins
を読み書きすれば、docker コンテナ内の plugins フォルダの内容も変更されます。
まとめ
Linux ではない 開発用PC で docker を使用する場合に感じられる距離感を、2つの架け橋(ネットワークの架け橋 と フォルダ共有の架け橋)を使うことで、グッと近づけることができたと思います。設定自体も dockerコマンド 2行だけ なので、気楽に試すことができます。いろいろ応用してみてください。