Dockerの基本操作をCentOS 7で確認 その2 〜現在の状態を確認する 〜

  • 8
    いいね
  • 0
    コメント
この記事は最終更新日から1年以上が経過しています。

前回はインストールからイメージの取得、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> <オプション> <コマンド>