Основные команды Docker

Обсудить
Основные команды для Docker

Рассмотрим систему управления контейнерами под названием Docker. Ознакомимся с базовыми принципами ее работы, а также подробно рассмотрим основные команды, необходимые для управления Docker и ее составляющими. 

Краткая справка

Docker — это система управления контейнерами. Контейнеры же представляют собой логическое эволюционное продолжение виртуальных машин. Это изолированная среда для разработки и тестирования программного обеспечения. 

Контейнер Docker потребляет мало ресурсов и быстро запускается, а еще его легко переносить с одного устройство на другое. Из-за этих преимуществ Docker постепенно наращивает аудиторию и превращается в некий индустриальный стандарт, которым пользуются даже крупные корпорации вроде Microsoft. 

Поэтому стоит хотя бы на базовом уровне понимать, что есть Docker и как им управлять. В этом материале речь пойдет об основных командах для управления контейнерами. Будем их создавать, запускать, удалять и выполнять прочие полезные задачи, возникающие по ходу работы. 

Общие сведения об основных командах 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 на начальных этапах. Этих команд хватит, чтобы собрать образ, запустить контейнер и перейти к разработке. А уже по ходу дела вы сможете обращаться в документацию и обогащать свои знания.

Комментарии