Сегодняшняя часть цикла материалов по Docker, перевод которого мы публикуем, посвящена командам Docker. Документация Docker содержит подробнейшее описание великого множества команд, но тот, кто только начинает работу с этой платформой, может в них и потеряться, поэтому здесь приведены почти два десятка самых важных команд для работы с Docker. Продолжая сложившуюся традицию, мы сравним команды с россыпью ягод.
→ Часть 1: основы
→ Часть 2: термины и концепции
→ Часть 3: файлы Dockerfile
→ Часть 4: уменьшение размеров образов и ускорение их сборки
→ Часть 5: команды
→ Часть 6: работа с данными

Давайте вспомним о том, что образы Docker создают на основе файлов Dockerfile, описывающих всё то, что нужно для сборки образов. Кроме того, не будем забывать и о том, что контейнер — это образ Docker, вызванный к жизни. Для того чтобы эффективно пользоваться командами Docker, в первую очередь нужно выяснить — с чем вы имеете дело — с образом или с контейнером. Если подумать об образах и контейнерах, то можно понять, что образ Docker может либо существовать, либо не существовать. То же самое можно сказать и о контейнерах Docker. Существующий контейнер Docker, кроме того, может пребывать либо в работающем, либо в неработающем состоянии.
После того, как вы выяснили, с чем именно вам нужно работать, вы можете найти подходящую команду.
Вот кое-что, о чём полезно знать тем, кто хочет работать с Docker:
Например, команда
Сначала мы будем рассматривать саму команду, потом — флаги, которые можно с ней использовать, если такие флаги существуют. Если перед флагом стоит два тире — то это его полная форма, флаг с одним тире — это сокращённый вариант некоего флага. Действуют они одинаково. Например,
Цель этого материала заключается в том, чтобы дать вам общие сведения о командах Docker. Так вы, имея общее представление о них и зная о возможностях платформы, доступных благодаря этим командам, сможете, при необходимости, найти подробные сведения о них. Команды, о которых пойдёт речь, испытаны на ОС семейства Linux с использованием движка Docker версии 18.09.1 и API версии 1.39.
В интерфейсе командной строки Docker версии 1.13 представлены обновлённые, логически сгруппированные команды. При этом старые команды всё ещё работают, но новыми пользоваться легче, особенно — начинающим. Речь идёт, например, о том, что в версии 1.12 использовалась команда вида
Сначала мы посмотрим на команды, предназначенные для управления контейнерами, затем обсудим управление образами.
Общая схема команд для управления контейнерами выглядит так:
Вот команды, которые могут быть подставлены туда, где мы использовали
Для управления образами используются команды, которые выглядят так:
Вот некоторые из команд этой группы:
Теперь рассмотрим эти команды подробнее.
На начальном этапе работы с контейнерами используются команды
Вот команда для создания контейнера из образа:
В следующих примерах конструкция
Команда
Флаг
После того, как контейнер создан, его можно запустить следующей командой:
Обратите внимание на то, что сослаться на контейнер в команде можно либо используя его
Теперь взглянем на команду, которая позволяет создать и запустить контейнер:
Эта команда тоже способна принимать множество аргументов командной строки. Рассмотрим некоторые из них на примере такой конструкции:
Флаг
Флаг
Для того чтобы получить возможность взаимодействия с контейнером через терминал нужно совместно использовать флаги
Флаг
Флаг
Рассмотрим ещё некоторые примеры команды
В подобной конструкции может применяться команда
Обратите внимание на то, что здесь мы скомбинировали флаги
Вот ещё один пример работы с командой
Флаг
Если у вас имеются запущенные контейнеры Docker и вы хотите узнать о том, что это за контейнеры, вам понадобится вывести их список. Сделать это можно такой командой:
Эта команда выводит список выполняющихся контейнеров и снабжает этот список некоторыми полезными сведениями о них. Вот ещё один пример этой команды:
Ключ
Ключ
Вот команда, которая выводит подробные сведения о контейнере:
Вот команда, выводящая логи контейнера:
Иногда работающий контейнер надо остановить. Для этого используется такая команда:
Она позволяет останавливать работающие контейнеры, позволяя им корректно завершить работу. У контейнера есть, по умолчанию, 10 секунд, на то, чтобы завершить работу.
Если же контейнер нужно остановить быстро, не заботясь о корректном завершении его работы, можно воспользоваться такой командой:
Команда
Вот команда, которая позволяет быстро остановить все работающие контейнеры:
Для удаления остановленного контейнера можно воспользоваться такой командой:
Вот команда, которая позволяет удалить все контейнеры, которые на момент вызова этой команды не выполняются:
Подведём итоги этого раздела. Сначала контейнер создают, потом его запускают, или комбинируют эти два шага, используя команду вида
Потом контейнер останавливают командой
Поговорим теперь о командах, используемых для работы с образами, с теми самыми шаблонами, из которых создают контейнеры.
Вот команда, которая позволяет собирать образы Docker:
В данном случае создаётся образ с именем
Флаг
Точка в конце команды указывает на то, что образ надо собрать с использованием файла Dockerfile, находящегося в текущей рабочей директории.
После того, как образ собран, его можно отправить в удалённый реестр. Благодаря этому им смогут воспользоваться другие люди, его можно будет загрузить и запустить на другом компьютере. Предположим, вы хотите использовать Docker Hub. Если так — вам понадобится завести там учётную запись. Пользоваться этим ресурсом можно бесплатно.
После того, как вы зарегистрируетесь на Docker Hub, вам нужно войти в систему. И хотя команда, которая для этого используется, напрямую к командам, предназначенным для работы с образами, не относится, её полезно будет рассмотреть именно здесь. Речь идёт о следующей команде:
Она позволяет войти в учётную запись на Docker Hub. Для входа в систему вам понадобится ввести имя пользователя и пароль.
После входа в систему можно будет отправлять образы в реестр. Делается это так:
Теперь, когда у вас наберётся несколько образов, вы можете их исследовать с помощью специальных команд.
Вот команда, которая выводит список образов, выводя, в том числе, и сведения об их размере:
Следующая команда позволяет вывести сведения о промежуточных образах, входящих в состав образа, в частности — данные об их размерах и о том, как они были созданы:
Вот команда, которая выводит подробные сведения об образе, в том числе — данные о слоях, из которых состоит образ:
Если вы создадите очень много образов, может случиться так, что некоторые из них понадобится удалить.
Вот команда, которая позволяет удалить указанный образ:
Если образ хранится в удалённом репозитории, он оттуда удалён не будет.
Вот команда, которая позволяет удалить все локальные образы:
Пользоваться этой командой стоит с осторожностью, но надо заметить, что при её использовании образы, хранящиеся в удалённом репозитории, удалены не будут. В этом заключается одно из преимуществ хранения образов в репозиториях.
Мы рассмотрели основные команды, используемые для управления контейнерами и образами. Поговорим теперь ещё о некоторых командах.
Вот команда, которая выводит сведения о версиях клиента и сервера Docker:
Эта, уже известная вам команда, применяется для входа в реестр Docker:
Такая команда позволяет удалить неиспользуемые контейнеры, сети и образы, которым не назначено имя и тег:
Вот пример её использования:
Ключ
Ключ
В этом материале мы рассмотрели полезные команды Docker. Если вы только начинаете работать с Docker, то вам стоит обратить внимание на три следующих важнейших команды:
Создание и запуск контейнера:
Сборка образа:
Отправка образа в удалённый репозиторий:
Для того чтобы посмотреть справку по командам Docker, можете выполнить в терминале команду
В следующий раз мы поговорим о работе с данными в Docker.
Уважаемые читатели! Если вы работаете с Docker, то у вас, наверняка, есть собственный список часто используемых команд. Если это так — просим вас этим списком поделиться.

→ Часть 1: основы
→ Часть 2: термины и концепции
→ Часть 3: файлы Dockerfile
→ Часть 4: уменьшение размеров образов и ускорение их сборки
→ Часть 5: команды
→ Часть 6: работа с данными

Обзор
Давайте вспомним о том, что образы Docker создают на основе файлов Dockerfile, описывающих всё то, что нужно для сборки образов. Кроме того, не будем забывать и о том, что контейнер — это образ Docker, вызванный к жизни. Для того чтобы эффективно пользоваться командами Docker, в первую очередь нужно выяснить — с чем вы имеете дело — с образом или с контейнером. Если подумать об образах и контейнерах, то можно понять, что образ Docker может либо существовать, либо не существовать. То же самое можно сказать и о контейнерах Docker. Существующий контейнер Docker, кроме того, может пребывать либо в работающем, либо в неработающем состоянии.
После того, как вы выяснили, с чем именно вам нужно работать, вы можете найти подходящую команду.
Общие сведения о командах Docker
Вот кое-что, о чём полезно знать тем, кто хочет работать с Docker:
- Команды интерфейса командной строки Docker, используемые для управления чем-либо, начинаются с ключевого слова
docker
, за которым идёт пробел, затем идёт указание на то, на что именно будет направлена некая команда, потом ещё один пробел, а потом следует сама команда. Например, именно так построена такая команда:docker container stop
. - Если команда направлена на конкретный образ или контейнер, то в ней используется имя или идентификатор такого образа или контейнера.
Например, команда
docker container run my_app
— это команда для создания и запуска контейнера с именем my_app
. В примерах, которые будут приведены ниже, контейнеры мы будем называть my_container
, образы — my_image
, теги — my_tag
, и так далее.Сначала мы будем рассматривать саму команду, потом — флаги, которые можно с ней использовать, если такие флаги существуют. Если перед флагом стоит два тире — то это его полная форма, флаг с одним тире — это сокращённый вариант некоего флага. Действуют они одинаково. Например,
-p
— это сокращённая форма флага --port
.Цель этого материала заключается в том, чтобы дать вам общие сведения о командах Docker. Так вы, имея общее представление о них и зная о возможностях платформы, доступных благодаря этим командам, сможете, при необходимости, найти подробные сведения о них. Команды, о которых пойдёт речь, испытаны на ОС семейства Linux с использованием движка Docker версии 18.09.1 и API версии 1.39.
Примечание о командах, поддерживаемых Docker CLI 1.13
В интерфейсе командной строки Docker версии 1.13 представлены обновлённые, логически сгруппированные команды. При этом старые команды всё ещё работают, но новыми пользоваться легче, особенно — начинающим. Речь идёт, например, о том, что в версии 1.12 использовалась команда вида
docker create
, а в версии 1.13 стала доступна команда docker container create
. Сведения о соответствии старых и новых команд можно найти здесь.Сначала мы посмотрим на команды, предназначенные для управления контейнерами, затем обсудим управление образами.
Команды для управления контейнерами
Общая схема команд для управления контейнерами выглядит так:
docker container my_command
Вот команды, которые могут быть подставлены туда, где мы использовали
my_command
:create
— создание контейнера из образа.start
— запуск существующего контейнера.run
— создание контейнера и его запуск.ls
— вывод списка работающих контейнеров.inspect
— вывод подробной информации о контейнере.logs
— вывод логов.stop
— остановка работающего контейнера с отправкой главному процессу контейнера сигналаSIGTERM
, и, через некоторое время,SIGKILL
.kill
— остановка работающего контейнера с отправкой главному процессу контейнера сигналаSIGKILL
.rm
— удаление остановленного контейнера.
Команды для управления образами
Для управления образами используются команды, которые выглядят так:
docker image my_command
Вот некоторые из команд этой группы:
build
— сборка образа.push
— отправка образа в удалённый реестр.ls
— вывод списка образов.history
— вывод сведений о слоях образа.inspect
— вывод подробной информации об образе, в том числе — сведений о слоях.rm
— удаление образа.
Разные команды
docker version
— вывод сведений о версиях клиента и сервера Docker.docker login
— вход в реестр Docker.docker system prune
— удаление неиспользуемых контейнеров, сетей и образов, которым не назначено имя и тег.
Теперь рассмотрим эти команды подробнее.
Контейнеры
▍Начало существования контейнера
На начальном этапе работы с контейнерами используются команды
create
, start
и run
. Они применяются, соответственно, для создания контейнера, для его запуска, и для его создания и запуска.Вот команда для создания контейнера из образа:
docker container create my_repo/my_image:my_tag
В следующих примерах конструкция
my_repo/my_image:my_tag
будет сокращена до my_image
.Команда
create
принимает множество флагов. Например, её можно записать в таком виде:docker container create -a STDIN my_image
Флаг
-a
представляет собой краткую форму флага --attach
. Этот флаг позволяет подключить контейнер к STDIN
, STDOUT
или STDERR
.После того, как контейнер создан, его можно запустить следующей командой:
docker container start my_container
Обратите внимание на то, что сослаться на контейнер в команде можно либо используя его
ID
, либо имя.Теперь взглянем на команду, которая позволяет создать и запустить контейнер:
docker container run my_image
Эта команда тоже способна принимать множество аргументов командной строки. Рассмотрим некоторые из них на примере такой конструкции:
docker container run -i -t -p 1000:8000 --rm my_image
Флаг
-i
— это сокращение для --interactive
. Благодаря этому флагу поток STDIN
поддерживается в открытом состоянии даже если контейнер к STDIN
не подключён.Флаг
-t
— это сокращение для --tty
. Благодаря этому флагу выделяется псевдотерминал, который соединяет используемый терминал с потоками STDIN
и STDOUT
контейнера.Для того чтобы получить возможность взаимодействия с контейнером через терминал нужно совместно использовать флаги
-i
и -t
.Флаг
-p
представляет собой сокращение для --port
. Порт — это интерфейс, благодаря которому контейнер взаимодействует с внешним миром. Конструкция 1000:8000
перенаправляет порт Docker 8000
на порт 1000
компьютера, на котором выполняется контейнер. Если в контейнере работает некое приложение, способное выводить что-то в браузер, то, для того, чтобы к нему обратиться, в нашем случае можно перейти в браузере по адресу localhost:1000
.Флаг
--rm
автоматически удаляет контейнер после того, как его выполнение завершится.Рассмотрим ещё некоторые примеры команды
run
:docker container run -it my_image my_command
В подобной конструкции может применяться команда
sh
, которая создаст сессию терминала в контейнере, с которой можно взаимодействовать через ваш терминал. При работе с образами, основанными на Alpine, лучше ориентироваться на использование sh
а не bash
, так как в этих образах, по умолчанию, оболочка bash
не установлена. Для выхода из интерактивной сессии воспользуйтесь командой exit
.Обратите внимание на то, что здесь мы скомбинировали флаги
-i
и -t
в -it
.Вот ещё один пример работы с командой
run
:docker container run -d my_image
Флаг
-d
— это сокращение для --detach
. Эта команда запускает контейнер в фоновом режиме. Это позволяет использовать терминал, из которого запущен контейнер, для выполнения других команд во время работы контейнера.▍Проверка состояния контейнера
Если у вас имеются запущенные контейнеры Docker и вы хотите узнать о том, что это за контейнеры, вам понадобится вывести их список. Сделать это можно такой командой:
docker container ls
Эта команда выводит список выполняющихся контейнеров и снабжает этот список некоторыми полезными сведениями о них. Вот ещё один пример этой команды:
docker container ls -a -s
Ключ
-a
этой команды — это сокращение для --all
. Благодаря использованию этого ключа можно вывести сведения обо всех контейнерах, а не только о выполняющихся.Ключ
-s
— это сокращение для --size
. Он позволяет вывести размеры контейнеров.Вот команда, которая выводит подробные сведения о контейнере:
docker container inspect my_container
Вот команда, выводящая логи контейнера:
docker container logs my_container
▍Завершение работы контейнера
Иногда работающий контейнер надо остановить. Для этого используется такая команда:
docker container stop my_container
Она позволяет останавливать работающие контейнеры, позволяя им корректно завершить работу. У контейнера есть, по умолчанию, 10 секунд, на то, чтобы завершить работу.
Если же контейнер нужно остановить быстро, не заботясь о корректном завершении его работы, можно воспользоваться такой командой:
docker container kill my_container
Команда
kill
, если сравнить работающий контейнер с включенным телевизором, напоминает выключение телевизора путём отключения его от электричества. Поэтому, в большинстве ситуаций, для остановки контейнеров рекомендуется использовать команду stop
.Вот команда, которая позволяет быстро остановить все работающие контейнеры:
docker container kill $(docker ps -q)
Для удаления остановленного контейнера можно воспользоваться такой командой:
docker container rm my_container
Вот команда, которая позволяет удалить все контейнеры, которые на момент вызова этой команды не выполняются:
docker container rm $(docker ps -a -q)
Подведём итоги этого раздела. Сначала контейнер создают, потом его запускают, или комбинируют эти два шага, используя команду вида
docker run my_container
. После этого запускается контейнеризированное приложение.Потом контейнер останавливают командой
docker stop my_container
. Для удаления контейнера используется команда docker rm my_container
.Поговорим теперь о командах, используемых для работы с образами, с теми самыми шаблонами, из которых создают контейнеры.
Образы
▍Создание образов
Вот команда, которая позволяет собирать образы Docker:
docker image build -t my_repo/my_image:my_tag .
В данном случае создаётся образ с именем
my_image
, при его сборке используется файл Dockerfile, находящийся по указанному пути или URL.Флаг
-t
— это сокращение для --tag
. Он указывает Docker на то, что создаваемому образу надо назначить предоставленный в команде тег. В данном случае это my_tag
.Точка в конце команды указывает на то, что образ надо собрать с использованием файла Dockerfile, находящегося в текущей рабочей директории.
После того, как образ собран, его можно отправить в удалённый реестр. Благодаря этому им смогут воспользоваться другие люди, его можно будет загрузить и запустить на другом компьютере. Предположим, вы хотите использовать Docker Hub. Если так — вам понадобится завести там учётную запись. Пользоваться этим ресурсом можно бесплатно.
После того, как вы зарегистрируетесь на Docker Hub, вам нужно войти в систему. И хотя команда, которая для этого используется, напрямую к командам, предназначенным для работы с образами, не относится, её полезно будет рассмотреть именно здесь. Речь идёт о следующей команде:
docker login
Она позволяет войти в учётную запись на Docker Hub. Для входа в систему вам понадобится ввести имя пользователя и пароль.
После входа в систему можно будет отправлять образы в реестр. Делается это так:
docker image push my_repo/my_image:my_tag
Теперь, когда у вас наберётся несколько образов, вы можете их исследовать с помощью специальных команд.
▍Исследование образов
Вот команда, которая выводит список образов, выводя, в том числе, и сведения об их размере:
docker image ls
Следующая команда позволяет вывести сведения о промежуточных образах, входящих в состав образа, в частности — данные об их размерах и о том, как они были созданы:
docker image history my_image
Вот команда, которая выводит подробные сведения об образе, в том числе — данные о слоях, из которых состоит образ:
docker image inspect my_image
Если вы создадите очень много образов, может случиться так, что некоторые из них понадобится удалить.
▍Удаление образов
Вот команда, которая позволяет удалить указанный образ:
docker image rm my_image
Если образ хранится в удалённом репозитории, он оттуда удалён не будет.
Вот команда, которая позволяет удалить все локальные образы:
docker image rm $(docker images -a -q)
Пользоваться этой командой стоит с осторожностью, но надо заметить, что при её использовании образы, хранящиеся в удалённом репозитории, удалены не будут. В этом заключается одно из преимуществ хранения образов в репозиториях.
Мы рассмотрели основные команды, используемые для управления контейнерами и образами. Поговорим теперь ещё о некоторых командах.
Разные команды
Вот команда, которая выводит сведения о версиях клиента и сервера Docker:
docker version
Эта, уже известная вам команда, применяется для входа в реестр Docker:
docker login
Такая команда позволяет удалить неиспользуемые контейнеры, сети и образы, которым не назначено имя и тег:
docker system prune
Вот пример её использования:
docker system prune -a --volumes
Ключ
-a
— сокращение для --all
, позволяет удалить неиспользуемые образы, а не только те, которым не назначено имя и тег.Ключ
--volumes
позволяет удалить неиспользуемые тома.Итоги
В этом материале мы рассмотрели полезные команды Docker. Если вы только начинаете работать с Docker, то вам стоит обратить внимание на три следующих важнейших команды:
Создание и запуск контейнера:
docker container run my_image
Сборка образа:
docker image build -t my_repo/my_image:my_tag .
Отправка образа в удалённый репозиторий:
docker image push my_repo/my_image:my_tag
Для того чтобы посмотреть справку по командам Docker, можете выполнить в терминале команду
docker
. Здесь можно найти справочные материалы по интерфейсу командной строки Docker.В следующий раз мы поговорим о работе с данными в Docker.
Уважаемые читатели! Если вы работаете с Docker, то у вас, наверняка, есть собственный список часто используемых команд. Если это так — просим вас этим списком поделиться.
