Шапаргалка по Docker Engine

22.02.2022

Для локальной разработки я использую Docker Engine совместно с Docker Compose (о нем поговорим вдругой раз), так как последний позволяет минимизировать рутину. Поэтому в данном статье рассмотрю лишь необходимый функционал самого Docker Engine.

Страница будет изменяться по мере необходимости.

Начало

Почитать о том что такое Docker Engine можно в официальной документации или по-русски здесь.

Инструкция по установке проста, ее можно найти в документации.

Docker Engine требует работы от sudo, добавим текущего (нужного) пользователя в группу docker и от него можно запускать без sudo:

•••
bash
$ sudo usermod -aG docker $USER

Образы

Список локальных образов:

•••
bash
$ docker images REPOSITORY TAG IMAGE ID CREATED SIZE mdk_php latest c2aff72a5148 5 hours ago 487MB php 7.3-cli d29faad18647 2 weeks ago 467MB mysql 5.7 c20987f18b13 2 weeks ago 448MB

  • --digests - показать sha256 образов из глобального репозитория (добавляет в таблицу столбец DIGEST)
  • --no-trunc - не обрезать вывод информации образов, не будет обрезаться IMAGE ID - sha256 локального образа
  • -q, --quiet - показать только идентификаторы образов (IMAGE ID, разделенные новой строкой)
Здесь и далее опция -q (--quiet) поможет в "массовости" действий, например удалить все образы docker rmi $(docker images -q)

Удалить образ(ы):

•••
bash
$ docker rmi ID

  • -f, --force - принудительно

Контейнеры

Список контейнеров (без аргументов/по умолчанию - запущенных)

•••
bash
$ docker ps # или # docker container ls CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 7808a98abfc9 mysql:5.7 "docker-entrypoint.s…" 4 hours ago Exited (0) 3 hours ago mysql e766de48ddbb php:7.1-cli "docker-php-entrypoi…" 3 days ago Exited (0) 3 days ago adoring_dhawan 5137e6cf2aca hello-world "/hello" 3 days ago Exited (0) 3 days ago laughing_brattain

аргументы:

  • -a, --all - показать все контейнеры (запущенные/остановленные)
  • -q, --quiet - показать только список идентификаторов (CONTAINER ID) разделенных переводом строки
  • -n, --last N - показать N последних созданных контейнеров
  • -s, --size - добавить в сводную таблицу столбец с обозначающий размер образа
Зайти в запущенный контейнер:
•••
bash
$ docker exec -it id_or_name /bin/bash

В данном случае используется 2 опции, которые позволяют в интерактивном режиме войти в контейнер и предоставить средства для ввода команд:

  • -i, --interactive - запустить в интерактивном режиме
  • -t, --tty - выделить псевдо TTY
Другие опции exec:
  • -u, --user - указать пользователя, от имени которого будет выполняться команда (<name|uid>[:<group|gid>))
  • -w, --workdir - указать рабочую директорию для выполнения команды
Удалить контейнер(ы):
•••
bash
$ docker rm id_or_name

  • -f, --force - принудительное удаление работающего (SIGKILL)
  • -v, --volumes - удалить тома связанные с контейнером

Сети

Список сетей:

•••
bash
$ docker network ls NETWORK ID NAME DRIVER SCOPE 5ed3c66871b5 bridge bridge local 92fa558c94fd mdk_app-network bridge local fc3a6f2c3c05 opencart30_app-network bridge local 722176324d31 shop-script_app-network bridge local

Информация по одной или нескольким сетям (где в качестве указания сети может быть ID или NAME):

•••
bash
docker network inspect mdk_app-network [ { "Name": "mdk_app-network", "Id": "92fa558c94fdd9aeaa9eef9942955d4185ef8ddf68c86c619d840ff197756918", "Created": "2022-02-06T13:16:38.612580291+03:00", "Scope": "local", "Driver": "bridge", "EnableIPv6": false, "IPAM": { "Driver": "default", "Options": null, "Config": [ { "Subnet": "192.168.0.1/24", "Gateway": "192.168.0.1" } ] }, "Internal": false, "Attachable": true, "Ingress": false, "ConfigFrom": { "Network": "" }, "ConfigOnly": false, "Containers": {}, "Options": {}, "Labels": { "com.docker.compose.network": "app-network", "com.docker.compose.project": "mdk", "com.docker.compose.version": "1.25.0" } } ]

Очистка

Удалить все ресурсы (образы, тома, сети) не связанные с контейнерами (висящие ресурсы):

•••
bash
$ docker system prune

  • -a, --all - удалить все ресурсы не связанные с запущенными контейнерами (и висящие и неиспользуемые ресурсы), т.е. удалить все кроме работающего