Время на прочтение
5 мин
Количество просмотров 542K
Прим. перев.: Неделю назад Aymen El Amri, руководящий компанией eralabs и создавший обучающий курс «Безболезненный Docker», опубликовал свой Docker Cheat Sheet — шпаргалку по основным командам Docker. Git-репозиторий этого документа на GitHub уже набрал 1000+ stars и несколько сторонних контрибьюторов, что подтвердило его актуальность и пользу.
Представленные здесь команды описаны минимально (с акцентом на читаемость как есть) и включают в себя установку Docker, работу с реестрами и репозиториями, контейнерами, образами, сетью, Docker Swarm. Ниже представлен перевод шпаргалки в её состоянии на 2 сентября с дополнениями из комментариев ниже.
Установка
Linux
curl -sSL https://get.docker.com/ | sh
Mac
Скачайте dmg по этой ссылке:
https://download.docker.com/mac/stable/Docker.dmg
Windows
Используйте MSI-инсталлятор:
https://download.docker.com/win/stable/InstallDocker.msi
Реестры и репозитории Docker
Вход в реестр
docker login
docker login localhost:8080
Выход из реестра
docker logout
docker logout localhost:8080
Поиск образа
docker search nginx
docker search nginx -- filter stars=3 --no-trunc busybox
Pull (выгрузка из реестра) образа
docker pull nginx
docker pull eon01/nginx localhost:5000/myadmin/nginx
Push (загрузка в реестр) образа
docker push eon01/nginx
docker push eon01/nginx localhost:5000/myadmin/nginx
Первые действия с контейнерами
Создание контейнера
docker create -t -i eon01/infinite --name infinite
Первый запуск контейнера
docker run -it --name infinite -d eon01/infinite
Переименование контейнера
docker rename infinite infinity
Удаление контейнера
docker rm infinite
Обновление контейнера
docker update --cpu-shares 512 -m 300M infinite
Запуск и остановка контейнеров
Запуск остановленного контейнера
docker start nginx
Остановка
docker stop nginx
Перезагрузка
docker restart nginx
Пауза (приостановка всех процессов контейнера)
docker pause nginx
Снятие паузы
docker unpause nginx
Блокировка (до остановки контейнера)
docker wait nginx
Отправка SIGKILL (завершающего сигнала)
docker kill nginx
Отправка другого сигнала
docker kill -s HUP nginx
Подключение к существующему контейнеру
docker attach nginx
Получение информации о контейнерах
Работающие контейнеры
docker ps
docker ps -a
Логи контейнера
docker logs infinite
Информация о контейнере
docker inspect infinite
docker inspect --format '{{ .NetworkSettings.IPAddress }}' $(docker ps -q)
События контейнера
docker events infinite
Публичные порты
docker port infinite
Выполняющиеся процессы
docker top infinite
Использование ресурсов
docker stats infinite
Изменения в файлах или директориях файловой системы контейнера
docker diff infinite
Управление образами
Список образов
docker images
Создание образов
docker build .
docker build github.com/creack/docker-firefox
docker build - < Dockerfile
docker build - < context.tar.gz
docker build -t eon/infinite .
docker build -f myOtherDockerfile .
curl example.com/remote/Dockerfile | docker build -f - .
Удаление образа
docker rmi nginx
Загрузка репозитория в tar (из файла или стандартного ввода)
docker load < ubuntu.tar.gz
docker load --input ubuntu.tar
Сохранение образа в tar-архив
docker save busybox > ubuntu.tar
Просмотр истории образа
docker history
Создание образа из контейнера
docker commit nginx
Тегирование образа
docker tag nginx eon01/nginx
Push (загрузка в реестр) образа
docker push eon01/nginx
Сеть
Создание сети
docker network create -d overlay MyOverlayNetwork
docker network create -d bridge MyBridgeNetwork
docker network create -d overlay
--subnet=192.168.0.0/16
--subnet=192.170.0.0/16
--gateway=192.168.0.100
--gateway=192.170.0.100
--ip-range=192.168.1.0/24
--aux-address="my-router=192.168.1.5" --aux-address="my-switch=192.168.1.6"
--aux-address="my-printer=192.170.1.5" --aux-address="my-nas=192.170.1.6"
MyOverlayNetwork
Удаление сети
docker network rm MyOverlayNetwork
Список сетей
docker network ls
Получение информации о сети
docker network inspect MyOverlayNetwork
Подключение работающего контейнера к сети
docker network connect MyOverlayNetwork nginx
Подключение контейнера к сети при его запуске
docker run -it -d --network=MyOverlayNetwork nginx
Отключение контейнера от сети
docker network disconnect MyOverlayNetwork nginx
Очистка Docker
Удаление работающего контейнера
docker rm nginx
Удаление контейнера и его тома (volume)
docker rm -v nginx
Удаление всех контейнеров со статусом exited
docker rm $(docker ps -a -f status=exited -q)
Удаление всех остановленных контейнеров
docker container prune
docker rm `docker ps -a -q`
Удаление контейнеров, остановленных более суток назад
docker container prune --filter "until=24h"
Удаление образа
docker rmi nginx
Удаление неиспользуемых (dangling) образов
docker image prune
docker rmi $(docker images -f dangling=true -q)
Удаление неиспользуемых (dangling) образов даже с тегами
docker image prune -a
Удаление всех образов
docker rmi $(docker images -a -q)
Удаление всех образов без тегов
docker rmi -f $(docker images | grep "^<none>" | awk "{print $3}")
Остановка и удаление всех контейнеров
docker stop $(docker ps -a -q) && docker rm $(docker ps -a -q)
Удаление неиспользуемых (dangling) томов
docker volume prune
docker volume rm $(docker volume ls -f dangling=true -q)
Удаление неиспользуемых (dangling) томов по фильтру
docker volume prune --filter "label!=keep"
Удаление неиспользуемых сетей
docker network prune
Удаление всех неиспользуемых объектов
docker system prune
По умолчанию для Docker 17.06.1+ тома не удаляются. Чтобы удалились и они тоже:
docker system prune --volumes
Docker Swarm
Установка Docker Swarm
curl -ssl https://get.docker.com | bash
Прим. перев.: в Docker версий 1.12.0+ ничего дополнительно устанавливать не требуется, т.к. Docker Swarm встроен в Docker Engine в виде специального режима (Swarm mode).
Инициализация Swarm
docker swarm init --advertise-addr 192.168.10.1
Подключение рабочего узла (worker) к Swarm
docker swarm join-token worker
Подключение управляющего узла (manager) к Swarm
docker swarm join-token manager
Список сервисов
docker service ls
Список узлов
docker node ls
Создание сервиса
docker service create --name vote -p 8080:80 instavote/vote
Список заданий Swarm
docker service ps
Масштабирование сервиса
docker service scale vote=3
Обновление сервиса
docker service update --image instavote/vote:movies vote
docker service update --force --update-parallelism 1 --update-delay 30s nginx
docker service update --update-parallelism 5--update-delay 2s --image instavote/vote:indent vote
docker service update --limit-cpu 2 nginx
docker service update --replicas=5 nginx
P.S.
Прим. перев.: Напомню, что оригинальная (англоязычная) версия Docker Cheat Sheet доступна и обновляется в Git-репозитории. Автор будет рад исправлениям/пополнениям от сообщества.
Читайте также в нашем блоге:
- «Play with Docker — онлайн-сервис для практического знакомства с Docker».
- «В чём суть проекта Moby и почему главным репозиторием Docker вдруг стал moby/moby?»
- «Собираем Docker-образы для CI/CD быстро и удобно вместе с dapp (обзор и видео)».
docker search
Поиск изображений в концентраторе докера
Usage
$ docker search [OPTIONS] TERM
Обратитесь к разделу опций для обзора доступных OPTIONS
для этой команды.
Description
Поиск Docker Hub для изображений
Примеры использования этой команды см. в разделе примеров ниже.
Options
Name, shorthand | Default | Description |
--filter , -f
|
Выход фильтра на основе предоставленных условий | |
--format |
Поиск с использованием шаблона Go | |
--limit |
25 |
Максимальное количество результатов поиска |
--no-trunc |
Не усекайте вывод |
Examples
Поиск изображений по имени
В этом примере отображаются изображения с именем,содержащим ‘busybox’:
$ docker search busybox NAME DESCRIPTION STARS OFFICIAL AUTOMATED busybox Busybox base image. 316 [OK] progrium/busybox 50 [OK] radial/busyboxplus Full-chain, Internet enabled, busybox made... 8 [OK] odise/busybox-python 2 [OK] azukiapp/busybox This image is meant to be used as the base... 2 [OK] ofayau/busybox-jvm Prepare busybox to install a 32 bits JVM. 1 [OK] shingonoide/archlinux-busybox Arch Linux, a lightweight and flexible Lin... 1 [OK] odise/busybox-curl 1 [OK] ofayau/busybox-libc32 Busybox with 32 bits (and 64 bits) libs 1 [OK] peelsky/zulu-openjdk-busybox 1 [OK] skomma/busybox-data Docker image suitable for data volume cont... 1 [OK] elektritter/busybox-teamspeak Lightweight teamspeak3 container based on... 1 [OK] socketplane/busybox 1 [OK] oveits/docker-nginx-busybox This is a tiny NginX docker image based on... 0 [OK] ggtools/busybox-ubuntu Busybox ubuntu version with extra goodies 0 [OK] nikfoundas/busybox-confd Minimal busybox based distribution of confd 0 [OK] openshift/busybox-http-app 0 [OK] jllopis/busybox 0 [OK] swyckoff/busybox 0 [OK] powellquiring/busybox 0 [OK] williamyeh/busybox-sh Docker image for BusyBox's sh 0 [OK] simplexsys/busybox-cli-powered Docker busybox images, with a few often us... 0 [OK] fhisamoto/busybox-java Busybox java 0 [OK] scottabernethy/busybox 0 [OK] marclop/busybox-solr
Отображение нестрочного описания (–нестрочное)
Этот пример отображает изображения с именем,содержащим ‘busybox’,не менее 3 звезд и описание не усекается при выводе:
$ docker search NAME DESCRIPTION STARS OFFICIAL AUTOMATED busybox Busybox base image. 325 [OK] progrium/busybox 50 [OK] radial/busyboxplus Full-chain, Internet enabled, busybox made from scratch. Comes in git and cURL flavors. 8 [OK]
Ограничить результаты поиска (-ограничить)
Флаг --limit
– это максимальное количество результатов, возвращаемых поиском. Это значение может находиться в диапазоне от 1 до 100. Значение по умолчанию --limit
– 25.
Filtering
Формат флага фильтрации ( -f
или --filter
) представляет собой пару key=value
Если есть более одного фильтра, передайте несколько флагов (например --filter is-automated=true --filter stars=3
)
В настоящее время поддерживаются фильтры:
- звезды (int-количество звезд,которое есть на изображении)
- is-automated (логический-истинный или ложный)-является ли изображение автоматическим или нет
- является официальным (булевым-правда или ложь)-является или не является официальным изображением
stars
В данном примере отображаются изображения с именем,содержащим ‘busybox’ и не менее 3 звезд:
$ docker search NAME DESCRIPTION STARS OFFICIAL AUTOMATED busybox Busybox base image. 325 [OK] progrium/busybox 50 [OK] radial/busyboxplus Full-chain, Internet enabled, busybox made... 8 [OK]
is-automated
В этом примере отображаются изображения,имя которых содержит ‘busybox’ и которые являются автоматическими сборками:
$ docker search --filter is-automated=true busybox
NAME DESCRIPTION STARS OFFICIAL AUTOMATED
progrium/busybox 50 [OK]
radial/busyboxplus Full-chain, Internet enabled, busybox made... 8 [OK]
is-official
Этот пример отображает изображения с именем,содержащим ‘busybox’,не менее 3 звезд и являющиеся официальными сборками:
$ docker search --filter is-official=true --filter stars=3 busybox NAME DESCRIPTION STARS OFFICIAL AUTOMATED busybox Busybox base image. 325 [OK]
Форматирование вывода
Параметр форматирования ( --format
) выводит результаты поиска с использованием шаблона Go.
Действительными держателями для шаблона “Go” являются:
Placeholder | Description |
---|---|
.Name |
Image Name |
.Description |
Image description |
.StarCount |
Количество звезд для изображения |
.IsOfficial |
«ОК», если изображение официальное |
.IsAutomated |
«ОК», если сборка образа была автоматизирована |
Когда вы используете опцию --format
, команда search
будет выводить данные точно так, как объявил шаблон. Если вы используете директиву table
, заголовки столбцов также включаются.
В следующем примере используется шаблон без заголовков и выводятся записи Name
и StarCount
, разделенные двоеточием ( :
) для всех изображений:
$ docker search --format "{{.Name}}: {{.StarCount}}" nginx nginx: 5441 jwilder/nginx-proxy: 953 richarvey/nginx-php-fpm: 353 million12/nginx-php: 75 webdevops/php-nginx: 70 h3nrik/nginx-ldap: 35 bitnami/nginx: 23 evild/alpine-nginx: 14 million12/nginx: 9 maxexcloo/nginx: 7
В этом примере выводится формат таблицы:
$ docker search --format "table {{.Name}}t{{.IsAutomated}}t{{.IsOfficial}}" nginx
NAME AUTOMATED OFFICIAL
nginx [OK]
jwilder/nginx-proxy [OK]
richarvey/nginx-php-fpm [OK]
jrcs/letsencrypt-nginx-proxy-companion [OK]
million12/nginx-php [OK]
webdevops/php-nginx [OK]
Docker
20.10
-
Использование динамически создаваемых устройств (–device-cgroup-rule)
Устройства, доступные для контейнера, назначаются во время создания.
-
docker save
Сохраните одно или несколько изображений в tar-архив (по умолчанию поток STDOUT). Обратитесь к разделу параметров для обзора доступных этой команды.
-
docker secret
Управление секретами Docker Swarm Эта команда работает с оркестратором.
-
создание докер-секретаря
Создать секрет из файла или STDIN как содержимое Swarm Эта команда работает с оркестратором.
Docker
Содержание
-
Начало работы
- Установка
- Проверка установки
- Настройка после установки
-
Словарь
-
Команды Docker
- Клонирование образа (pull)
- Поиск образа (search)
- Просмотр контейнеров (ps, inspect, logs)
- Запуск контейнера (run)
- Повторный запуск контейнера (start)
- Присоединение к контейнеру (attach)
- Остановка контейнера (stop, kill)
- Удаление контейнера или образа (rm)
- Запуск команд в контейнере (exec)
- Сохранение изменений в контейнере (commit)
- Отправка данных на Docker Hub (login, push)
- Копирование файлов (cp)
- Информация об использовании диска (system df)
- Очистка Docker (system df)
-
Dockerfile
- FROM
- LABEL
- ENV
- WORKDIR
- COPY
- ADD
- RUN
- CMD
- ENTRYPOINT
- VOLUME
- EXPOSE
- STOPSIGNAL
- USER
- ARG
- HEALTHCHECK
- Сборка проекта
- Уменьшение размера образа
- Многоэтапная сборка (multi-stage builds)
- Dockerignore
- Инструменты для Docker
-
Docker Compose
- Установка Docker Compose
-
Команды Docker Compose
- Сборка проекта Docker Compose (build)
- Запуск проекта Docker Compose (up)
- Остановка проекта Docker Compose (stop, down)
- Просмотр состояния Docker Compose (ps, logs, images)
- Отображение запущенных процессов Docker Compose (top)
- Просмотр образов Docker Compose (images)
- Выполнение команды внутри контейнера Docker Compose (exec)
- Просмотр версии Docker Compose (version)
- Прочие команды Docker Compose
-
Docker Compose file
- version
- services
- build
- image
- ports
- expose
- env_file
- environment
- volumes
- container_name
- entrypoint
- command
- depends_on
- restart
- healthcheck
- extends
Начало работы
Установка
Наверх
Начальная установка Docker.
Для Windows и Mac OS систем, требуется установить Docker Desktop c
официального сайта.
Настройка после установки
Наверх
Для Linux, чтобы каждый раз не нужно было писать sudo.
sudo groupadd docker
sudo usermod -aG docker $USER
И дальше требуется перезагрузить компьютер или перелогиниться,
чтобы изменения вступили в силу.
Если требуется, чтобы Docker daemon автоматически загружался
при старте операционной системы нужно указать это в настройках (systemd).
sudo systemctl enable docker.service
sudo systemctl enable containerd.service
Для отключения этого.
sudo systemctl disable docker.service
sudo systemctl disable containerd.service
Проверка установки
Для проверки работы Docker.
docker run hello-world
docker ps -a
И после этого должен отображаться контейнер hello-world.
Дальше этот образ не требуется, поэтому его можно удалять.
docker rm $(docker ps -aq)
docker rmi hello-world
Словарь
Наверх
host
— операционная система, на которую устанавливают Docker и на которой он работает.daemon
— служба, которая управляет Docker-объектами:
сетями, хранилищами, образами и контейнерами.client
— консольный клиент, при помощи которого пользователь
взаимодействует с Docker daemon и отправляет ему команды.image
— это неизменяемый образ, из которого разворачивается контейнер.container
— развёрнутое и запущенное приложение.volumes
– тома для постоянного хранения информации.registry
— репозиторий, в котором хранятся образы.Docker Hub
– Популярный публичный репозиторий, используемый по умолчанию в Docker.Dockerfile
— файл-инструкция для сборки образа.Docker Compose
— инструмент для управления несколькими контейнерами.
Он позволяет создавать контейнеры и задавать их конфигурацию.Docker Desktop
— Это GUI-клиент, который отображает все сущности Docker.
Работает на Linux, macOS и Windows.
Команды Docker
Клонирование образа
Наверх
Команда для клонирования образа.
По стандарту будет скачиваться latest версия,
но через двоеточие можно указать версию image.
docker pull <image-name>:<version>
Склонированный образ является неизменяемым.
Примеры:
Клонирование образа nginx.
Клонирование образа debian.
docker pull debian:11.4-slim
Поиск образа
Наверх
Для поиска образа используется команда search
.
Она будет выводить все найденные варианты с Docker Hub.
docker search <image-name>
Официальный сайт, где можно найти все контейнеры и описание к ним
Docker Hub.
Примеры:
Поиск образов для debian.
Просмотр контейнеров
Наверх
Команда docker ps
показывает все запущенные контейнеры.
Опции:
a
– показать все контейнеры, даже остановленные.s
– показать размер контейнера.q
– показать только id контейнера.
Примеры:
Показать запущенные контейнеры.
Показать все контейнеры.
Показать все контейнеры и их размер.
Вывести id запущенных контейнеров.
Логи контейнера
Наверх
Для просмотра логов, которые отдаёт контейнер есть атрибут logs
.
docker logs <container-name>
docker logs <container-hash>
Сборка проекта
Наверх
Сборка всего проекта в один контейнер.
Опции.
-t / --tag
– тег для контейнера.-f / --file
– путь до Dockerfile.--squash
– все слои будут соединены в один.
Точка в конце указывает текущую директорию как место сборки.
Также можно указать путь до директории.
docker build -t <username>/<container-name>:<vesion> .
Полная документация по
docker build.
Примеры:
Сборка контейнера с именем.
docker build -t kotdimos/my_nginx:1.23.1 .
Сборка контейнера из определённого Dockerfile.
docker build -t kotdimos/my_nginx:1.23.1 -f Dockerfile.nginx .
Просмотр информации об объекте
Наверх
inspect
– позволяет просмотреть низкоуровневую информацию
о различных объектах в docker.
Примеры:
Просмотреть данные контейнера.
docker inspect 852e9526a135
Просмотреть данные образа.
docker inspect mysql:8.0.31
Просмотреть данные network.
docker inspect network_deafault
Просмотреть данные volume.
Просмотр образов
Наверх
Для просмотра существующих образов.
Запуск контейнера
Наверх
Изначальный запуск контейнера.
Если образ никогда не был установлен,
то сначала Docker скачает образ, а потом запустит его.
docker run <image-name>:<version>
Для работы внутри контейнера требуется указать
флаги -it
(-i interactive, -t – tty).
docker run -it <image-name>:<version>
Для старта работы контейнера в фоновом режиме
нужно использовать флаг -d
(-d – detach).
docker run -d <image-name>:<version>
При обычном запуске генерируется рандомное имя контейнера.
Для того, чтобы дать самостоятельно имя требуется использовать флаг --name
.
docker run -it --name <container-name> <image-name>:<version>
Для того, чтобы контейнеры взаимодействовали с основной машиной,
нужно установить им порты, по которым они будут взаимодействовать.
Для этого используется флаг -p
,
и после этого указывается порт вашей машины,
и порт, который будет в докер контейнере.
docker run -d -p 8080:8080 <image-name>:<version>
Для того, чтобы передать контейнеру файлы основной машины,
можно воспользоваться флагом -v
, где требуется указать директорию,
которая будет монтироваться, и потом, куда она будет монтироваться.
docker run -it -v <path-to-host-directory>:<path-to-container-directory> <image-name>:<version>
Примеры:
Запуск nginx.
Проброс портов для nginx.
docker run -p 80:80 nginx:1.23.1
Добавление имени к контейнеру.
docker run --name my_nginx -p 80:80 nginx:1.23.1
Повторный запуск контейнера
Наверх
Если использовать run
, то Docker будет создавать новый контейнер.
Но если требуется запустить контейнер, который уже когда-то использовался,
используется команда start
.
Запускать контейнер можно как и по имени контейнера, так и по его id.
docker start -it <container-name>
docker start -it <container-id>
Присоединение к контейнеру
Наверх
Команда для присоединения к рабочему контейнеру.
docker attach <container-name>
docker attach <container-id>
Для выхода из него обычно используется exit
.
Остановка контейнера
Наверх
Для остановки контейнера используется команда stop
.
docker stop <container-name>
docker stop <container-id>
Для остановки всех контейнеров.
docker stop $(docker ps -aq)
Принудительное завершение контейнера.
docker kill <container-name>
docker kill <container-id>
Удаление контейнера или образа
Наверх
Для удаления контейнера нужно использовать rm,
удалять можно как и по имени контейнера, так и по его id.
docker rm <container-id>
docker rm <container-name>
Если требуется удалить все контейнеры.
docker rm $(docker ps -aq)
Если требуется удалить контейнеры по имени образа.
docker rm $(docker ps -a | awk '$2=="<image-name>" { print $1 }')
Для удаления образа нужно использовать rmi,
при этом все контейнеры основанные на нём должны быть удалены.
Для удаления всех образов.
docker rmi $(docker images -q)
Запуск команд в контейнере
Наверх
Для запуска команд используется команда exec
.
docker exeс -it <container-name> <command>
docker exeс -it <container-id> <command>
Если нужно запусить команду под определённым пользователем используется флаг -u
.
docker exec -u <user-id> -it <container-id> <command>
docker exec -u <user-name> -it <container-id> <command>
Примеры:
Просмотреть корректность заполнения конфига в nginx.
docker exec -it 17911b46528e nginx -t
Вход под root пользователем в контейнере.
docker exec -u 0 -it b6910f29ad52 /bin/bash
Сохранение изменений в контейнере
Наверх
Для сохранения изменений требуется его закоммитить.
docker commit <container-name> <username>/<container-name>:<vesion>
docker commit <container-id> <username>/<container-name>:<vesion>
Отправка данных на Docker Hub
Наверх
Для отправки данных требуется авторизация
После этой команды консоль запрашивает логин и пароль для авторизации
на сайте docker.
После этого можно передать данные на Docker Hub.
Копирование файлов
Наверх
Команда cp
позволяет копировать файлы к контейнер и из контейнера.
Опции:
-a / --archive
– копирование всей инфромации (uid/gid).-L / --follow-link
– следовать символьной ссылке.-q / --quiet
– подавить вывод во время копирования.
Примеры:
Копирование файла в контейнер.
docker cp ./file_name container1:/home/user/file_name
Копирование файла из контейнера.
docker cp container1:/home/user/file_name ./file_name
Информация об использовании диска
Наверх
Команда, для того чтобы получить сколько использует docker дискового пространства.
Подробная информация об каждом объекте.
Очистка Docker
Наверх
Docker при долгом использовании очень сильно загрезняет диск.
Очистка всего docker от мусора.
Будут удалены:
- все остановленные контейнеры.
- все сети, не используемые хотя бы одним контейнером.
- все тома, не используемые хотя бы одним контейнером.
- все образы, с которыми не связан хотя бы один контейнер.
- весь кэш сборки.
Такой вариант может быть довольно жёстким для очищения.
Отдельное удалеение:
Удаление всех dangling образов.
Удаление всех неиспользуемых сетей.
Удаление volumes.
Удаление всех остановленных контейнеров.
Dockerfile
Наверх
Dockerfile является настройкой собственного контейнера.
Каждая новая инструкция будет создавать новый слой контейнера.
Документация по всем командам.
FROM
Наверх
Наследование от другого образа, с которого будет происходить старт.
FROM <image-name>:<version>
Примеры.
FROM ubuntu:20.04
FROM debian:11.4-slim
LABEL
Наверх
Метаданные для образа.
LABEL <key>=<value> [<key>=<value> ...]
Примеры.
LABEL maintainer="user@example.org" version="1.1.1"
ENV
Наверх
Регистрация переменной окружения.
Примеры.
ENV LEVEL debug
ENV NGINX_VERSION=1.23.1
WORKDIR
Наверх
Указания рабочей директории, в какой директории будет находиться контейнер,
от куда будет запуск команд.
Если директория не создана, тогда docker сам создаст эту директорию.
Примеры.
WORKDIR /home/user
WORKDIR /app
COPY
Наверх
Копирование файлов из хоста в образ.
Копирование файлов будет происходить из хоста,
где находится Dockerfile и ниже, выше подниматься нельзя.
COPY <src> [<src> ...] <dst>
# <src> - файл или директория внутри build контекста
# <dst> - файл или директория внутри контейнеры
Примеры.
COPY . /home/user/
COPY nginx_config/ /home/user/nginx_config
ADD
Наверх
Добавление файлов работают ровно так же, как и COPY,
но также можно добавлять вместо локальных файлов файлы из интернета.
ADD <src> [<src> ...] <dst>
# <src> - файл или директория внутри build контекста
# <dst> - файл или директория внутри контейнеры
Примеры.
# добавление по url
ADD <url> /home/user/
RUN
Наверх
Вызов команд. Для уменьшения слоев можно писать несколько команд в одном запуске.
Примеры.
RUN apt update && apt install -y nginx
RUN apt install gcc -y &&
gcc -Wall -o main main.c
CMD
Наверх
Указание какая команда будет выполняться при старте контейнера.
Примеры.
CMD /start.sh
CMD ["nginx", "-g", "daemon off;"]
ENTRYPOINT
Наверх
Аналог CMD – ENTRYPOINT.
Примеры.
ENTRYPOINT /start.sh
ENTRYPOINT ["nginx", "-g", "daemon off;"]
VOLUME
Наверх
Указание точки монтирования томов внутри образа.
VOLUME <dst> [<dst> ...]
# <dst> - директория монтирования для volume'a
Примеры.
VOLUME /app /db /data
VOLUME ["/var/log"]
EXPOSE
Наверх
Указание портов, которые слушает сервис в запущенном контейнере.
EXPOSE <port>[/<proto>] [<port>[/<proto>] ...]
# <port> - порт сервиса внутри контейнера
# <proto> - tcp или udp
Примеры.
EXPOSE 8080/tcp 3389/udp
EXPOSE 8080
EXPOSE 80 443
STOPSIGNAL
Наверх
Указывается сигнал, который посылается процессу при остановке контейнера.
Примеры.
USER
Наверх
Имя (ID) пользователя, от которого выполняются директивы RUN, CMD, ENTRYPOINT.
Примеры.
ARG
Наверх
Почти как ENV, но задаёт параметры только для docker build.
Если в ENV мы задавали константные переменные, то здесь они будут задаваться динамически.
Примеры.
HEALTHCHECK
Наверх
Команда, которой можно проверить состояние сервиса.
Уменьшение размера образа
Наверх
- Избегать установки лишних пакетов и упаковки лишних данных в образы.
- Использовать связанные команды для RUN инструкций.
RUN command_1 && command_2 && command_3
Или можно привести к более читаемому виду
RUN command_1 &&
command_2 &&
command_3
- Следить за последовательностью описания Dockerfile.
- Уменьшать количество слоёв.
- Продумывать порядок слоёв –
сначала выполняются слои которые не будут обновляться после каждой пересборки,
после, те которые могут подвергаться изменениям. - Один контейнер – одна задача.
- Чистить за собой в контейнере.
- Использовать multi-stage сборки (для компилируемых языков).
- Использовать scratch образ для собственных приложений.
scratch
– зарезервированный образ Docker, который является нулевым образом.
Многоэтапная сборка
Наверх
Многоэтапная сборка (multi-stage build) –
предназначена для оптимизации конечного контейнера.
Что было до появления многоэтапной сборки?
Создавались 2 Dockerfile-а, один для разработки
(содержит все необходимое для создания вашего приложения),
другой оптимизированный для создания итогового образа,
Эта практика в свое время получила название «шаблон строителя».
Однако, поддерживать в актуальном состоянии два Dockerfile-а очень трудно.
От этой концепции отказались когда пришла многоэтапная сборка.
Зачем нужна многоэтапная сборка?
Многоэтапная сборка нужна для оптимизации конечного контейнера.
Суть подхода заключается в том,
чтобы не заботиться о количестве получающихся слоев
в процессе сборки вашего приложения
и копировать результаты сборки из одного образа в другой.
К примеру, при компиляции приложения на c++,
требуются специальные библиотеки, компилятор и исходный код,
а в конце мы получаем лишь скомпилированный файл,
который весит пару МиБ.
И тогда можно просто перкопировать скомпилированный файл на другой контейнер,
и в итоге мы получим очень легковестный контейнер.
Для копирования файлов с одного контейнера
на другой используется команда COPY
с опцией --from
,
и через равно указывается номер контейнера от куда будет происходить копирование.
К опции FROM
можно добавить псевдоним
для более удобного понимания от куда идёт копирование.
Пример:
FROM golang:latest as build COPY . . RUN go build ./src/main.go FROM alpine:latest COPY --from=build /go/main . CMD ["./main"]
Dockerignore
Наверх
Файл .dockerignore
преднзначен для исключения файлов и директорий.
Это помогает избежать ненужной отправки больший и конфиденциальных файлов и каталогов.
Знак | Описание |
---|---|
# | Комментарий |
* | Ноль, один или более символов |
** | Любое количество директорий, включая ноль |
? | Подстановка одного символа |
! | Исключение из исключений |
Примеры:
Комментарий.
Игноривание всех файлов заканчивающихся на .log.
Игноривание всех файлов заканчивающихся на .log во всех директориях.
Исключение из исключений.
# Игноривание всех файлов *.md
*.md
# Но включение файла README.md
!README.md
Инструменты для Docker
Наверх
Для удобного просмотра контейнеров, какие запущены,
какие простаивают, сколько памяти тратят и пр., есть утилита ctop
.
Документацию и установку можно найти на github.
Docker Compose
Наверх
Docker Compose используется для одновременного управления несколькими контейнерами,
входящими в состав приложения.
Этот инструмент предлагает те же возможности,
что и Docker, но позволяет работать с более сложными приложениями.
Описывается всё в файле docker-compose.yml
.
Это файл, который будет содержать инструкции, необходимые для запуска и настройки сервисов.
Обычно он хранится в корневой директории проекта.
Установка Docker Compose
Наверх
Один из вариантов установки docker compose, это установка Docker Desktop.
Он будет содержать в себе и docker и docker-compose.
Ссылка на установку Docker Desktop.
Можно установить docker-compose
используя пакетный менеждер дистрибутива.
Это отдельный файл, который является обёрткой над docker.
Так же существует специальный плагин для docker – docker-compose-plugin
.
Он позволяет использовать команду не docker-compose
, а docker compose
,
команда будет являться не отдельным файлом, а расширением docker.
Более подробная инструкция по установке.
Команды Docker Compose
Наверх
Docker Compose имеет общие опции для работы со всеми командами.
Опции:
-f / --file <docker-compose-specify-file>
–
если требуется использовать другой файл.
docker compose обычно запускает только файл
docker-compose.yml
илиdocker-compose.override.yml
,--env-file
– указать альтернативный env файл.
По умолчанию docker compose использует файл.env
.--project-name / -p
– указать имя проекта.--parallel <int>
– контролировать максимальное количество параллелизма.
для неограниченного количества-1
. По умолчанию-1
.
Сборка проекта Docker Compose
Наверх
Сборка проекта.
Опции:
--no-cache
– не использовать кэш при сборке образа.--pull
– стараться всегда получить более новую версию.--quiet / -q
– ничего не выводить на stdout.--build-arg
– установить параметры сборки.
Запуск проекта Docker Compose
Наверх
Команда up
запускает описанные контейнеры.
Опции:
--build
– перед запуском, происходит сборка контейнеров.-d
– запуск контейнеров в фоновом режиме.--no-build
– не создавать образ, даже если он отсутствует.--attach
– прикрепиться сервисному выходу.--attach-dependencies
– присойдениться к зависимым контейнерам.--no-recreate
– если контейнеры существуют, не пересоздовать их заново.--pull
– вытянуть образы перед запуском.--abort-on-container-exit
– останавливает все контейнеры,
если какой-то контейнер был остановлен.--force-recreate
– пересоздать контейнер, даже если его конфигурация не изменилась.--remove-orphans
– удалить контейнеры, если они были не определены в compose файле.
Примеры:
Запуск проекта.
Запустить проект и дополнительно собрать его.
docker compose up --build
Запустить проект в фоновом режиме.
Остановка проекта Docker Compose
Наверх
Остановка проекта.
Остановить проект и удалить контейнеры.
Просмотр состояния Docker Compose
Наверх
Посмотр логов сервиса.
docker compose logs -f <service-name>
Вывод списка контейнеров.
Показать список образов.
Отображение запущенных процессов Docker Compose
Наверх
Команда показывает какие процессы запущены в каждом запущенном контейнере.
Просмотр образов Docker Compose
Наверх
Команда для просмотра информации о образах.
Выполнение команды внутри контейнера Docker Compose
Наверх
Выполнение команды в контейнере.
docker compose exec <service-name> <command>
Просмотр версии Docker Compose
Наверх
version
– предназначен для просмотра версии docker compose.
Прочие команды Docker Compose
Наверх
Справка по всем командам.
Docker Compose file
Наверх
Полная документация по docker compose file.
Документация по 3 версии.
version
Наверх
В начале файла указывается версия compose.
В различных версиях добавлены/удалены/изменены службы.
Все различные
версии и изменения.
При указании используемой версии файла compose,
при версиях 2 и 3, нужно указать как старший, так и дополнительный номера.
Если дополнительная версия не указана,
по умолчанию используется 0, а не последняя дополнительная версия.
version: "3"
# эквивалент вот этому
version: "3.0"
services
Наверх
services
– в данном блоке описывается список сервисов.
services:
name_1:
...
name_2:
...
name_3:
...
build
Наверх
build
– указание пути, где лежит Dockerfile для определенного проекта
и передача определённых аргументов.
Примеры:
В текущей директории будет искаться файл Dockerfile
и запускаться.
Будет запущен Dockerfile.nginx
в директории nginx
.
build: ./nginx/Dockerfile.nginx
Так же можно это разбить.
build:
context: ./nginx
dockerfile: Dockerfile.nginx
Для передачи аргументов используется args
.
build:
context: ./nginx
args:
ARG1: arg1
ARG2: arg2
Либо такой вариант.
build:
context: ./nginx
args:
- ARG1=arg1
- ARG2=arg2
image
Наверх
image
– образ с которого будет запускаться контейнер.
Примеры:
Запуск от определённого image.
ports
Наверх
ports
– Открытие контейнерных портов, для работы с хостом.
ports:
- <host-port>:<container-port>
Примеры.
Открытие порта.
Открытие нескольких портов.
ports:
- 8080:80
- 6060:6060
expose
Наверх
expose
– открывает порты, не окрывая из на хостовой машине.
Будут доступны только связным службам.
Пример.
expose:
- "3000"
- "8000"
env_file
Наверх
env_file
– Добавление переменные среды из файла.
Может быть одним значением или списком.
env_file: <env-file>
env_file:
- <env-file-1>
- <env-file-2>
- <env-file-3>
VARIABLE=VALUE
Примеры.
Указания файлов.
env_file:
- .env
- nginx/.env
Сам env файл.
MY_VAR=value
NGINX_VERSION=1.23.1
environment
Наверх
environment
– Добавление переменных для среды.
Примеры:
Указания переменных.
environment:
SHOW: 'true'
PASSWORD: "PASSWORD"
Указания переменных в другом формате yml.
environment:
- SHOW=true
- PASSWORD="password"
volumes
Наверх
volumes
– Указание точки монтирования томов внутри образа.
Примеры:
Монтирование по абсолютному пути.
volumes:
- /opt/data:/var/lib/mysql
Монтирование относительно compose файла.
Так же можно указывать именнованный том.
Сначала требуется создать.
В конце после всех services создаются все нужные volumes.
И дальше в нужном сервисе вставляется нужный volume.
volumes:
- name_volume:/var/lib/mysql
Все созданые volumes хранятся по пути /var/lib/docker/volumes
.
У volume есть параметры, которые монжо конфигурировать его.
name
– указание имени volume, с которым он будет создоваться.
external
– если стоит true, значит он не будет создавать новый volume,
а будет искать готовый.
Если не указывается параметр name
, тогда требуется указать его в external.
Примеры:
Указание имени volume.
volumes:
mysql_database:
name: mysql_database
Использовать готовый volume.
volumes:
mysql_database:
external:
name: mysql_database
Использование external вместе с name.
volumes:
mysql_database:
external: true
name: mysql_database
container_name
Наверх
container_name
– Собственное имя контейнера, вместо генерации по умолчанию.
container_name: <container-name>
Пример.
сontainer_name: nginx_container
entrypoint
Наверх
entrypoint
– Переопределение начального запуска.
entrypoint: <command>
# Так же можно задать списком
entrypoint: ["<command>", "<arg1>", "<arg2>"]
Примеры:
entrypoint: "nginx -g daemon off;"
entrypoint: ["nginx", "-g", "daemon off;"]
command
Наверх
command
– Переопределение команды для запуска.
command: "<command>"
# Так же можно задать списком
command: ["<command>", "<arg1>", "<arg2>"]
Примеры:
command: "nginx -g daemon off;"
command: ["nginx", "-g", "daemon off;"]
depends_on
Наверх
depends_on
– зависимости запуска и завершения работы между службами.
Примеры:
Служба name_1 зависит от name_2 и name_3,
т.е. будет запускаться после них.
version "3.9"
services:
name_1:
depends_on:
- name_2
- name_3
name_2:
...
name_3:
...
restart
Наверх
restart
– Политика перезапуска контейнера.
Существуют 4 варианта:
no
– не перезапускает контейнер (по умолчанию).always
– контейнер будет всегда перезапускается.on-failure
– при ошибке будет перезапускаться контейнер.unless-stopped
– всегда перезапускается контейнер,
если контейнер не остановлен (вручную или другим образом).
Примеры:
healthcheck
Наверх
healthcheck
– проверка, которая запускается, чтобы определить,
являются ли контейнеры для этой службы работоспособными.
Параметры для healthcheck:
interval
– через какой период будет запускаться проверка.timeout
– если проверка длится больше указанного времени,
значит контейнер не работоспособен.retries
– сколько раз запускается проверка,
чтобы понять что контейнер не работает.start_period
– время для запуска контейнера,
перед запуском проверок работоспособности.
interval, timeout и start_period имеют специфичный вариант написания.
Поддерживаемые единицы измерения: us, ms, s, m и h.
Примеры написания:
2.5s
10s
1m30s
2h32m
5h34m56s
Пример:
healthcheck:
test: ["CMD", "curl", "-f", "http://localhost"]
interval: 1m30s
timeout: 10s
retries: 3
start_period: 40s
extends
Наверх
extends
– позволяет использовать общие конфигурации
для разных файлов или даже для разных проектов.
Расширение служб полезно, если есть несколько служб,
повторно использующих общий набор параметров конфигурации.
Шаблон.
extends:
file: /path/to/file
service: <service-name>
Примеры:
Использование сервиса из другого файла.
first-service.yml
services:
webapp:
build: .
ports:
- "8000:8000"
second-service.yml
services:
web:
extends:
file: first-service.yml
service: webapp
Рассмотрим систему управления контейнерами под названием Docker. Ознакомимся с базовыми принципами ее работы, а также подробно рассмотрим основные команды, необходимые для управления Docker и ее составляющими.
Краткая справка
Docker — это система управления контейнерами. Контейнеры же представляют собой логическое эволюционное продолжение виртуальных машин. Это изолированная среда для разработки и тестирования программного обеспечения.
Контейнер Docker потребляет мало ресурсов и быстро запускается, а еще его легко переносить с одного устройство на другое. Из-за этих преимуществ Docker постепенно наращивает аудиторию и превращается в некий индустриальный стандарт, которым пользуются даже крупные корпорации вроде Microsoft.
Поэтому стоит хотя бы на базовом уровне понимать, что есть Docker и как им управлять. В этом материале речь пойдет об основных командах для управления контейнерами. Будем их создавать, запускать, удалять и выполнять прочие полезные задачи, возникающие по ходу работы.
Комьюнити теперь в Телеграм
Подпишитесь и будьте в курсе последних IT-новостей
Подписаться
Общие сведения об основных командах Docker
Управление контейнерами и образами в Docker мало чем отличается от управления другими приложениями в терминале Linux. Принцип тот же – вводим текст и получаем результат. Сначала надо указать ключевое слово Docker, потом указать команду, которую надо выполнить, а затем объект применения команды, аргументы, опции и прочие дополнения. Типичная операция, выполняемая в Docker, выглядит вот так:
docker container start
Для того чтобы обратиться к конкретному контейнеру или образу в Docker, используются их ID или названия, придуманные разработчиком. Допустим, для создания и запуска контейнера с названием new_container надо ввести:
docker container run new_container
У команд существуют опции и аргументы. Их тоже рассмотрим.
Команды для управления контейнерами
Контейнер — ключевая единица в Docker. Поэтому для начала разберемся, как управлять ей.
У описанных ниже команд есть общий синтаксис, который выглядит так: docker container название команды. Названия, собственно, ниже:
- create — создает контейнер из выбранного образа.
- start — активирует уже существующий контейнер.
- run — создает новый контейнер и сразу включает его.
- ls — отображает все существующие контейнеры.
- inspect — подробнее рассказывает о выбранном контейнере.
- logs — выводит в консоль логи (то есть журнал событий).
- stop — пытается остановить выбранный контейнер, отправив ему сигнал SIGTERM, требующий завершить всю активность и сохранить пользовательские данные. Если ответ занимает слишком много времени, то следом посылает сигнал SIGKILL, чтобы «убить» процесс без сохранения данных.
- kill — выполняет ту же задачу, что и предыдущая команда, но пропускает шаг с отправкой SIGTERM. Сразу выключает контейнер, игнорируя сохранение пользовательских данных.
- rm — удаляет выбранный контейнер (он должен быть выключен, чтобы команда сработала).
Далее рассмотрим каждую из команд подробнее.
container create
Из названия понятно, что речь идет о создании нового контейнера. Это основная функция Docker, с нее начинается его работа.
Синтаксис следующий: docker create [опции] название образа [дополнительные команды][аргументы].
В квадратных скобках указываются опциональные компоненты команды. Использовать их необязательно, но можно оптимизировать создаваемый контейнер под свои задачи.
К примеру, добавить ссылку на другой контейнер с помощью тега –link. Или подключить Standard Input с помощью команды в духе:
docker create -a STDIN название образа
Либо создать контейнер из образа операционной системы Ubuntu, добавив подключение к терминалу и запуск bash при каждом старте Docker:
docker create -t -I ubuntu bash
Только при наличии терминала можно управлять контейнером. Поэтому его нужно обязательно запрашивать при каждому запуске.
container start
В отличие от предыдущей команды, эта запускает контейнер, который существует, но находится в нерабочем состоянии.
Синтаксис следующий: docker start [опции] название или ID контейнера [название или ID контейнера].
Все просто – вводите команду, а потом указываете название контейнера, чтобы его запустить:
docker start 49920 — пример старта через ID контейнера 49920
docker start testing_docker — пример старта через название testing_docker
Какой из вариантов использовать, решает разработчик, ориентируясь на собственные предпочтения. Технических отличий нет.
container run
Комбинирует две вышеописанные команды. Сначала создает новый контейнер, а потом тут же его включает.
Синтаксис следующий: docker run [опции] название образа [команды][аргументы].
Практика та же, что мы видели в синтаксисе команды docker create. Разница в одном слове и доступных опциях.
Чтобы создать контейнер из образа Ubuntu и тут же взять контроль над ним через командную строку, нужно сделать запрос терминала через опции команды.
К примеру,
docker run -it ubuntu root@d8e1140989525:/#
используется для подключения к контейнеру с возможностью передавать ему команды после создания.
stop
Выполняет противоположную функцию. То есть не запускает контейнер, а, наоборот, останавливает его работу.
Синтаксис следующий: docker stop [опции] название или ID контейнера [название или ID контейнера].
Например, чтобы выключить контейнер с именем Timeweb, надо ввести в терминал:
docker stop timeweb
Аналогично с ID. Просто имя надо заменить на уникальный код, привязанный к контейнеру. Получится что-то в духе:
docker stop 14490
restart
Последняя команда, связанная с рабочим состоянием. Она выполняет перезапуск выбранного контейнера.
Синтаксис следующий: docker restart [опции] название или ID контейнера [название или ID контейнера].
Вводите команду, а потом указываете название контейнера, чтобы его перезапустить:
docker restart 49920 — пример перезапуска через ID контейнера 49920 docker restart testing_timeweb — пример перезапуска через название testing_timeweb
container ls (или docker ps)
Обе команды выполняют одну и ту же задачу. Просто одна из них использовалась раньше, а другая появилась позднее.
docker ps отображает в терминале все запущенные контейнеры. А при добавлении опции -a в список попадают все контейнеры, созданные в системе.
В вывод команды попадают следующие параметры:
- ID — то есть кодовое значение конкретного контейнера.
- IMAGE — образ, используемый контейнером.
- COMMAND — список команд, которые должны выполняться сразу после запуска.
- CREATED — статус и время, когда контейнер бы создан (допустим, «35 минут назад»).
- STATUS — текущее состояние – включен ли и время работы с последнего запуска. Тут может отображаться код выхода и время, когда он произошел.
- PORTS — порты, используемые контейнером из списка.
- NAMES — более понятные в сравнении с ID имена, которые можно точно так же использовать для исполнения команд или поиска.
При желании можно использовать опцию volume, чтобы в терминале отображались только тома, являющиеся предпочтительным механизмом хранения данных в Docker.
logs
Одна из команд, позволяющая подробнее ознакомиться с тем, как работает Docker. Точнее одна из его запущенных единиц. Показывает, как функционирует контейнер и что в текущий момент с ним происходит. Выводит некий журнал данных.
Если указать ключ –follow и название контейнера, то в терминал в реальном времени будут выводиться логи Docker. Так можно беспрерывно наблюдать за его работой и возможным появлением ошибок.
inspect (для контейнера)
Отображает подробную информацию из Docker после обращения к конкретному контейнеру.
Синтаксис следующий: docker inspect [опции] название или ID контейнера [название или ID контейнера].
По умолчанию отображает данные в формате JSON. Можно использовать дополнительную опцию –format для смены формата данных.
docker inspect –format=‘{{range .NetworkSettings.Networks}}{{.MacAddress}}{{end}}’ $INSTANCE_ID — пример вывода информации о MAC-адресе docker inspect –format=‘{{range $p, $conf := .NetworkSettings.Ports}} {{$p}} -> {{(index $conf 0).HostPort}} {{end}}’ $INSTANCE_ID — пример вывода информации о портах
rm
Команда удаления одного или нескольких контейнеров Docker, найденных на диске вашего хостинга.
Синтаксис следующий: docker rm [опции] название или ID контейнера [название или ID контейнера].
Чтобы удалить сразу несколько контейнеров с разными названиями и ID, нужно ввести:
docker rm 45fs testing_timeweb
Перед тем как удалить контейнер, нужно его выключить. Для этого надо воспользоваться командой:
docker stop
Команды Docker для управления образами
Еще одна значимая единица в Docker — образы. Управление ими во многом похоже на управление контейнерами, но есть ряд отличий, которые важно учитывать. Причем как в командах, так и в опциях.
У описанных ниже команд есть общий синтаксис, который выглядит так: docker image название команды. Названия, собственно, ниже:
- build — собирает образ с нуля.
- push — отправляет образ в реестр.
- pull — загружает готовый образ с необходимыми для работы параметрами.
- ls — показывает все существующие образы.
- history — показывает каждый слой образа в ретроспективе, отображая ряд полезных сведений.
- inspect — рассказывает все, что известно об образе, включая данные, касающиеся отдельных слоев.
- rm — удаляет образ Docker из системы.
- images — списком показывает все образы Docker, найденные на диске.
Рассмотрим каждую из них немного подробнее.
build
С помощью этой команды можно собрать образ, используя заранее подобранные параметры. Собираются одни из данных, хранящихся в файлах Dockerfile. Они находятся по определенным URL или заранее загружены в файловую систему.
Синтаксис следующий: docker image build [опции] название и адрес файла Dockerfile, из которого будет собран образ.
Например, если вы хотите собрать образ с названием Timeweb и тегом host в директории moy_repositoriy, то надо ввести в терминал:
docker image build -t moy_repositoriy/timeweb:host
Образами можно делиться через сервис Docker Hub. Тогда ими смогут пользоваться другие пользователи Docker, указав при сборке соотвествующий адрес. Для входа в Hub используется команда docker login (еще упомянем ее ниже).
push
После сборки образа на диске хостинга его можно разместить в Docker Hub с помощью отдельной команды.
Синтаксис следующий: docker image push [опции] название и адрес, где будет размещен образ
К примеру, чтобы отправить в хаб образ Timeweb, который мы создали ранее, нужно ввести в терминал:
docker image push moy_repositoriy/timeweb:host
Он будет размещен по адресу, указанному в команде push. После этого его смогут вытащить другие пользователи.
pull
В Docker Hub находится большой список уже готовых образов, которые были созданы вами или другими пользователями. Чтобы не собирать новые из Dockerfile, можно скачать уже имеющиеся и работать с ними. Чтобы их вытащить, нужна команда pull.
Синтаксис следующий: docker image pull [опции] название и адрес, где будет размещен образ.
К примеру, чтобы вытащить из хаба образ Timeweb, который мы создали ранее, нужно ввести в терминал:
docker image pull moy_repositoriy/timeweb:host
Аналогичным образом его смогут вытаскивать другие пользователи, обращаясь к адресу и названию образа, которые вы указывали.
ls
docker image ls отвечает за отображение в терминале дополнительной информации об образах. Она показывает их список (как и в случае с контейнерами) и информацию о размере каждого.
Синтаксис следующий: docker image pull [опции][адрес репозитория:тег].
В вывод команды можно добавить другие данные с помощью отдельных ключей:
-a — увеличивает список отображаемых образов за счет отображения даже промежуточных. –digests — добавляет в вывод команды еще и дайджесты. -f — фильтрует выдачу по заранее определенным условиям. –format — меняет формат отображения данных на основе шаблона Go. –no-trunc — отключает усечение информации в терминале. -q — показывает ID вместо названий образов.
history
Показывает своего рода историю образа. Речь идет о «слоях», то есть промежуточных вариациях образа, входящих в его состав. Команда history показывает их названия, размер и дату создания.
Синтаксис следующий: docker history [опции] название образа.
Например, чтобы отобразить слои образа Timeweb, введем в терминал:
docker image history timeweb
inspect (для образа)
Отображает подробную информацию из Docker после обращения к конкретному образу.
Синтаксис следующий: docker inspect [опции] название или ID контейнера [название контейнера или образа].
По умолчанию отображает данные в формате JSON. Можно использовать дополнительные опции –format для смены формата данных. Опция -s показывает размер инспектируемых элементов.
docker inspect –format=‘{{.Config.Image}}’ $INSTANCE_ID — пример вывода информации о названии образа docker inspect –format=‘{{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}’ $INSTANCE_ID — пример вывода информации об IP-адресе
rm
Команда удаления одного или нескольких образов Docker, найденных на диске вашего хостинга.
Синтаксис следующий: docker rm [опции] название и путь до образа.
Чтобы удалить образ Timeweb из системы, нужно ввести:
docker rm moy_repositoriy/testing_timeweb:host
Эта команда позволяет выбирать только образы, которые хранятся локально. Удаленные элементы из репозитория удалить не получится.
Чтобы удалить все локальные образы, обнаруженные в системе, введем в терминал:
docker image rm $(docker images -a -q)
images
Команда показывает все образы Docker, которые расположены на жестком диске вашего сервера (или локально).
Вывод команды docker images выглядит так:
REPOSITORY |
TAG |
IMAGE ID |
CREATED |
SIZE |
fedora |
new |
990fqD00124 |
12 hours ago |
209MB |
httpd |
new |
24eaet001s0s |
24 hours ago |
152MB |
ubuntu |
recent |
30e102f4fas2 |
1 week ago |
179MB |
fedora |
recent |
92s0qF0D104 |
2 weeks ago |
133MB |
ubuntu |
new |
1d42e9ss40ft |
24 hours ago |
161MB |
fedora |
recent |
eSS208s6das2 |
1 week ago |
190MB |
mysql |
tag |
pq544s09efg0 |
38 hours ago |
452MB |
Здесь отображаются следующие данные, касающиеся образа:
REPOSITORY — это репозитория, в котором хранится образ. TAG — привязанный к нему тег (прописывается в конце команды после двоеточия. Например, docker image build moy_repositoriy/testing_timeweb:host. IMAGE ID — код образа, используемый вместо имени. CREATED — срок жизни. Показывает, как давно был создан образ. Неделю назад, 12 часов назад и т.п. SIZE — пространство, которое образ занимает на диске.
Прочие команды
Это общие операции, не привязанные к работе с конкретными сущностями типа образов и контейнеров. Но они тоже пригодятся при использовании Docker.
- docker version — показывает техническую информацию о самом Docker. Как о клиенте, так и о сервере.
- docker login — авторизует пользователя в реестре Docker.
- docker system prune — выполняет некую чистку, удалив из системы контейнеры, которые уже не используются, ненужные сети и образы без имен и меток.
version
К этой команде можно обратиться за подробной информацией о самом Docker. Она отобразит версию клиента и сервера Docker.
login
Об этой команде уже говорили. Она позволяет авторизоваться в реестре образов Docker Hub. Загружать туда образы и выгружать уже готовые к себе.
system prune
По умолчанию эта команда удаляет только данные без тегов, но можно настроить ее так, чтобы из системы были удалены все неиспользуемые элементы.
Допустим, чтобы стереть из Docker все образы и сверху зацепить еще тома, то надо ввести в терминал:
docker system prune –all –volumes
На этом все. Это даже больше того минимума, который нужен для работы с Docker на начальных этапах. Этих команд хватит, чтобы собрать образ, запустить контейнер и перейти к разработке. А уже по ходу дела вы сможете обращаться в документацию и обогащать свои знания.
If you are on windows 10 and running windows containers
In the above image, docker is running windows containers. So its showing switch to linux containers.
First run docker info
command (more specific docker info --format “{{json .DockerRootDir}}”
).
You should see root dir as
Docker Root Dir: C:ProgramDataDocker
Now run a command to pull an image like
docker pull hello-world
After it pulls the image, you can look into the docker root dir.
Notice the current modified date time. In one of the folders you can see the sha of the layers.
Finally, you also have to take a look into the following folder, if you want to know where the images are downloaded. The two folders above and below are
- C:ProgramDataDockerimagewindowsfilter
- C:ProgramDataDockerwindowsfilter
Now for linux images.
If your docker is running windows containers, and then if you try to fetch a linux based container such as nginx, like so
docker pull nginx:latest
you will get a message as follows.
latest: Pulling from library/nginx
no matching manifest for windows/amd64 10.0.18363 in the manifest list entries
So switch to linux contaners. See the very first image.
Once the docker for linux is running, run the command again.
docker pull nginx:latest
You can see that image is downloading.
Now where is this image downloaded on your hard disk? docker info command may not help much in this case.
So start again. Click Settings and now “Switch to Windows Containers…”
And now see the path.
On my machine, it’s C:ProgramDataDockerDesktopvm-data
Note the date modified column. Notice and observe that after you pull or remove a linux based image.
That’s a diskspace reserved for linux env, so you will not be able to browse further down to see where the image is.
but if you have to, then launch a linux based VM, install docker and explore the path
/var/lib/docker/
Sometimes you may encounter permission issues. If so see this and this