docker
docker-compose

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

More than 1 year has passed since last update.

前提条件

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

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

コマンド

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

$ docker-compose build

コンテナの作成と開始

$ docker-compose up

サービスの停止

$ docker-compose stop

コンテナの停止

$ docker-compose down

コンテナ一覧(docker)

$ 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)

$ 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で出力内容がちょっと違いますね・・・

指定したコンテナに入る

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

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

イメージ一覧(docker)

$ 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)

$ 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

ログをみる

$ docker-compose logs

サービスの再起動

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

作成途中によく使ったコマンド

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

コンテナをまとめて削除

$ 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)

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

imageをまとめて削除

$ 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をつけます

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

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

参考資料

docker-compose コマンド概要
http://docs.docker.jp/compose/reference/overview.html