docker-composeとdockerコマンドまとめ



# 前提条件

- MacOS Sierra 10.12.6
- homebrew
- iTerm2
- Docker for Mac 17.06.0

せっかくdockerを使ったので、よく使うコマンドをまとめておきます
（MacをSierraにver upしましたが、この辺には全く影響がなかったです）

# コマンド

### サービスの構築または再構築

```console
$ docker-compose build
```

### コンテナの作成と開始

```console
$ docker-compose up
```

### サービスの停止

```console
$ docker-compose stop
```

### コンテナの停止

```console
$ docker-compose down
```


### コンテナ一覧(docker)

```console
$ docker ps
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS                              NAMES
bb8bf3e2a7fa        docker_nginx        "nginx -g 'daemon ..."   3 days ago          Up 20 seconds       443/tcp, 0.0.0.0:8080->80/tcp      nginx
043404e9fe75        docker_php          "docker-php-entryp..."   3 days ago          Up 21 seconds       9000/tcp, 0.0.0.0:9001->9001/tcp   php
472f8a3774a4        docker_mysql        "docker-entrypoint..."   4 days ago          Up 21 seconds       0.0.0.0:3306->3306/tcp             mysql
```

### コンテナ一覧(docker-compose)
```console
$ docker-compose ps
Name               Command              State                Ports
--------------------------------------------------------------------------------
mysql   docker-entrypoint.sh mysqld     Up      0.0.0.0:3306->3306/tcp
nginx   nginx -g daemon off;            Up      443/tcp, 0.0.0.0:8080->80/tcp
php     docker-php-entrypoint php-fpm   Up      9000/tcp, 0.0.0.0:9001->9001/tcp
```

docker-composeとdockerで出力内容がちょっと違いますね・・・

### 指定したコンテナに入る

```console
$ docker exec -it 043404e9fe75 bash
root@043404e9fe75:/var/www/html#
```

043404e9fe75の部分はdocker psで調べたCONTAINER IDが入ります
（なぜdocker-compose psでCONTAINER IDが出ないんだろうか・・・？）

### イメージ一覧(docker)
```console
$ docker images
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
docker_nginx        latest              713e73265b01        3 days ago          183MB
<none>              <none>              457f03c3a8a5        3 days ago          183MB
<none>              <none>              8c55eb4ab305        3 days ago          183MB
<none>              <none>              78d89e63b832        3 days ago          183MB
<none>              <none>              e4134c2d8f9f        3 days ago          183MB
<none>              <none>              e4f8e7437c52        4 days ago          183MB
<none>              <none>              30342c23b22c        4 days ago          183MB
docker_php          latest              edb84cd10961        4 days ago          430MB
<none>              <none>              4da40db9cde2        3 months ago        183MB
php                 7.1-fpm             52e982dc973b        3 months ago        382MB
mysql               5.6                 ed7b6c642b9d        3 months ago        299MB
docker_mysql        latest              ed7b6c642b9d        3 months ago        299MB
nginx               1.11                5766334bdaa0        4 months ago        183MB
```

### イメージ一覧(docker-compose)

```console
$ docker-compose images
Container    Repository     Tag       Image Id      Size
---------------------------------------------------------
mysql       docker_mysql   latest   ed7b6c642b9d   285 MB
nginx       docker_nginx   latest   713e73265b01   174 MB
php         docker_php     latest   edb84cd10961   410 MB
```

### ログをみる

```console
$ docker-compose logs
```

### サービスの再起動

```console
$ docker-compose restart
Restarting nginx ... done
Restarting php ... done
Restarting mysql ... done
```


## 作成途中によく使ったコマンド
docker-compose.ymlを変更してbuild,upしても、なんだかよくわからないけど、うまくいかない。
書き換えたのになんだかちゃんと反映されてない気がする・・・あーもう、まっさらにしてやり直したい！という時に使うコマンド。
まっさらにしたら動いたよってことがあるので、試してみるとよいかもです。（ちゃんと原因を追求すべき時もありますが・・・）


### コンテナをまとめて削除

```console
$ docker ps -a | awk 'NR>1 {print $1}' | xargs docker rm
5ee1b3b893db
48d49f8cde1b
・・・
Error response from daemon: You cannot remove a running container 472f8a3774a4e62b5a64bea3f11ad756c768323c5bdd833e695390d4374a341f. Stop the container before attempting removal or force remove
```

削除できない時、強制的に削除するなら-fをつけます
（↑のエラーは、ちゃんと停止しないで、いきなりコンテナ削除しようとしたので怒られています。停止のコマンドがあるので使いましょうw）

```console
$ docker ps -a | awk 'NR>1 {print $1}' | xargs docker rm -f
```

### imageをまとめて削除

```console
$ docker images | awk 'NR>1 {print $3}' | xargs docker rmi
Untagged: docker_nginx:latest
Deleted: sha256:713e73265b013ff8964299d40c603b63a715a5040cd8ffa6cd386c6d03707d2f
・・・
Error response from daemon: conflict: unable to delete ed7b6c642b9d (must be forced) - image is referenced in multiple repositories
```

こちらも強制削除するなら-fをつけます

```console
$ docker images | awk 'NR>1 {print $3}' | xargs docker rmi -f
```

ちなみに作成途中でよく困ったのが、コンテナの中に入ったら、vi入れてないのにviでファイルを見ようとして怒られる・・・という割としょうもないミスです。（わかっているのに、つい・・・）


# 参考資料
docker-compose コマンド概要
http://docs.docker.jp/compose/reference/overview.html