docker/docker-composeよく使うコマンド一覧
dockerやdocker-composeを暫く使っていない間に、基本的なコマンドも思い出せなくなっていたので、よく使っていたコマンドをメモしています。
- 1. よく使うdockerコマンド
- 1.1. docker image ls (docker images)
- 1.2. docker image ls [docker image nameワイルドカード可]
- 1.3. docker image rm [docker image name または image id先頭の一部]
- 1.4. docker image prune
- 1.5. docker login
- 1.6. docker pull [docker image name]:[バージョンやタグ名]
- 1.7. docker tag [docker image id] [アカウント名/image name:バージョンやタグ名]
- 1.8. docker push [アカウント名/image name:バージョンやタグ名]
- 1.9. docker system prune
- 1.10. docker build -t [docker image name] .
- 1.11. docker build -f [docker file name] -t [docker image name] .
- 1.12. docker run -d [docker image name]
- 1.13. docker run -d -p [host port]:[container port] [docker image name]
- 1.14. docker container ls [-a]
- 1.15. docker container start [container id先頭の一部]
- 1.16. docker container stop [container id先頭の一部]
- 1.17. docker container rm [container id先頭の一部]
- 1.18. docker container prune
- 1.19. docker container logs [container id先頭の一部]
- 1.20. docker exec -it [container id先頭の一部] /bin/bash
- 1.21. docker network ls
- 1.22. docker volume ls
- 1.23. docker volume rm [volume name]
- 1.24. docker volume prune
- 2. よく使う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