[小ネタ]Boot2dockerで実行するDocker VMのバージョンアップ
2014/05/08追記
本記事公開後にDocker 0.11がリリースされ、Homebrew版Docker、boot2dockerも対応済みです。バージョン0.10の方はもう一度バージョンアップしましょう!
2014/05/08追記 その2
と思ったら、0.11.1が出たようで、docker versionに警告文が出ますね。
ども、大瀧です。
はじめてのDocker on Mac OS Xという記事を書いたときに、"Dockerのバージョンアップを楽にするためにHomebrewを使います"と紹介していたのですがいざバージョンアップしようとしたらハマったので、対処方法をご紹介します。
brew upgradeだけでは不十分
ここでは手元のMBAのDockerが0.9.1なので、最新の0.10.0を使うためにbrew updateとbrew upgradeを実行します。MBA環境ではDockerを実行するLinux VMとしてBoot2dockerを利用しているので、Boot2dockerも一緒にアップグレードします。
ikkomon:~ ryuta$ brew update ikkomon:~ ryuta$ brew upgrade docker boot2docker ==> Upgrading 2 outdated packages, with result: docker 0.10.0, boot2docker 0.8.0 ==> Upgrading docker ==> Downloading https://downloads.sf.net/project/machomebrew/Bottles/docker-0.10 ######################################################################## 100.0% ==> Pouring docker-0.10.0.mavericks.bottle.tar.gz ==> Caveats Bash completion has been installed to: /usr/local/etc/bash_completion.d zsh completion has been installed to: /usr/local/share/zsh/site-functions ==> Summary /usr/local/Cellar/docker/0.10.0: 9 files, 12M ==> Upgrading boot2docker ==> Downloading https://github.com/boot2docker/boot2docker/archive/v0.8.0.tar.gz ######################################################################## 100.0% /usr/local/Cellar/boot2docker/0.8.0: 4 files, 32K, built in 4 seconds ikkomon:~ ryuta$
問題なくアップグレードが完了しました。しかし、docker versionでバージョンを確認してみると...
ikkomon:~ ryuta$ boot2docker up : ikkomon:~ ryuta$ docker version Client version: 0.10.0 Client API version: 1.10 Go version (client): go1.2.1 Git commit (client): dc9c28f Server version: 0.9.1 Git commit (server): 3600720 Go version (server): go1.2.1 Last stable version: 0.10.0, please update docker ikkomon:~ ryuta$
あれ、Serverの方だけ古い0.9.1のままです。ご丁寧にアップグレードしましょうという警告文が出ますw
Boot2docker自体がDocker 0.10.0に対応していないのかとも思ったのですが、GitHubのリリースにはちゃんと0.10.0対応と書いてあるんですよね。
で、ちょっと考えて以下の仮説に行き着きました。
HomebrewでアップグレードするのはBoot2dockerのコマンドラインツールの部分で、Docker VMの管理とは別。なのではないかと。
Boot2dockerのDocker VMをバージョンアップする
じゃあどうやってDocker VMをアップグレードするのかというと、Docker VMのイメージをダウンロードするboot2docker downloadというコマンドでアップグレードできることがわかりました。既存のDocker VMと置き換えるために、前後でboot2docker deleteとboot2docker initを実行します。
ikkomon:~ ryuta$ boot2docker delete 0%...10%...20%...30%...40%...50%...60%...70%...80%...90%...100% ikkomon:~ ryuta$ boot2docker download [2014-05-05 21:33:16] Latest version is v0.8.0, downloading... % Total % Received % Xferd Average Speed Time Time Time Current Dload Upload Total Spent Left Speed 100 342 100 342 0 0 255 0 0:00:01 0:00:01 --:--:-- 255 100 24.0M 100 24.0M 0 0 1458k 0 0:00:16 0:00:16 --:--:-- 3334k [2014-05-05 21:33:33] Done ikkomon:~ ryuta$ boot2docker init [2014-05-05 21:33:47] Creating VM boot2docker-vm Virtual machine 'boot2docker-vm' is created and registered. UUID: 755df12f-ed26-48d1-a169-e6a60346844f Settings file: '/Users/ryuta/VirtualBox VMs/boot2docker-vm/boot2docker-vm.vbox' [2014-05-05 21:33:47] Apply interim patch to VM boot2docker-vm (https://www.virtualbox.org/ticket/12748) [2014-05-05 21:33:47] Setting VM settings [2014-05-05 21:33:47] Setting VM networking [2014-05-05 21:33:47] Setting VM disks [2014-05-05 21:33:47] Creating 40000 Meg hard drive... Converting from raw image file="stdin" to file="/Users/ryuta/.boot2docker/boot2docker-vm.vmdk"... Creating dynamic image with size 41943040000 bytes (40000MB)... [2014-05-05 21:33:47] Done. [2014-05-05 21:33:47] You can now type boot2docker up and wait for the VM to start. ikkomon:~ ryuta$
これでOKです。早速Docker VMを起動してdocker versionでバージョンを確認します。
ikkomon:~ ryuta$ boot2docker up [2014-05-05 21:34:20] Starting boot2docker-vm... [2014-05-05 21:34:52] Started. To connect the docker client to the Docker daemon, please set: export DOCKER_HOST=tcp://localhost:4243 ikkomon:~ ryuta$ docker version Client version: 0.10.0 Client API version: 1.10 Go version (client): go1.2.1 Git commit (client): dc9c28f Server version: 0.10.0 Server API version: 1.10 Git commit (server): dc9c28f Go version (server): go1.2.1 Last stable version: 0.10.0 ikkomon:~ ryuta$
ちゃんとServer versionが0.10.0になっていますね!
あとがき
この方法、できた後で"boot2docker download"でGoogle検索すると何件かヒットするのですが、Boot2dockerにはまともなドキュメントが見当たらないので、結構難易度が高かったです。Boot2docker自体を再インストールするという荒技もあると思いますが、スマートにバージョンアップしたいところですよね。