Docker 1.5の新機能を試してみる
ども、大瀧です。
昨日Dockerのバージョン1.5がリリースされました。いくつか追加された機能について解説と感想を書いてみます。
バージョン1.4までのアップデート記事はこちら。最近のDockerを追っかけられてなかったなぁという方におすすめです。
Boot2Dockerのバージョンアップ
MBA(OS X Yosemite) + Boot2Dockerの場合は、GitHubのリリースページからBoot2Docker-1.5.0.pkgファイルをダウンロード、実行してインストールします。その後、端末を開いて以下のコマンドを実行してBoot2Docker VMをアップグレードします。
$ boot2docker upgrade Latest release for boot2docker/boot2docker is v1.5.0 Downloading boot2docker ISO image... Success: downloaded https://github.com/boot2docker/boot2docker/releases/download/v1.5.0/boot2docker.iso to /Users/ryuta/.boot2docker/boot2docker.iso $ boot2docker delete $ boot2docker init $ boot2docker up Waiting for VM and Docker daemon to start... ......................................oooooooooooooooooooooooooooooooooo Started. Writing /Users/ryuta/.boot2docker/certs/boot2docker-vm/ca.pem Writing /Users/ryuta/.boot2docker/certs/boot2docker-vm/cert.pem Writing /Users/ryuta/.boot2docker/certs/boot2docker-vm/key.pem Your environment variables are already set correctly. $ docker version Client version: 1.5.0 Client API version: 1.17 Go version (client): go1.4.1 Git commit (client): a8a31ef OS/Arch (client): darwin/amd64 Server version: 1.5.0 Server API version: 1.17 Go version (server): go1.4.1 Git commit (server): a8a31ef $
OKですね!
新機能を試す
コンテナのリソース監視(docker stats)
実行中のDockerコンテナのリソース使用量をtopコマンドのように表示することができます。
$ docker stats takiponecom_varnish_1 takiponecom_nginx_1 takiponecom_ghost_1 (画面が切り替わり、常時アップデートされる) CONTAINER CPU % MEM USAGE/LIMIT MEM % NET I/O takiponecom_ghost_1 0.11% 128.2 MiB/1.961 GiB 6.38% 39.65 KiB/823.5 KiB takiponecom_nginx_1 0.00% 2.18 MiB/1.961 GiB 0.11% 875.7 KiB/924.5 KiB takiponecom_varnish_1 1.21% 149.1 MiB/1.961 GiB 7.42% 148.8 KiB/144.4 KiB
これが便利に使えるのはSwarmでクラスタ組んでいるときかなと思っています。SwarmはDockerの標準APIが通るので、今回のようなDocker本体の機能追加に追随できるメリットがあるのでは。こんな感じで出せます。
$ export DOCKER_HOST=<Swarm ManagerのIPアドレス>:<Swarm Managerのポート番号> $ docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 46010ccdcf49 ubuntu:14.04 "sleep 6000" 1 seconds ago Up Less than a second ip-172-31-4-86/focused_morse 330888b05f5e ubuntu:14.04 "sleep 6000" 2 seconds ago Up Less than a second ip-172-31-4-86/adoring_wright d8d5a2228743 ubuntu:14.04 "sleep 6000" 3 seconds ago Up Less than a second ip-172-31-4-86/condescending_cori 3bd385517da4 ubuntu:14.04 "sleep 6000" About a minute ago Up 42 seconds ip-172-31-4-87/naughty_thompson $ docker stats `docker ps -q` CONTAINER CPU % MEM USAGE/LIMIT MEM % NET I/O 330888b05f5e 0.00% 2.121 MiB/992 MiB 0.21% 1.646 KiB/648 B 3bd385517da4 0.00% 2.121 MiB/992 MiB 0.21% 648 B/648 B 46010ccdcf49 0.00% 2.254 MiB/992 MiB 0.23% 1.326 KiB/648 B d8d5a2228743 0.00% 2.121 MiB/992 MiB 0.21% 1.898 KiB/648 B $
Swarmノード名とコンテナ名がStatsに載って欲しいところなので、良いやり方知っている方がいれば教えて下さい!
docker buildの-fオプション
従来、Dockerfileはファイル名が固定でdocker buildの引数に指定するディレクトリの直下に置いておくという制約がありました。今回のアップデートで、任意のファイル名とADDなどでコンテナに追加するファイルとは別のディレクトリに配置できるようになりました。アプリケーションのファイルとDockerの構成ファイルが分離できるので、「本番環境と開発環境でアプリケーションの設定を分けつつ共通のDockerfileでビルドしたい」といった小回りの効くDockerイメージの作成がやりやすくなったのではないでしょうか。かたや自分は、Dockerfileの制約に慣れてしまっているので常用することはなさそうです。
$ tree docker/ docker/ ├── Dockerfile ├── LICENSE └── README.md 0 directories, 3 files $ docker build -t takipone/varnish2 -f docker/Dockerfile . \Sending build context to Docker daemon 76.29 kB Sending build context to Docker daemon Step 0 : FROM dockerfile/ubuntu Pulling repository dockerfile/ubuntu e7fc98dc1b07: Download complete 511136ea3c5a: Download complete : $
docker runの--read-onlyオプション
オプション名の通り、Dockerコンテナ内のボリュームを読み取り専用にします。ImmutableやStatelessなコンテナで有用かもしれませんね。-vオプションでマウントするホストボリュームは対象外で書き込みできるので、うまく使い分けたいですね。自分としては昨日書いたラズパイ環境でうまく使えるんじゃないかと、ちょっと期待しています。
$ docker run --read-only -ti -v /Users/ryuta/vomule1:/volume1 ubuntu bash root@856ae240f57f:/# touch ./file touch: cannot touch './file': Read-only file system root@856ae240f57f:/# touch /volume1/file1 root@856ae240f57f:/# ls /volume1/ file1 root@856ae240f57f:/#
docker runの--pid=hostオプション
Dockerコンテナ内はホストのプロセスツリーから分離されるため、通常コンテナ内のプロセスしか確認することができません。--pid=hostオプションを付与すると、ホストのプロセス一覧にアクセスすることができます。公式ブログの通り、プロセス監視をコンテナ内から行うケースなどで有用かもしれません。
$ docker run -ti ubuntu bash root@b6f794e0f205:/# ps ax PID TTY STAT TIME COMMAND 1 ? Ss 0:00 bash 14 ? R+ 0:00 ps ax root@b6f794e0f205:/# exit $ docker run --pid=host -ti ubuntu bash root@fc4ca0609f06:/# ps ax | head PID TTY STAT TIME COMMAND 1 ? Ss 0:01 init 2 ? S 0:00 [kthreadd] 3 ? S 0:05 [ksoftirqd/0] 5 ? S< 0:00 [kworker/0:0H] 7 ? S 0:02 [rcu_sched] 8 ? S 0:00 [rcu_bh] 9 ? S 0:07 [migration/0] 10 ? S 0:00 [migration/1] 11 ? S 0:00 [ksoftirqd/1] root@fc4ca0609f06:/# ls -1 /proc | head -n 20 1 10 1022 11 112 13 14 1462 1467 15 1565 1617 1623 1643 1686 1687 1695 17 1711 1739 root@fc4ca0609f06:/# exit $ [/bash]
その他にも多数の機能拡張がありますので、興味があればCHANGELOGを見てみましょう!"Speed up docker push for images with a majority of already existing layers"というのが地味に嬉しいけど、まだ検証できていません。簡単なベンチ、誰かやってくれませんかね?(他力本願
まとめ
ざっとDocker 1.5の新機能からめぼしいものを試してみました。皆さんも新しいDockerをどんどん触っていきましょう!