Docker как найти образ

Время на прочтение
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

Наверх

Команда, которой можно проверить состояние сервиса.

Уменьшение размера образа

Наверх

  1. Избегать установки лишних пакетов и упаковки лишних данных в образы.
  2. Использовать связанные команды для RUN инструкций.
RUN command_1 && command_2 && command_3

Или можно привести к более читаемому виду

RUN command_1 && 
    command_2 && 
    command_3
  1. Следить за последовательностью описания Dockerfile.
  2. Уменьшать количество слоёв.
  3. Продумывать порядок слоёв –
    сначала выполняются слои которые не будут обновляться после каждой пересборки,
    после, те которые могут подвергаться изменениям.
  4. Один контейнер – одна задача.
  5. Чистить за собой в контейнере.
  6. Использовать multi-stage сборки (для компилируемых языков).
  7. Использовать 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

docker 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.

Docker location on windows

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

Docker location

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…”

Settings On Docker Desktop for linux containers

And now see the path.

Settings Page on docker desktop showing the path

On my machine, it’s C:ProgramDataDockerDesktopvm-data

LinuxImages location

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

Добавить комментарий