開発用PC と dockerコンテナ との距離がグッと近づく 2つの架け橋


この投稿は、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行だけ なので、気楽に試すことができます。いろいろ応用してみてください。