Docker 1.4の新機能を試してみる
はじめに
12/11にDocker 1.4がReleaseされました。
というかGithubではもう1.4.1になっています...
そこで、Docker 1.4のRelease NotesからNew Featuresを試してみました。
やってみた
labelオプションが追加された
Dockerデーモンにkey=value形式でラベルを割り当てることが出来ます。
以下のように--labelオプションを付与してDockerデーモンを起動します。
$ sudo /usr/bin/docker --label=[hdd=ssd] -d &
そしてdocker infoを実行すると、最終行にlabelが表示されます。
$ sudo docker -D info Containers: 10 Images: 33 Storage Driver: devicemapper Pool Name: docker-202:1-279313-pool Pool Blocksize: 65.54 kB Data file: /var/lib/docker/devicemapper/devicemapper/data Metadata file: /var/lib/docker/devicemapper/devicemapper/metadata Data Space Used: 2.07 GB Data Space Total: 107.4 GB Metadata Space Used: 3.154 MB Metadata Space Total: 2.147 GB Library Version: 1.02.82-git (2013-10-04) Execution Driver: native-0.2 Kernel Version: 3.14.20-20.44.amzn1.x86_64 Operating System: Amazon Linux AMI 2014.09 CPUs: 1 Total Memory: 996.2 MiB Name: ip-172-31-11-227 ID: W7BC:D32Y:Z324:6NBZ:EDCQ:TNBN:XM34:PWIW:DVSK:DANE:YOGC:LZ4X Debug mode (server): false Debug mode (client): true Fds: 11 Goroutines: 10 EventsListeners: 0 Init Path: /usr/bin/docker Docker Root Dir: /var/lib/docker Labels: [hdd=ssd]
オーケストレーションで複数のDockerデーモンを使う時にはわかりやすい名前を付与することができて便利なのでは無いでしょうか。
DockerfileのENVが=で書けるようになった
地味...これまでDockerfileでENVを指定する時はスペースで区切っていました。
ENV PATH $PATH:/usr/local/bin
1.4.0からは変数と値を=で結ぶことができるようになりました。
ENV PATH=$PATH:/usr/local/bin
実際に試してみましょう。以下のようなDockerfileを作成します。
$ cat Dockerfile FROM ruby:latest ENV EQUAL=true ENV SPACE true
buildしてrunしてみます。
$ sudo docker build -t local/envtest . $ sudo docker run local/envtest env PATH=/usr/local/bundle/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin HOSTNAME=f5d5a7f7dc2d RUBY_MAJOR=2.1 RUBY_VERSION=2.1.5 GEM_HOME=/usr/local/bundle BUNDLE_APP_CONFIG=/usr/local/bundle EQUAL=true SPACE=true HOME=/root
上記のように、=で指定した時も、スペースで指定したときも、ちゃんと環境変数が設定されています。
docker eventsでフィルターが設定できるようになった
Dockerデーモンで発生したイベントを検知するeventsでフィルターが設定できるようになりました。以下はフィルターを設定せずにeventsを実行した場合です。
$ sudo docker events
この状態で例えばcreate→start→stopをしてみます。
$ sudo docker create -t -i centos bash 5cdca74ef5de259eff7d23c44b3f3042a094c375d6724dc27f92628ae967ab3f $ sudo docker start 5cdca74ef5de 5cdca74ef5de $ sudo docker stop 5cdca74ef5de 5cdca74ef5de
すると全イベントが検知されます。
2014-12-17T08:28:26.000000000Z 5cdca74ef5de259eff7d23c44b3f3042a094c375d6724dc27f92628ae967ab3f: (from centos:latest) create 2014-12-17T08:28:35.000000000Z 5cdca74ef5de259eff7d23c44b3f3042a094c375d6724dc27f92628ae967ab3f: (from centos:latest) start 2014-12-17T08:28:51.000000000Z 5cdca74ef5de259eff7d23c44b3f3042a094c375d6724dc27f92628ae967ab3f: (from centos:latest) die 2014-12-17T08:28:51.000000000Z 5cdca74ef5de259eff7d23c44b3f3042a094c375d6724dc27f92628ae967ab3f: (from centos:latest) stop
ではフィルターを設定し、startだけが表示されるようにします。
$ sudo docker events --filter event=start
この状態で同じようにcreate→start→stopをしても、startのイベントしか出力されません。
2014-12-17T08:31:35.000000000Z 5d79087201014e29221c44d12f5320c0c43292343d44615c7c7a18c5709a6605: (from centos:latest) start
他にも'container=1d0a7b25d3aa'のようにコンテナIDを指定することも出来ます。
さいごに
今回実験的な機能として追加されたoverlayfsについてはまだ試せていませんので、近いうちにやってみたいと思います。