Docker 1.5の変更点
- Docker 1.5.0-rc1
- Docker 1.5: IPv6 support, read-only containers, stats, “named Dockerfiles” and more | Docker Blog
Docker 1.5が出た.IPv6のサポートやstats
コマンドによるコンテナのメトリクス表示などが追加された.ユーザ的に一番嬉しいのはDockerfileの名前を自由に決められるようになったことだろうと思う.
今までDockerfileはDockefile
という名前しか受け付けなかった,というかまともに動かなかった.やりようはあって,標準入力からぶっ込むことはできた.例えばbase
とう名前のDockerfileを作って以下のようにbuild
を実行することができた.
$ docker build -t tcnksm/test - < base
しかし,ADD
もしくはCOPY
インストラクションを使っている場合に,そのソースはURLでないといけないという制限があった.ソースにローカルのファイルを指定していると,build
のコンテキストが伝わらずno such file or directory
エラーが発生するという面白い状況だった.
1.5からは-f
オプションが追加され,Dockerfile
という名前以外のDockerfileを指定することができるようになった.
$ docker build -t tcnksm/test -f base .
ADD
やCOPY
インストラクションのソースにローカルファイルを指定していてもちゃんと動く.
しかし,今までのようにカレントディレクトリのDockerfile
をビルドすることに慣れていると,ハマるところがある.カレントディレクトリ以外のDockerfileをビルドするときは,そのbuild
の起点となるディレクトリをちゃんと指定する必要がある.例えば,files
ディレクトリ内のbase
という名前のDocekerfileをその外からビルドするときは,以下のようにする.
$ docker build -t tcnksm/test -f files/base files
末尾のfiles
をいつも通りに.
にするとADD
やCOPY
インストラクションでno such file or directory
エラーが発生する.
DockerHub
ではDockerHubのAutomated buildはどうか.現時点(2015年2月11日)ではDockerfile
という名前以外は受け付けていない.ので,今まで通りにディレクトリごとにDockerifileを準備する必要がある.
ただ,自分はディレクトリごとにDockerfileを分けるという慣習には適応しすぎているので,もうこのままでも良いかなって気持ちはある…
その他の変更
他にもいくつか自分的に気になった機能をいくつか.
Read-onlyコンテナ
run
に--read-only
オプションがつき,コンテナのファイルシステムを書き込み不可にすることができるようになった.
$ docker run --read-only busybox sh -c 'echo test > /etc/test.conf'
sh: can't create /etc/test.conf: Read-only file system
この場合,書き込みはvolume
領域のみに行える.
$ docker run --read-only -v `pwd`/volume:/volume busybox sh -c 'echo test > /volume/test.conf'
これはセキュリティとコンテナのステートレスの推進が目的だと思う.
Stats
stats
コマンドが追加され,リアルタイムでコンテナのCPUやメモリ,ネットワークI/Oなどを確認できるようになった.
$ docker run -d --name redis -p 6379 crosbymichael/redis
$ docker stats redis
# CONTAINER CPU % MEM USAGE/LIMIT MEM % NET I/O
# redis 0.46% 10.23 MiB/1.961 GiB 0.51% 1.266 KiB/648 B
ざっと確認するには使える.ただ,メトリクス収集をまともにやるならgoogle/cadvisorの方が筋が良いのでこっち使うと思う.
ホストのPID
--net=host
のように--pid=host
を指定するとするとホストのPIDのnamespaceが使われるようになる.
$ docker run --pid=host busybox ps
Dockerイメージのスペック
またリリースアナウンスには,Dockerイメージのスペックを作り始めたことが触れられている.
これはCoreOS/RocketとApp Containerの登場の影響によるものだと推測できる.その辺については次回詳しく書く.