前回はインストールからイメージの取得、docker run
コマンドによる起動を行いました。
今回も引き続きCentOS 7.0でUbuntuのコンテナを動かしながら動作を見ていきます。
テーマは現在の状態確認です。
Docker本体の情報を見る
バージョン情報
まずはrpmパッケージのバージョン情報を確認します。
$ rpm -q docker
docker-1.3.2-4.el7.centos.x86_64
Dockerパッケージでインストールされるファイルの一覧が見たいときは次のようにします。
実行例
$ rpm -ql docker
実行例結果
/etc/docker/certs.d
/etc/sysconfig/docker
/etc/sysconfig/docker-storage
/etc/udev/rules.d
/etc/udev/rules.d/80-docker.rules
/usr/bin/docker
(以下略)
個々のコンポーネント(Client, Server)やGoのバージョンなど、詳細はdocker version
コマンドで確認です。
実行例
$ sudo docker version
実行例結果
Client version: 1.3.2
Client API version: 1.15
Go version (client): go1.3.3
Git commit (client): 39fa2fa/1.3.2
OS/Arch (client): linux/amd64
Server version: 1.3.2
Server API version: 1.15
Go version (server): go1.3.3
Git commit (server): 39fa2fa/1.3.2
起動設定/状態確認
CentOS 7では次のように起動設定と現在の状態を確認します。
実行例
$ systemctl status docker.service
実行例結果
docker.service - Docker Application Container Engine
Loaded: loaded (/usr/lib/systemd/system/docker.service; enabled)
Active: active (running) since 月 2014-12-29 16:29:50 UTC; 1 weeks 6 days ago
Docs: http://docs.docker.com
Main PID: 857 (docker)
CGroup: /system.slice/docker.service
├─ 857 /usr/bin/docker -d --selinux-enabled -H fd://
├─22958 docker-proxy -proto tcp -host-ip 0.0.0.0 -host-port 49153 -container-ip 172.17.0.60 -container-port 29015
├─22966 docker-proxy -proto tcp -host-ip 0.0.0.0 -host-port 49154 -container-ip 172.17.0.60 -container-port 8080
├─22974 docker-proxy -proto tcp -host-ip 0.0.0.0 -host-port 49155 -container-ip 172.17.0.60 -container-port 28015
└─23262 docker-proxy -proto tcp -host-ip 0.0.0.0 -host-port 80 -container-ip 172.17.0.61 -container-port 8080
項目 | 説明 |
---|---|
Loaded | Dockerがサーバ起動時に自動実行されるように設定されていればenabled になります。 |
Active | 現在稼働中であればactive (running) と表示され、起動した日時とトータルの起動時間が表示されます。 |
Main PID | デーモンの親プロセスのPIDです。 |
CGROUP | 起動中のプロセス。ここを見れば現在の起動オプションを確認できます。 |
もし起動オプションを変更したくなったら/etc/sysconfig/docker
を編集して再起動します。
今回のバージョン(docker-1.3.2)ではデフォルトで次の設定が入っていました。
(当然ですが)上記でsystemctl status
から確認したオプションと同じです。
# /etc/sysconfig/docker
# Modify these options if you want to change the way the docker daemon runs
OPTIONS=--selinux-enabled -H fd://
# Location used for temporary files, such as those created by
# docker load and build operations. Default is /var/lib/docker/tmp
# Can be overriden by setting the following environment variable.
# DOCKER_TMPDIR=/var/tmp
[全体] Dockerコンテナの情報を見る
docker info
実行例
$ sudo docker info
実行例結果
現在のコンテナ数やその元となるイメージ数、データの格納先(Data file)とdisk使用量などを確認できる。
$ sudo docker info
Containers: 7
Images: 33
Storage Driver: devicemapper
Pool Name: docker-253:1-134297046-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: 1.464 GB
Data Space Total: 107.4 GB
Metadata Space Used: 2.507 MB
Metadata Space Total: 2.147 GB
Library Version: 1.02.84-RHEL7 (2014-03-26)
Execution Driver: native-0.2
Kernel Version: 3.10.0-123.el7.x86_64
Operating System: CentOS Linux 7 (Core)
docker ps
現在起動中のコンテナ一覧を確認するにはdocker ps
を実行します。
実行例
$ sudo docker ps
実行例結果
*もし1つも起動しているコンテナがなければ何も返ってきません。
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
341d035f815d shipyard/shipyard:2.0.6 "/app/controller" 12 days ago Up 12 days 0.0.0.0:80->8080/tcp shipyard
e8f226ce407c shipyard/rethinkdb:latest "/usr/bin/rethinkdb 12 days ago Up 12 days 0.0.0.0:49153->29015/tcp, 0.0.0.0:49154->8080/tcp, 0.0.0.0:49155->28015/tcp shipyard-rethinkdb
df01795a4f22 shipyard/rethinkdb:latest "/bin/bash -l" 12 days ago Up 12 days 28015/tcp, 29015/tcp, 8080/tcp shipyard-rethinkdb-data
項目 | 説明 |
---|---|
CONTAINER ID | 特定のコンテナを表す一意なhash値です。 |
IMAGE | 起動時に元としたイメージです。前回docker image コマンドで見たREPOSITORYとTAGがコロン「:」で接続されて一つの欄に表示されます。 |
COMMAND |
docker run で起動時に与えた実行コマンドです。 |
CREATED | 起動時からの経過時間が表示されます。 |
STATUS | 現在のステータスです。docker ps (オプションなし)では起動中のコンテナのみが表示されるためすべてUPになります。 |
PORTS |
docker run で起動時に指定したポートフォワーディングの設定です。<コンテナ内ポート> -> <親ホストポート> の形式で表示されます。 |
終了したコンテナを含めた全てのコンテナを確認するには-a
オプションを付けます。
実行例
$ sudo docker ps -a
実行例結果
今度はすでに終了した(STATUSがExited)のコンテナも表示されました。
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
341d035f815d shipyard/shipyard:2.0.6 "/app/controller" 12 days ago Up 12 days 0.0.0.0:80->8080/tcp shipyard
e8f226ce407c shipyard/rethinkdb:latest "/usr/bin/rethinkdb 12 days ago Up 12 days 0.0.0.0:49153->29015/tcp, 0.0.0.0:49154->8080/tcp, 0.0.0.0:49155->28015/tcp shipyard-rethinkdb
df01795a4f22 shipyard/rethinkdb:latest "/bin/bash -l" 12 days ago Up 12 days 28015/tcp, 29015/tcp, 8080/tcp shipyard-rethinkdb-data
a9b880a205be fedora:latest "/bin/python -m Simp 12 days ago Exited (-1) 12 days ago my_webserver2
[個別] Dockerコンテナの情報を見る
docker top
個々のコンテナ内でどんなプロセスが立ち上がっているかを確認するにはdocker top
を使います。
docker top <コンテナID> <psオプション>
の形式で実行し、psオプションにはLinuxでps
コマンドが
取れるオプションを指定します。(ややこしいですがps
はシステム上のコンテナ一覧取得に
使ってしまっているのでこうなったのでしょう。)
実行例
$ sudo docker top df01795a4f22 -ax
実行例結果
PID TTY STAT TIME COMMAND
22897 pts/1 Ss+ 0:00 /bin/bash -l
docker logs
docker logs
コマンドを用いることでattachモードで起動していなくともコンテナ内で
出力されたログを確認することができます。指定可能なオプションは3つです。
オプション | 説明 |
---|---|
-f, --follow |
tail -f と同じように出力を待ち受けます。Ctrl + c で停止します。attachモードとは違い Ctrl + c で切ってもコンテナは起動したままです。 |
-t, --timestamps | 出力と一緒にタイムスタンプを表示します。 |
--tail="<行数>" | 末尾から指定行数分の出力を表示します。 |
実行例
$ sudo docker logs -t --tail=3 341d035f815d
実行例結果
2015-01-13T05:43:11.857589182Z INFO[0000] shipyard version 2.0.6
2015-01-13T05:43:12.860659123Z INFO[0001] checking database
2015-01-13T05:43:12.872346882Z INFO[0001] controller listening on :8080
docker exec
docker 1.3以降からexec
コマンドが追加されました。exec
を利用すれば起動中の
コンテナ内でコマンドを実行できるため状態確認にも使うことができます。
実行形式はdocker exec <コンテナID> <オプション> <コマンド>
です。
指定可能なオプションは3つのみです。それぞれrun
コマンドと同じ意味を持っています。
オプション | 説明 |
---|---|
-d, --detach | バックグラウンドで実行する。 |
-i, --interactive=true | 対話モードで実行する。(標準入力をopenし続ける) |
-t, --tty | 擬似端末を起動する。 |
実行例
$ sudo docker exec -i e8f226ce407c ps -ax
実行例結果
PID TTY STAT TIME COMMAND
1 ? Ssl+ 25:12 /usr/bin/rethinkdb --bind all
6 ? S 0:00 /usr/bin/rethinkdb --bind all
77 ? R 0:00 ps -ax
さらにシェルを起動すれば、コンテナ内に入ることも可能です。
実行例
$ sudo docker exec -it e8f226ce407c /bin/bash
実行例結果
コンテナ内に入れば任意のコマンドを実行できます。起動中のコンテナに変更を加えることも可能です。
root@e8f226ce407c:/data# hostname
e8f226ce407c
root@e8f226ce407c:/data# ls
rethinkdb_data
まとめ
Docker利用にあたって現在のシステム情報やコンテナの状態を確認するには次のコマンドを使用できます。
Docker本体
目的 | コマンド |
---|---|
起動設定、起動中のプロセス確認 | systemctl status docker.service |
Dockerの各コンポーネントバージョン確認 | sudo docker version |
コンテナ全体
目的 | コマンド |
---|---|
コンテナとイメージの総数、disk使用量などの確認 | sudo docker info |
コンテナの起動イメージ、実行コマンド、 現在のステータス(UP, Exited) 確認 |
sudo docker ps (-a) |
個別コンテナ内
目的 | コマンド |
---|---|
プロセス確認 (コンテナ内での ps 実行に相当) |
sudo docker top <コンテナID> |
ログ確認 | sudo docker logs <オプション> <コンテナID> |
任意コマンド実行 (シェルも起動可能) |
sudo docker exec <コンテナID> <オプション> <コマンド> |