Help us understand the problem. What is going on with this article?

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

前提条件

  • 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

tomo62
仕事ではサーバーサイド、最近はやたらPHPの案件が多いです。 PythonとかCとか、現場に放り込まれて覚えたタイプです。 HTMLとかCSSとかJSも、誰も書いてくれる人がいないときは書きます。 必要に迫られたら何言語だろうが書いているので、書けはするが知識が深くなってない、ダメエンジニア。 最近ちょっと(いやだいぶ)忙しい現場に放り込まれたので、更新ができてません・・・
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away