Docker 1.3の新機能を試してみる
はじめに
boot2docker + figで始めるDockerコンテナ・オーケストレーションで書いた通り、Docker 1.3がリリースされました。
今回はDocker 1.3の新機能を試してみたいと思います!
やってみた
docker exec
起動しているコンテナに対してプロセスを実行するdocker execコマンドが追加されました。例えば以下のようにコンテナを起動します。
$ docker run -d dockerfile/elasticsearch 7fa04e67eec8e44dd6f84f58eb74d7130dd5cdf3b13091f0369b2da2a30a78f9
docker psコマンドで確認すると、コンテナがバックグラウンドで起動していることが分かります。
$ docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 7fa04e67eec8 dockerfile/elasticsearch:latest "/elasticsearch/bin/ 28 hours ago Up 2 seconds 9200/tcp, 9300/tcp prickly_almeida
ではdocker execコマンドを使って、起動中のコンテナに対しps auxコマンドを実行してみます。すると以下のように、コンテナ内のプロセス情報が結果として返ってきます!
$ docker exec 7fa04e67eec8 ps aux USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND root 1 8.1 8.6 3409512 177684 ? Ssl 00:57 0:08 /usr/lib/jvm/java-7-oracle/bin/java -Xms256m -Xmx1g -Xss256k -Djava.awt.headless=true -XX:+UseParNewGC -XX:+UseConcMarkSweepGC -XX:CMSInitiatingOccupancyFraction=75 -XX:+UseCMSInitiatingOccupancyOnly -XX:+HeapDumpOnOutOfMemoryError -XX:+DisableExplicitGC -Delasticsearch -Des.foreground=yes -Des.path.home=/elasticsearch -cp :/elasticsearch/lib/elasticsearch-1.3.2.jar:/elasticsearch/lib/*:/elasticsearch/lib/sigar/* org.elasticsearch.bootstrap.Elasticsearch root 78 8.0 0.1 15572 2084 ? R 00:59 0:00 ps -aux
さらに-itオプションを付与することで、インタラクティブにプロセスを実行することができます。/bin/bashを実行するとプロンプトが表示され、コンテナ内で任意の操作が可能になります。
$ docker exec -it 7fa04e67eec8 /bin/bash [ root@7fa04e67eec8:/data ]$ ps aux USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND root 1 6.4 8.6 3409512 177684 ? Ssl 00:57 0:10 /usr/lib/jvm/java-7-oracle/bin/java -Xms256m -Xmx1g -Xss256k -Djava.awt.headless=true -XX:+UseParNewGC -XX root 83 1.1 0.2 19312 4472 ? S 01:00 0:00 /bin/bash root 105 0.0 0.1 15572 2120 ? R+ 01:00 0:00 ps aux
これで起動中のコンテナのデバッグや状態確認ができます。便利!
docker create
docker runを実行した場合、コンテナを作成し起動、という処理を一度に行ってくれていました。新しく追加されたdocker createコマンドでは、コンテナを作成するだけで、起動まではしません。例えば以下のようにコンテナが無い状態で...
$ docker ps -a CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
docker createしてみます。
$ docker create dockerfile/elasticsearch 1d05afdfb56ff12cca7f0bafca2d42aa09723d33db3e06b4dca8c6fb50ee2901
するとコンテナは出来上がりますが...
$ docker ps -a CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 1d05afdfb56f dockerfile/elasticsearch:latest "/elasticsearch/bin/ 28 hours ago angry_curie
コンテナは起動していません。
$ docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
docker startすることでコンテナが起動します。
$ docker start 1d05afdfb56f 1d05afdfb56f $ docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 1d05afdfb56f dockerfile/elasticsearch:latest "/elasticsearch/bin/ 28 hours ago Up 8 seconds 9200/tcp, 9300/tcp angry_curie
コンテナの作成と起動がセットでは無く別々に行えるようになりましたので、コンテナのライフサイクルをよりきめ細やかに管理することが出来るようになります。
boot2dockerでMac OS Xのディレクトリを共有する
Docker 1.3に合わせてバージョンアップされたboot2dockerにより、コンテナとMac OS Xで簡単にディレクトリを共有できるようになりました。以下のようにオプションをつけてコンテナを起動します。
$ docker run -it -v /Users/smokeymonkey/Documents:/Documents centos /bin/bash bash-4.2#
するとMac OS Xの"/Users/smokeymonkey/Documents"ディレクトリが、コンテナ内の"/Documents"に共有されます。
bash-4.2# ls -alF /Documents/ total 48 drwxr-xr-x 1 1000 ftp 170 Jan 23 2014 $RECYCLE.BIN/ drwxr-xr-x 1 1000 ftp 578 Oct 23 2014 ./ drwxr-xr-x 29 root root 4096 Oct 22 02:13 ../ -rw-r--r-- 1 1000 ftp 18436 Oct 23 2014 .DS_Store -rw------- 1 1000 ftp 0 Nov 13 2013 .localized
もちろんコンテナからこのディレクトリにファイルを作成すると、そのままMac OS Xで参照ができます。
bash-4.2# touch /Documents/testfile
これでコンテナとホストとなるMac OS Xでのファイルの受け渡しが簡単に出来ますし、ログファイルなどをMac OS Xで取得して解析することも出来ます。
さいごに
バージョンアップするたびに痒いところに手が届くようになってきた感がありますね!