docker でごちゃごちゃしてたときによく使用したコマンドのメモ。
環境
- CentOS 7.2
- Docker version 1.9.1, build a34a1d5
状態確認関連
docker images - ローカルに配置されている docker image のリストを表示
# docker images
REPOSITORY TAG IMAGE ID CREATED VIRTUAL SIZE
ubuntu 14.04 6cc0fc2a5ee3 11 days ago 187.9 MB
tomcat 8.0 a8a64577b5c0 3 weeks ago 350 MB
centos 6.7 7e8fbd86f46d 3 months ago 190.6 MB
#
docker ps -a - コンテナが起動中なのか、停止しているのかを確認
# docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
a38610e39e41 b80 "/bin/bash" 8 minutes ago Exited (0) 35 seconds ago happy_shaw
#
コンテナの実行関連
docker run - コンテナの起動
# docker images
REPOSITORY TAG IMAGE ID CREATED VIRTUAL SIZE
centos 6.7 7e8fbd86f46d 3 months ago 190.6 MB
# docker run 7e8fbd86f46d
#
コンテナ内で実行するコマンドを指定することもできる。
# docker run 7e8fbd86f46d echo hello
hello
#
以下はコンテナ内で bash を起動し、そのままコンテナ内でコマンド実施。コンテナのデバッグしたいときに便利。
# docker run -t -i 7e8fbd86f46d /bin/bash
[root@587745dfdb66 /]# ps
PID TTY TIME CMD
1 ? 00:00:00 bash
12 ? 00:00:00 ps
[root@587745dfdb66 /]# exit
exit
#
-d オプション
コンテナをバックグラウンドで起動する。通常のコンテナ起動はこれを使うかな。
# docker run -d 7e8fbd86f46d echo hello
abe501c12f2ff95591e31db8fbf2f11aa95a986c8a1eb72240e7a7dffac49a58
#
-v オプション
コンテナから、ホストのディレクトリが見えるようにする。
以下は、ホストのディレクトリ /root/src を、コンテナ内の /src から見えるように設定。
# docker run -v /root/src/:/src 4cdb
-p オプション
コンテナのポートに、ホストのポートからアクセスできるようにする。
以下は、コンテナの 8080 ポートに、ホストの 8888 ポートからアクセスできるように設定。
docker run -p 8888:8080 4cdb
docker exec - 起動中のコンテナでコマンド実行
docker run と似てるけど、こちらは起動中のコンテナでコマンドを実施できる。デバックに使える。
# docker exec -t -i c31decd92642 /bin/bash
root@c31decd92642:/# ps -aux
USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND
root 1 0.0 0.0 4440 308 ? Ss 06:46 0:00 /bin/sh /usr/local/bin/run
tomcat7 31 0.3 9.9 2623472 101260 ? Sl 06:46 0:30 /usr/lib/jvm/java-7-openjdk-amd64/bin/java -Djava.util.logging.config.file=/var/lib/
root 9887 0.0 0.0 4340 360 ? S 09:11 0:00 sleep 60
root 9888 0.1 0.1 18136 1932 ? Ss 09:11 0:00 /bin/bash
root 9903 0.0 0.1 15564 1152 ? R+ 09:12 0:00 ps -aux
root@c31decd92642:/#
docker logs - 起動中のコンテナのログ採取
コンテナのログを採取する。docker run -d でバックグラウンドでコンテナを起動している場合のログ確認で使う。Dockerfile の ENTRYPOINT の標準出力と標準エラー出力を取得かな?
# docker logs -f -t c31decd92642
2016-01-31T06:46:21.444913885Z * Starting Tomcat servlet engine tomcat7
2016-01-31T06:46:26.494994105Z ...fail!
2016-01-31T06:46:26.495192971Z Generate the index.
2016-01-31T06:46:26.507219706Z Loading the default instance configuration ...
2016-01-31T06:46:26.568609547Z Creating default /var/opengrok/logging.properties ...
2016-01-31T06:53:16.328501313Z Update the index every one minute.
2016-01-31T09:13:35.385814339Z Loading the default instance configuration ...
^C
#
コンテナの停止・削除
docker stop - コンテナの停止
# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
90a9b6c20766 716a "/usr/local/bin/run" 9 minutes ago Up 9 minutes 0.0.0.0:8888->8080/tcp adoring_jennings
# docker stop 90a9
90a9
#
docker rm - コンテナの削除
# docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
a38610e39e41 b80 "/bin/bash" 8 minutes ago Exited (0) 35 seconds ago happy_shaw
# docker rm a38
a38
# docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
#
docker rmi - イメージの削除
# docker rmi 4f30
Untagged: test/test:latest
Deleted: 4f3020299757938fad7d629545b3fee82119661b9dd50efc6f4699ac87dd5137
Deleted: e00223941387724c7f45406f45b913dbb55e392d25201c3c4edb7f7cb143b24e
Deleted: 14eb5c6eb0d7cbed2480e0d0fdab267a7468f883da1fe698d70ce4c54eb1bf95
#
コンテナもイメージも削除できなくてどうしようもないとき
root filesystem の使用率が 100% になり、docker rm, docker rmi の実行が
エラーとなり、コンテナ削除できない状態になったとき。
どうしようもなくなったので、以下で初期化。
# systemctl stop docker
# umount /var/lib/docker/devicemapper/mnt/*
# dmsetup remove /dev/dm-0
# rm -rf /var/lib/docker
# yum remove docker-engine
# yum install docker-engine