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の登場の影響によるものだと推測できる.その辺については次回詳しく書く.