Реклама ООО Таймвэб
Реклама ООО Таймвэб

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

2 комментария
Основные команды для Docker

Рассмотрим систему управления контейнерами под названием 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 — пример вывода информации о портах

Ключевые аспекты удаления контейнеров

Удаление контейнеров в Docker является неотъемлемой частью эффективного управления контейнеризированной средой.

Этот процесс позволяет решить следующие задачи:

  • удаление неиспользуемых контейнеров помогает освободить дисковое пространство;
  • удаление старых или устаревших версий контейнеров помогает предотвратить конфликты и сохраняет среду актуальной;
  • удаление ненужных контейнеров способствует поддержанию организованности и чистоты в вашей среде.

Обычно необходимость удаления контейнеров в Docker возникает после их использования. 

Основная команда удаления — docker rm

Ключевой инструмент для удаления контейнеров в Docker — это команда docker rm. Чтобы ее использовать, необходимо знать идентификатор (ID) или имя контейнера, который вы хотите удалить. 

Пример использования:

docker rm [имя_контейнера или ID]

Эта команда удаляет выбранный контейнер. 

Важно помнить, что перед удалением контейнер должен быть остановлен. Для этого вы можете использовать следующую команду:

docker stop

При попытке удалить работающий контейнер, Docker выдаст ошибку. 

Принудительное удаление

Если вы хотите удалить работающий контейнер, вы можете использовать опцию -f (force):

docker rm -f [имя_контейнера или ID]

Эта команда самостоятельно остановит и удалит контейнер, даже если он в данный момент активен.

Удаление всех остановленных контейнеров

Вы также можете удалить все остановленные контейнеры. Это полезно для очистки системы от неиспользуемых контейнеров.

Пример команды:

docker container prune

Перед выполнением этой команды Docker запросит подтверждение, чтобы предотвратить случайное удаление контейнеров.

Важность удаления контейнеров

Удаление контейнеров не только способствует поддержанию чистоты и порядка в вашей Docker-среде, но и является важной частью управления ресурсами. Оно позволяет избежать излишней нагрузки на систему и улучшить производительность за счет более эффективного распределения ресурсов.

Использование команд docker rm и docker container prune обеспечивает удобный и гибкий контроль над контейнерами в вашей системе. Они позволяют легко удалять как отдельные контейнеры, так и осуществлять массовую очистку при необходимости. Это делает управление Docker-контейнерами более эффективным и организованным, что важно для поддержания здоровой и оптимизированной рабочей среды.

Удаление образов

Управление образами является критически важным компонентом работы с Docker, наравне с управлением контейнерами. 

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

Это действие позволяет решить следующие задачи:

  • удаление старых и неиспользуемых образов помогает предотвратить заполнение дискового пространства ненужными файлами;
  • регулярная очистка помогает избегать замедления системы и улучшает ее производительность;
  • удаление устаревших версий позволяет избежать путаницы и потенциальных ошибок из-за наличия множества версий одного образа.

Команда docker rmi

Для удаления образов Docker используется команда docker rmi. При этом тоже требуется указать ID образа или его имя (тег). 

Пример:

docker rmi [ID_образа или имя]

Такая команда удалит указанный образ. Однако, если он используется в активных контейнерах, Docker выдаст ошибку.

Принудительное удаление образов

Если вы хотите удалить образ, который используется в контейнерах, можно использовать опцию -f (force), чтобы принудительно удалить его.

Пример:

docker rmi -f [ID_образа или имя]

Это удалит образ, даже если он используется в активных или остановленных контейнерах.

Удаление неиспользуемых образов

Чтобы освободить место, которое занято старыми или временными образами, можно применить специальную команду для удаления всех образов, которые сейчас не используются в контейнерах. 

Пример команды:

sudo apt update

Docker запросит подтверждение, прежде чем удалить неиспользуемые образы.

Дополнительные рекомендации:

  • регулярно проверяйте свою систему на предмет устаревших или неиспользуемых образов, чтобы поддерживать ее эффективность;
  • используйте механизмы оптимизации образов (например, многоступенчатые сборки), чтобы минимизировать размер и количество сохраняемых образов;
  • поддерживайте четкий версионный контроль ваших образов, чтобы легче определять, какие из них устарели.

Используя команды docker rmi и docker image prune, вы можете эффективно управлять образами в вашей системе Docker. Это позволяет оптимизировать использование дискового пространства и поддерживать порядок в вашей рабочей среде. Таким образом вы не только обеспечите чистоту и организованность вашей системы, но и повысите ее оптимальную производительность.

Удаление томов

Тома (volumes) в Docker играют ключевую роль для хранения и управления данными, которые используются в контейнерах. По мере работы с Docker, тома тоже могут накапливаться, занимая ценное дисковое пространство и создавая потенциальный беспорядок в системе. Эффективное управление томами, включая их удаление, является важным аспектом для поддержания оптимальной работы и организации вашей Docker-среды.

Этот процесс позволяет решить следующие задачи:

  • удаление старых и неиспользуемых томов помогает освободить дисковое пространство для новых данных и приложений;
  • удаление ненужных томов может помочь улучшить производительность системы, особенно в средах с ограниченным дисковым пространством;
  • удаление неиспользуемых томов позволяет упростить управление данными, а также помогает избежать путаницы в идентификации и использовании нужных томов.

Команда docker volume rm

Эта команда используется для удаления конкретного тома в Docker. Аналогично, при этом нужно указать имя или ID тома, который вы хотите удалить. 

Пример использования:

docker volume rm [имя_тома]

Эта команда удалит указанный том. Опять же, нужно учитывать, что этот том не должен использоваться ни в одном контейнере на момент удаления. Иначе Docker выдаст ошибку.

Удаление неиспользуемых томов

При необходимости можно одной командой удалить все тома, которые в данный момент не используются ни в одном контейнере. Таким образом можно освободить место, удаляя тома, которые больше не нужны. 

Пример команды:

docker volume prune

Docker запросит подтверждение перед удалением неиспользуемых томов.

Эффективное управление томами помогает предотвратить накопление «мертвого» веса в виде неиспользуемых данных, что особенно важно в средах с ограниченным дисковым пространством. Используя указанные выше команды, вы можете поддерживать порядок и эффективность вашей Docker-среды.

Дополнительные рекомендации:

  • регулярно проверяйте и оценивайте тома в вашей системе, чтобы определить, какие из них больше не нужны;
  • рассмотрите возможность автоматизации процесса удаления неиспользуемых томов, особенно в больших или динамичных средах;
  • включайте инструменты мониторинга для отслеживания использования томов и оптимизации хранения данных.

Благодаря грамотному управлению томами вы сможете поддерживать порядок и эффективность вашей Docker-среды, предотвращая накопление неиспользуемых данных. Это обеспечивает не только чистоту и организованность вашей системы, но и способствует ее оптимальной производительности, что особенно важно в средах с ограниченным дисковым пространством.

Оптимизация и очистка сетевых ресурсов

Сети в Docker позволяют контейнерам взаимодействовать между собой, а также с внешним миром. По мере использования Docker может возникать необходимость в удалении неиспользуемых или временных сетей для обеспечения эффективного управления ресурсами и поддержания порядка в вашей Docker-среде. 

Таким образом можно решить следующие задачи:

  • удаление неиспользуемых или временных сетей помогает предотвратить заполнение сетевых ресурсов ненужными данными;
  • регулярная очистка помогает поддерживать организованность и чистоту в вашей среде Docker;
  • удаление старых сетей может помочь избежать потенциальных конфликтов сетевых настроек.

Удаление конкретной сети: docker network rm

Для удаления конкретной сети в Docker нужно использовать команду docker network rm, а также указать имя или ID этой сети. 

Пример использования:

docker network rm [имя_сети]

Важно, чтобы никакие контейнеры не были подключены к сети на момент удаления. Если сеть используется, Docker выдаст ошибку.

Удаление неиспользуемых сетей

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

Пример:

docker network prune

Docker запросит подтверждение перед удалением неиспользуемых сетей.

Регулярное удаление ненужных сетей помогает оптимизировать использование сетевых ресурсов и поддерживать чистоту и порядок в вашем Docker окружении. Вы можете эффективно управлять сетями в вашей системе, используя соответствующие команды.

Дополнительные рекомендации:

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

Команды docker network rm и docker network prune обеспечивают гибкое и эффективное управление сетевыми ресурсами в вашей Docker-среде. Регулярное удаление неиспользуемых сетей помогает не только оптимизировать использование ресурсов, но и поддерживает организованность и чистоту вашей рабочей среды, что критически важно для поддержания высокой производительности и стабильности системы.

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

echo -e "Все про серверы, сети, хостинг и еще раз серверы" >/dev/pts/0

Комментарии

Bass Cloud 0
23 марта в 2023
всё круто только образы удаляются не как контейнеры а с помощью команды rmi
Сергей 0
31 окт в 2023
Спасибо. Этого, действительно достаточно для начала! Информация удобно структурирована. Часто приводятся и объясняются частные случаи. А этого даже для начала маловато. Еще раз спасибо!
С помощью соцсетей
У меня нет аккаунта Зарегистрироваться
С помощью соцсетей
У меня уже есть аккаунт Войти
Инструкции по восстановлению пароля высланы на Ваш адрес электронной почты.
Пожалуйста, укажите email вашего аккаунта
Ваш баланс 10 ТК
1 ТК = 1 ₽
О том, как заработать и потратить Таймкарму, читайте в этой статье
Чтобы потратить Таймкарму, зарегистрируйтесь на нашем сайте