Docker 0.7の新機能の確認&アップデートしてみた。

0.7がリリースされて品質改善や新機能が追加があったのでアップデートしてみた。

Dockerはコンテナ型仮想化ソフトウェアとしてもっとも注目度の高いソフトウェアといえるでしょう。バージョン0.7では主要なディストリビューションすべてで利用可能になったため、これからの普及に大きなはずみがつきそうです。

コンテナ型仮想化「Docker 0.7」リリース。主要Linuxディストリビューション全対応、ストレージドライバ同梱、コンテナ命名も可能に - Publickey
  • 新機能の一覧(すっごく簡単に訳して列挙)
    • Standard Linux support:サポートOSの追加( Fedora, RHEL, Ubuntu, Debian, Suse, Gentoo, Arch, etc.)
    • Storage drivers:上記を実現するためドライバーを準備
    • Offline transfer:Dockerのイメージを他のマシンに転送
    • Advanced port redirects:標準でのリダイレクト禁止等のセキュリティ強化
    • Links:コンテナ間の通信路(例としてwordpressとdbを別コンテナにして実行し、その間の通信経路を簡単に確保する)
    • Container naming:コンテナに名前を付ける
    • Quality:品質の改善

方法は至って簡単でapt-get dist-upgradeで実施するだけですんだ。

いきなりdist-upgradeは怖いので、apt-get -s dist-upgradeで変更点をシミュレーションした上でアップグレードを実施。

$sudo apt-get -s dist-upgrade
パッケージリストを読み込んでいます... 完了
依存関係ツリーを作成しています               
状態情報を読み取っています... 完了
アップグレードパッケージを検出しています ... 完了
以下のパッケージは「削除」されます:
  lxc-docker-0.6.6
以下のパッケージが新たにインストールされます:
  lxc-docker-0.7.0
以下のパッケージはアップグレードされます:
  lxc-docker
アップグレード: 1 個、新規インストール: 1 個、削除: 1 個、保留: 0 個。
Inst lxc-docker [0.6.6] (0.7.0 get.docker.io [amd64]) []
Remv lxc-docker-0.6.6 [0.6.6] []
Inst lxc-docker-0.7.0 (0.7.0 get.docker.io [amd64])
Conf lxc-docker-0.7.0 (0.7.0 get.docker.io [amd64])
Conf lxc-docker (0.7.0 get.docker.io [amd64])

影響範囲はlxc-dockerに限られるためdist-upgradeを実施する。

$ sudo apt-get dist-upgrade
パッケージリストを読み込んでいます... 完了
依存関係ツリーを作成しています               
状態情報を読み取っています... 完了
アップグレードパッケージを検出しています ... 完了
以下のパッケージは「削除」されます:
  lxc-docker-0.6.6
以下のパッケージが新たにインストールされます:
  lxc-docker-0.7.0
以下のパッケージはアップグレードされます:
  lxc-docker
アップグレード: 1 個、新規インストール: 1 個、削除: 1 個、保留: 0 個。
2,527 kB のアーカイブを取得する必要があります。
この操作後に追加で 1,037 kB のディスク容量が消費されます。
続行しますか [Y/n]? y
取得:1 http://get.docker.io/ubuntu/ docker/main lxc-docker amd64 0.7.0
 [1,914 B]
取得:2 http://get.docker.io/ubuntu/ docker/main lxc-docker-0.7.0 amd64
 0.7.0 [2,525 kB]
2,527 kB を 4秒 で取得しました (588 kB/s)     
(データベースを読み込んでいます ... 現在 219652 個のファイルとディレク
 トリがインストールされています。)
lxc-docker 0.6.6 を (.../lxc-docker_0.7.0_amd64.deb で) 置換するための
 準備をしています ...
lxc-docker を展開し、置換しています...
(データベースを読み込んでいます ... 現在 219651 個のファイルとディレク
 トリがインストールされています。)
lxc-docker-0.6.6 を削除しています ...
docker stop/waiting
ureadahead のトリガを処理しています ...
以前に未選択のパッケージ lxc-docker-0.7.0 を選択しています。
(.../lxc-docker-0.7.0_0.7.0_amd64.deb から) lxc-docker-0.7.0 を展開し
ています...
ureadahead のトリガを処理しています ...
lxc-docker-0.7.0 (0.7.0) を設定しています ...

設定ファイル `/etc/init/docker.conf'
 ==> これはインストールしてから (あなたかスクリプトによって) 変更され
ています。
 ==> パッケージ配布元が更新版を提供しています。
   どうしますか? 以下の選択肢があります:
    Y か I  : パッケージメンテナのバージョンをインストールする
    N か O  : 現在インストールされている自分のバージョンを残す
      D     : 両バージョンの差異を表示する
      Z     : 状況を調査するためにシェルを開始する
 デフォルトでは現在使っている自分のバージョンを残します。
*** docker.conf (Y/I/N/O/D/Z) [デフォルト=N] ? 

-- /etc/init/docker.conf       
+++ /etc/init/docker.conf.dpkg-new      
+0900
@@ -6,5 +6,10 @@
 respawn

 script
-       /usr/bin/docker -d -H="unix://var/run/docker.sock" -H="tcp://127.0.0.1:4243" -api-enable-cors
+       DOCKER=/usr/bin/$UPSTART_JOB
+       DOCKER_OPTS=
+       if [ -f /etc/default/$UPSTART_JOB ]; then
+               . /etc/default/$UPSTART_JOB
+       fi
+       "$DOCKER" -d $DOCKER_OPTS
 end script

設定ファイル `/etc/init/docker.conf'
 ==> これはインストールしてから (あなたかスクリプトによって) 変更され
ています。
 ==> パッケージ配布元が更新版を提供しています。
   どうしますか? 以下の選択肢があります:
    Y か I  : パッケージメンテナのバージョンをインストールする
    N か O  : 現在インストールされている自分のバージョンを残す
      D     : 両バージョンの差異を表示する
      Z     : 状況を調査するためにシェルを開始する
 デフォルトでは現在使っている自分のバージョンを残します。
*** docker.conf (Y/I/N/O/D/Z) [デフォルト=N] ?                

/etc/init/docker.confの書式が若干変わっているので差分が表示されたが、よりオプション指定をし易い表記に変わっただけっぽいので、上書きして必要な所は手動で修正した。

特に動作も問題ないので、新機能を少し試してみたいけど、そろそろ眠くなってきた...。

  • 環境
    • Ubuntu12.04 LTS x64 with Kernel3.8
    • アップデートパス(0.6.6->0.7)

APIの有効化方法の変更

単純に行くと思ったら0.6.7からAPI有効化の方法が変わっていたみたい。

以下の記事を見つけて対処する事ができた。

lxc-docker-0.6.7 では /etc/init/docker.conf の書き方が変わって、 該当する行がなくなってしまったので、代わりに /etc/default/docker.conf を作成しして、

DOCKER_OPTS="-r=true"

のように設定すると良さそうです。

lxc-docker-0.6.7 と dokku の組み合わせで /etc/init/docker.conf が正しく設定されない - Qiita

こんな感じの/etc/default/dockerファイルを作成し対処完了。

JSON APIで値も無事取得できた。

どっかオフィシャルのページのわかり易い所に書いておいて欲しかったよ...。

DOCKER_OPTS="-r=true -H=unix:///var/run/docker.sock -H=tcp://127.0.0.1:4243 -api-enable-cors"