docker でよく使用したコマンドの覚え書き


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
```