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