[小ネタ]Boot2dockerで実行するDocker VMのバージョンアップ

2014.05.07

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

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 updatebrew 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対応と書いてあるんですよね。

boot2docker-release-v0_8_0

で、ちょっと考えて以下の仮説に行き着きました。

HomebrewでアップグレードするのはBoot2dockerのコマンドラインツールの部分で、Docker VMの管理とは別。なのではないかと。

Boot2dockerのDocker VMをバージョンアップする

じゃあどうやってDocker VMをアップグレードするのかというと、Docker VMのイメージをダウンロードするboot2docker downloadというコマンドでアップグレードできることがわかりました。既存のDocker VMと置き換えるために、前後でboot2docker deleteboot2docker 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自体を再インストールするという荒技もあると思いますが、スマートにバージョンアップしたいところですよね。