MacでDockerを動かす際に気をつけること
Boot2dockerを使ってMacでDockerを動かす際に、いくつか気をつけることとかハマったことがあったのでまとめました。
VirtualBoxのポートフォワーディング設定
boot2dockerはVirtualBox上で動作しているので、MacからDockerで立ち上げたサーバやミドルウェアにアクセスするためにはVirtualBoxのポートフォワーディング設定が必要です。
この辺はDockerのInstallation Guideに載ってます。
以下は、3000番ポートで起動中のRailsサーバにアクセスする場合の例。
VirtualBox上で直接設定する場合
CLIで設定する場合
$ VBoxManage modifyvm "boot2docker-vm" --natpf1 "rails,tcp,,3000,,3000"
Mac上のディレクトリをマウント
Mac上のディレクトリをDockerインスタンスにマウントするためには、以前はいろいろやることがあったんですが、現バージョンのboot2dockerはお手軽にマウントできます。
例えば以下の様なディレクトリ構造のプロジェクトがあった場合
myapp ├── Dockerfile ├── fig.yml └── app <-- Docker上でマウントしたいディレクトリ └── ・・・
Docker起動時に
$ docker run -v /Users/matsukaz/myapp/app:/app
のように指定するだけで/myapp/appのディレクトリが/appにマウントされます。楽〜。
figを使ってDockerインスタンスを管理している場合は、fig.ymlには以下のような記述をします。
myapp: build: . volumes: - app:/app
ただし注意点が少しあります。
- 共有できるディレクトリは/Users配下のみ(/Users配下であれば、直下じゃなくても大丈夫)
- 動的に変更できない(Dockerインスタンス起動時にしか設定できない)
詳しくは Docker 1.3: signed images, process injection, security options, Mac shared directories | Docker Blog に書いてあります。
Note that there are still some limitations: for example this feature is limited to boot2docker’s virtualbox configuration, cannot be managed dynamically, and only works for directories in /Users . But we are receiving exciting contributions to improve volume management, so expect this area to improve drastically in the next few releases.
時間がズレる
boot2dockerはVirtualBox上で動作しているので、Macをスリープ状態にしたりするとMac上の時間とずれちゃいます。
Dockerインスタンスの時間はboot2dockerの時間を元にしているので、結果的にDockerの時間もズレると。
boot2dockerを再起動するか、以下のコマンドとかでNTP同期を取らせる必要があります。
boot2docker ssh "sudo ntpd -q -p 1.jp.pool.ntp.org"
ミドルウェアやサーバによっては時間がズレると動作がおかしくなるものもあるので、注意が必要です。
他にもMac上でlaunchctlを使って定期的に同期を取らせる方法とかもあります。
$ wget -q https://gist.githubusercontent.com/fcvarela/2c90b090e1e5f8c91127/raw/1e63833d4ec7edea98298204a0c26f79ead3db8e/com.fcvarela.boot2docker.datesync.plist -O ~/Library/LaunchAgents/com.fcvarela.boot2docker.datesync.plist && launchctl load ~/Library/LaunchAgents/com.fcvarela.boot2docker.datesync.plist && launchctl start com.fcvarela.boot2docker.datesync
今後リリース予定のboot2docker 1.5.0では
Add ntpd and crond that restarts it, which combats the boot2docker suspend issue by tianon · Pull Request #661 · boot2docker/boot2docker · GitHub のプルリクが取り込まれて改善されてるようなので、それ以前のバージョンを利用している場合はご注意ください。
Docker入門 Immutable Infrastructureを実現する
- 作者: 松原豊,米林正明
- 出版社/メーカー: 技術評論社
- 発売日: 2014/04/25
- メディア: Kindle版
- この商品を含むブログ (5件) を見る
- メディア: ウェア&シューズ
- この商品を含むブログを見る