docker/docker-composeよく使うコマンド一覧

2020年6月14日Docker

dockerやdocker-composeを暫く使っていない間に、基本的なコマンドも思い出せなくなっていたので、よく使っていたコマンドをメモしています。

目次

よく使うdockerコマンド

docker image ls (docker images)

保持しているdockerイメージの一覧を表示します。

docker imageを操作する際に必要なimage idを調べるときによく利用しています。

$ docker image ls
REPOSITORY                  TAG                 IMAGE ID            CREATED             SIZE
flaskmvctemplate_flaskapp   latest              dd65817495ed        2 months ago        946MB
flaskmvctemplate_nginx      latest              8edb1e29bdd5        2 months ago        127MB
webfw_nginx                 latest              8edb1e29bdd5        2 months ago        127MB
redis                       latest              f0453552d7f2        3 months ago        98.2MB
nginx                       latest              a1523e859360        3 months ago        127MB
ubuntu                      latest              72300a873c2c        3 months ago        64.2MB
wordpress                   latest              f4bb25214386        3 months ago        540MB
mysql                       5.7                 d5cea958d330        3 months ago        440MB
python                      3.6                 971c66f6a27f        4 months ago        914MB
openjdk                     7                   d735a2057e60        13 months ago       475MB

 

docker image ls [docker image nameワイルドカード可]

保持しているdockerイメージの一覧からimage nameで絞り込むことができます。

image nameは「my*」のようにワイルドカードで指定できます。

$ docker image ls my*
REPOSITORY             TAG                 IMAGE ID            CREATED             SIZE
mysql                  5.7                 d5cea958d330        3 months ago        440MB
mysqltest_mysql_test   latest              d5cea958d330        3 months ago        440MB

 

docker image rm [docker image name または image id先頭の一部]

docker imageで不要なイメージを削除します。

ポイント

image idで削除する場合、全て入力する必要はなく他のimage idと区別できるところまで入力すればOK

$ docker image ls api
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
api                 latest              5621dddee9e7        40 hours ago        965MB

$ docker image rm 5621
Untagged: api:latest
Deleted: sha256:5621dddee9e70a3e8b905c594428ad0a50075ca89a32946fc742dce3a69e52fe
Deleted: sha256:623a6014051264b0c96a721fd91befe559b652c2814b0fbbf0e11d464a2d9e28
Deleted: sha256:ece5be9404b3d5fd84530486e1bb73168b84a843d5c4389a71480b9b55adba39
Deleted: sha256:cf02e22ffc3fd2c95b91791d858aa6c72431884932174bd5d4f5af9895fe48ff
Deleted: sha256:9c2a2defad98451957cdf9e0e4724ce41fdb095684e9ee188877e9df12ceb735
Deleted: sha256:eb59123915564c84fb29b2abe8f1ca148405441bff8f134c451ba69681f42702
Deleted: sha256:bcde4c50a480357d327c348c26f8de4a81b96e41426526bb59a4341f0156bc8c
Deleted: sha256:89d710dcb8853e52ed9b6f2e3803e966602ff35d7b581a3ed57aa43889190ab2
Deleted: sha256:0b1c7c9f56572eb7549193add386173768da94f50ec87a128f38e700b9f6b12d
Deleted: sha256:eb49e1ae02b97d335c4f8a8f7a430c1dbdfa963378cb6234474addbbf5180c39
Deleted: sha256:7ca3ba340bb0970cada527a5a02ab75e4952bb4bf8f7c4c98d6f1576d92f3dbe
Deleted: sha256:93b40b6441d0ca36a6da81b1fcb6a9b0323948d0bd0a8a1c03e81c60d612734f
Deleted: sha256:45dd086ae57c6fd65c977ce9b5b23be7ec7020c4c0fd07a7c22a83ed6c068211
Deleted: sha256:e8b232dc13de22d5046e5b707d279c0f49906f24a9abc17a3edc06edd80f0bc1

$ docker image ls api
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE

 

docker image prune

不要なdocker imageが多数ある場合に、rmコマンドで一つ一つ削除するのは面倒です。

そんなときに、削除しても影響のないdocker imageを全て削除してくれます。

$ docker image prune
WARNING! This will remove all dangling images.
Are you sure you want to continue? [y/N] y
Deleted Images:
deleted: sha256:617580ba5c851e60532cfdf1dd9f4d0063213f5a6d9e47d5359ab387bc39f9d5
deleted: sha256:0432061a44bd1ed0eade1406aa79d84029bb20177b55e400cdc1023d755a66c1
deleted: sha256:33e692b0e5aabfffabbece6af6c664849e6e44eb4d2d24d223b77d50618e7779
deleted: sha256:8725a697163ae1924c28a1a53be54fba83f2d9b3ce43a885783037775e818a70

Total reclaimed space: 153.5MB

 

docker login

docker hubの自分のアカウントに対してpullやpushを行う場合に、事前にログインしておく必要があります。

$ docker login

 

docker pull [docker image name]:[バージョンやタグ名]

docker hubやAWSのECRなどからdocker imageを取得します。

バージョンやタグ名を指定しない場合はデフォルトで「latest」を取得します。

$ docker pull nginx
Using default tag: latest
latest: Pulling from library/nginx
bf5952930446: Already exists
cb9a6de05e5a: Pull complete
9513ea0afb93: Pull complete
b49ea07d2e93: Pull complete
a5e4a503d449: Pull complete
Digest: sha256:b0ad43f7ee5edbc0effbc14645ae7055e21bc1973aee5150745632a24a752661
Status: Downloaded newer image for nginx:latest
docker.io/library/nginx:latest

 

docker tag [docker image id] [アカウント名/image name:バージョンやタグ名]

主な利用シーンとしては、自分のdocker hubやAWSのECRのアカウントにdockerイメージをpushする場合です。

$ docker tag 3108fcdd3470 xxx/react-app:v2.3.4

$ docker image ls
REPOSITORY                           TAG                 IMAGE ID            CREATED             SIZE
xxx/react-app               v2.3.4              3108fcdd3470        3 days ago          27.6MB

 

docker push [アカウント名/image name:バージョンやタグ名]

docker hubやAWSのECRにdockerイメージをpushします。

$ docker push xxx/my-nginx:latest
The push refers to repository [docker.io/xxx/my-nginx]
550333325e31: Mounted from library/nginx
22ea89b1a816: Mounted from library/nginx
a4d893caa5c9: Mounted from library/nginx
0338db614b95: Mounted from library/nginx
d0f104dc0a1f: Mounted from library/nginx
latest: digest: sha256:179412c42fe3336e7cdc253ad4a2e03d32f50e3037a860cf5edbeb1aaddb915c size: 1362

 

docker system prune

「docker image prune」の削除対象はdocker imageだけでしたが、ネットワークやキャッシュも合わせて削除してくれるのが「docker system prune」です。

削除しても影響のないdocker imageやネットワーク、キャッシュを全て削除してくれます。

取り敢えず、ローカル環境を綺麗にしたい場合によく利用します。

docker system prune
WARNING! This will remove:
        - all stopped containers
        - all networks not used by at least one container
        - all dangling images
        - all build cache
Are you sure you want to continue? [y/N] y
Deleted Images:
deleted: sha256:617580ba5c851e60532cfdf1dd9f4d0063213f5a6d9e47d5359ab387bc39f9d5
deleted: sha256:0432061a44bd1ed0eade1406aa79d84029bb20177b55e400cdc1023d755a66c1
deleted: sha256:33e692b0e5aabfffabbece6af6c664849e6e44eb4d2d24d223b77d50618e7779
deleted: sha256:8725a697163ae1924c28a1a53be54fba83f2d9b3ce43a885783037775e818a70

Total reclaimed space: 153.5MB

 

docker build -t [docker image name] .

Dockerfileを元にdocker imageを作成する場合のコマンドです。

イメージ名だけど指定するシンプルなビルド方法です。

  • 「-t」でイメージ名を指定
  • Dockerfileを配置したディレクトリでコマンドを実行
  • Dockerfileのファイル名は「Dockerfile」
$ docker build -t flaskapp .
Sending build context to Docker daemon  924.7kB
Step 1/8 : FROM python:3.6
 ---> 971c66f6a27f
:
Step 8/8 : CMD ["uwsgi", "--ini", "/var/www/uwsgi.ini"]
 ---> Using cache
 ---> 495e145fe110
Successfully built 495e145fe110
Successfully tagged flaskapp:latest

 

docker build -f [docker file name] -t [docker image name] .

dockerファイル名が「Dockerfile」以外の場合は「-f」でファイル名を指定することができます。

環境別などでDockerfileを使い分けている場合などに利用します。

$ docker build -f Dockerfile-dev -t flaskapp .
Sending build context to Docker daemon  924.7kB
Step 1/8 : FROM python:3.6
 ---> 971c66f6a27f
:
Step 8/8 : CMD ["uwsgi", "--ini", "/var/www/uwsgi.ini"]
 ---> Using cache
 ---> 495e145fe110
Successfully built 495e145fe110
Successfully tagged flaskapp:latest

 

docker run -d [docker image name]

ビルド済みのdocker imageをバックグラウンドで実行します。

「-d」はバックグランドで実行するオプションです。

ポート番号はDockerfileの「EXPOSE」で指定したポート番号になります。

$ docker run -d flaskapp
c06fe2d110b093752ff9b79e4a3670f68e3da952bbab1a3d7e348842bd7c1078

実行が成功すると「CONTAINER ID」が表示されます。

 

docker run -d -p [host port]:[container port] [docker image name]

コンテナのポートをローカルにポートフォワードする場合は、「-p」オプションを指定します。

ローカルの80番ポートをコンテナの5000番ポートに転送する場合は次のように実行します。

「docker container ls」コマンドで確認するとポートフォワードされていることがわかります。

$ docker run -d -p 80:5000 flaskapp
3dbb615cb97eb0f6692595f87e16ce1798010d7a7ee8a560b3e7c13ad6cefe56

$ docker container ls
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS                  NAMES
3dbb615cb97e        flaskapp            "uwsgi --ini /var/ww…"   27 seconds ago      Up 25 seconds       0.0.0.0:80->5000/tcp   vigorous_mestorf

 

docker container ls [-a]

docker run で起動中のコンテナの一覧を表示します。

停止したコンテナやエラーで実行できなかったコンテナも含めて表示する場合は「-a」オプションを指定します。

$ docker container ls
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS               NAMES
02c11dcb5110        flaskapp            "uwsgi --ini /var/ww…"   6 seconds ago       Up 5 seconds        5000/tcp            optimistic_nobel

 

docker container start [container id先頭の一部]

停止中のコンテナを起動する場合のコマンドです。

ポイント

container idを全て入力する必要はなく他のcontainer idと区別できるところまで入力すればOK

$ docker container ls -a
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS                     PORTS               NAMES
02c11dcb5110        flaskapp            "uwsgi --ini /var/ww…"   6 minutes ago       Exited (0) 8 seconds ago                       optimistic_nobel

$ docker container start 02c1
02c1

$ docker container ls
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS               NAMES
02c11dcb5110        flaskapp            "uwsgi --ini /var/ww…"   7 minutes ago       Up 8 seconds        5000/tcp            optimistic_nobel

 

docker container stop [container id先頭の一部]

実行中のコンテナを停止する場合のコマンドです。

$ docker container ls
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS               NAMES
02c11dcb5110        flaskapp            "uwsgi --ini /var/ww…"   7 minutes ago       Up 8 seconds        5000/tcp            optimistic_nobel

$ docker container stop 02c1
02c1

$ docker container ls -a
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS                     PORTS               NAMES
02c11dcb5110        flaskapp            "uwsgi --ini /var/ww…"   13 minutes ago      Exited (0) 3 seconds ago                       optimistic_nobel

 

docker container rm [container id先頭の一部]

不要になったコンテナを削除する場合のコマンドです。

実行中のコンテナは削除できないので、停止させてから削除します。

$ docker container ls -a
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS               NAMES
02c11dcb5110        flaskapp            "uwsgi --ini /var/ww…"   15 minutes ago      Up 6 seconds        5000/tcp            optimistic_nobel

$ docker container stop 02c1
02c1

$ docker container rm 02c1
02c1

$ docker container ls -a
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS               NAMES

 

docker container prune

不要なコンテナが複数ある場合にdocker container rmコマンドで一つ一つ削除するのは面倒です。

pruneコマンドを利用するとまとめて削除することができます。

$ docker container ls -a
CONTAINER ID        IMAGE               COMMAND                  CREATED              STATUS                     PORTS               NAMES
85f7dbe13ea2        flaskapp            "uwsgi --ini /var/ww…"   54 seconds ago       Exited (0) 3 seconds ago                       boring_liskov
21d79be1e65e        flaskapp            "uwsgi --ini /var/ww…"   About a minute ago   Exited (0) 3 seconds ago                       nostalgic_euclid

$ docker container prune
WARNING! This will remove all stopped containers.
Are you sure you want to continue? [y/N] y
Deleted Containers:
85f7dbe13ea2692ab6d445da3c61daf304522dcede91b1d3d7fb60490c6b973f
21d79be1e65ee84553b4cea583fc8eb7d489f97228e67cf15e5a5f6811cb91c8

Total reclaimed space: 136.7kB

 

docker container logs [container id先頭の一部]

実行中のコンテナやエラーで停止したコンテナのログを確認するときのコマンドです。

$ docker container ls
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS                  NAMES
a311f769d546        flaskapp            "uwsgi --ini /var/ww…"   10 seconds ago      Up 9 seconds        0.0.0.0:80->5000/tcp   lucid_noether

$ docker container logs a311
[uWSGI] getting INI configuration from /var/www/uwsgi.ini
*** Starting uWSGI 2.0.18 (64bit) on [Sun Jun 14 13:04:05 2020] ***
compiled with version: 8.3.0 on 14 June 2020 12:41:03
os: Linux-4.19.84-microsoft-standard #1 SMP Wed Nov 13 11:44:37 UTC 2019
nodename: a311f769d546
machine: x86_64
clock source: unix
pcre jit disabled
detected number of CPU cores: 8
current working directory: /var/www
detected binary path: /usr/local/bin/uwsgi
uWSGI running as root, you can use --uid/--gid/--chroot options

 

docker exec -it [container id先頭の一部] /bin/bash

コンテナの中で作業したり、ビルドした内容を確認する場合に、コンテナ内にログインするコマンドです。

$ docker container ls
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS                  NAMES
a311f769d546        flaskapp            "uwsgi --ini /var/ww…"   28 minutes ago      Up 28 minutes       0.0.0.0:80->5000/tcp   lucid_noether

$ docker exec -it a311 /bin/bash

root@a311f769d546:/var/www# ls
Dockerfile   database           migrate.py        settings.py  uwsgi.ini
README.md    init_data_load.py  myapp             static
__pycache__  main.py            requirements.txt  templates

root@a311f769d546:/var/www# exit
exit

 

docker network ls

docker-composeでネットワークを指定した場合などに、正しくネットワークが作成されているかなどを確認する場合に利用します。

$ docker network ls
NETWORK ID          NAME                DRIVER              SCOPE
122d0652aa49        bridge              bridge              local
0017cd6fbcce        host                host                local
0c064281d227        none                null                local

 

docker volume ls

docker-compose でvolumesで指定した一覧を確認できます。

$ docker volume ls
DRIVER              VOLUME NAME
local               mysqltest_db-data
local               webfw_db-data
local               webfw_static-data
local               webfw_tmp-data

 

docker volume rm [volume name]

volume名を指定して削除するコマンドです。

$ docker volume ls
DRIVER              VOLUME NAME
local               mysqltest_db-data
local               webfw_db-data
local               webfw_static-data
local               webfw_tmp-data

$ docker volume rm mysqltest_db-data 
mysqltest_db-data

$ docker volume ls
DRIVER              VOLUME NAME
local               webfw_db-data
local               webfw_static-data
local               webfw_tmp-data

 

docker volume prune

不要なvolumeが複数ある場合にdocker volume rmコマンドで一つ一つ削除するのは面倒です。

pruneコマンドを利用するとまとめて削除することができます。

$ docker volume ls
DRIVER              VOLUME NAME
local               webfw_db-data
local               webfw_static-data
local               webfw_tmp-data

$ docker volume prune
WARNING! This will remove all volumes not used by at least one container.
Are you sure you want to continue? [y/N] y
Deleted Volumes:
webfw_db-data
webfw_static-data
webfw_tmp-data

Total reclaimed space: 854.2kB

$ docker volume ls
DRIVER              VOLUME NAME

 

よく使うdocker-composeコマンド

docker-composeの設定ファイル名がデフォルトの「docker-compose.yml」ファイルとなっている場合を前提に各コマンドを紹介しています。

ファイル名を指定する場合は、「-f」オプションで指定することができます。

docker-compose up –build -d

docker-compose.ymlで設定したコンテナのビルドと起動を同時に行うコマンドです。

「-d」オプションをしているのでバックグラウンド実行になります。

$ docker-compose up --build -d
Creating network "flaskmvctemplate_my_network" with driver "bridge"
Building flaskapp
Step 1/8 : FROM python:3.6
 ---> 971c66f6a27f
Step 2/8 : WORKDIR /var/www
 ---> Using cache
 ---> 523b28fdaa15
Step 3/8 : ADD . /var/www
 ---> Using cache
 ---> 7919a23c6a73
Step 4/8 : RUN pip install --trusted-host pypi.python.org -r requirements.txt
 ---> Using cache
 ---> b8c367d0223f
Step 5/8 : RUN python migrate.py
 ---> Using cache
 ---> ca46b0426a63
Step 6/8 : RUN python init_data_load.py
 ---> Using cache
 ---> 205d4ebd0138
Step 7/8 : EXPOSE 5000
 ---> Using cache
 ---> 7a52d92e632b
Step 8/8 : CMD ["uwsgi", "--ini", "/var/www/uwsgi.ini"]
 ---> Using cache
 ---> dd65817495ed
Successfully built dd65817495ed
Successfully tagged flaskmvctemplate_flaskapp:latest
Building nginx
Step 1/2 : FROM nginx
 ---> a1523e859360
Step 2/2 : CMD ["nginx", "-g", "daemon off;", "-c", "/etc/nginx/nginx.conf"]
 ---> Using cache
 ---> 8edb1e29bdd5
Successfully built 8edb1e29bdd5
Successfully tagged flaskmvctemplate_nginx:latest
Creating flaskmvctemplate_flaskapp_1 ... 
Creating flaskmvctemplate_flaskapp_1 ... done
Creating nginx ... 
Creating nginx ... done

 

docker-compose ps

docker-compose.ymlで起動したコンテナの状態を確認するコマンドです。

上記の「docker-compose up –build -d」で実行した後に確認した結果です。

$ docker-compose ps
           Name                          Command               State         Ports       
-----------------------------------------------------------------------------------------
flaskmvctemplate_flaskapp_1   uwsgi --ini /var/www/uwsgi.ini   Up      5000/tcp          
nginx                         nginx -g daemon off; -c /e ...   Up      0.0.0.0:80->80/tcp

 

docker-compose down [-v]

docker-compose.ymlで起動したコンテナを削除する場合のコマンドです。

「-v」オプションを指定するとvolumeも合わせて削除できます。

$ docker-compose down
Stopping nginx                       ... done
Stopping flaskmvctemplate_flaskapp_1 ... done
Removing nginx                       ... done
Removing flaskmvctemplate_flaskapp_1 ... done
Removing network flaskmvctemplate_my_network

 

docker-compose start

docker-compose.ymlでビルドしたコンテナを起動する場合のコマンドです。

stopコマンドで停止中のコンテナを起動する場合によく利用します。

$ docker-compose start
Starting flaskapp ... done
Starting nginx    ... done

 

docker-compose exec [サービス名] [コマンド]

コンテナにログインしてコマンド操作したい場合によく利用します。

$ docker-compose exec app /bin/bash
root@ca6d40524a59:/app# 

 

docker-compose stop

docker-compose.ymlで起動中のコンテナを停止する場合のコマンドです。

$ docker-compose stop
Stopping nginx                       ... done
Stopping flaskmvctemplate_flaskapp_1 ... done

Docker

Posted by snow