boot2dockerをアップグレード

Mac OSX用のdocker実行環境としてboot2dockerが整備されています。dockerはLinuxコンテナとして開発されてきたため、boot2dockerはVirtualbox上のLinux VMでdockerを動作させています。

docker run -vのようにdocker標準コマンドでOSXのディレクトリを直接dockerコンテナのボリュームにアサインできるなど、おおむねVMを気にせず利用できるため便利です。

ただし、ネットワーク面などでは違いもあり、たとえばOSXのブラウザからdockerのWebサーバにアクセスする際にはlocalhostではなくVMの仮想IPになります。

また、boot2docker自体のメンテナンスにも注意が必要です。boot2dockerのアップグレードは、以下の2つのパートからなります。

  • boot2dockerツールのアップグレード
  • dockerサーバーのアップグレード

boot2docker(とdocker)のクライアントツールはhomebrewで提供されています。

一方、dockerのサーバーサイドはLinux VMの差し替えになるため、既存のdockerインスタンスやイメージがなくなります

アップグレード作業を行う前に、必要なdockerインスタンスについてバックアップとリストアの方法を整備しておくことが重要です。

  • カスタマイズ済みのイメージをプライベート・レジストリにpushしておく。ただし、ボリューム内のファイルはイメージに含まれないためこの方法ではバックアップできない。直接ファイルを確保する必要がある
  • データベースのダンプファイルを取得して、(docker上ではなく)OSX環境に確保しておく
  • 同様にdocker上のディスク領域に置いているデータファイルもOSX環境に確保しておく
  • dockerイメージのビルド手順を確立しておく(一度破棄して新環境で再ビルドする)

とくに注意が必要なのは、brew upgradeを不用意に実行するとboot2dockerがアップグレードされてしまうことがある点です。クライアントツールを更新するとdockerのクライアントとサーバーのバージョンが合わなくなり、実行不能になります。

こうなってしまうと、dockerのサーバー側も合わせてアップグレードするよりほかありません。

このケースのレスキューの手段としては、Virtualboxを起動して”boot2docker-vm”に直接ログインすることで、Linux VM内でdockerを操作できるかもしれません。

VMの更新はboot2docker upgradeで実行できます。

ただ、このコマンドで完結しない場合があり、その場合はboot2docker deleteboot2docker initboot2docker startの順に実行すると環境が再作成されます。

コンテナは手軽に作成できるため、無数のコンテナを管理することになりがちですが、移行についてあらかじめ検討しておかないといざアップグレードするとなった際に準備が間に合わなくなる危険があります。

中馬崇尋
Chuma Takahiro