Запуск и управление контейнерами

DockerBeginner
Практиковаться сейчас

Введение

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

В этой лабораторной работе вы будете использовать движок Docker, уже установленный в среде LabEx. Чтобы избежать загрузки образов из публичных репозиториев, в работе используется небольшой практический образ, созданный на основе кэшированного локального базового образа. Вы проверите работу движка, соберете образ, запустите именованный контейнер с примонтированным томом (bind mount), изучите логи и созданные файлы, выполните команду внутри контейнера и очистите систему от запущенного контейнера.

Проверка контейнерного движка

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

Перейдите в директорию проекта.

cd /home/labex/project

Проверьте версию Docker.

docker --version

Выведите список локальных образов.

docker image ls

Вы должны увидеть gcr.io/k8s-minikube/kicbase:v0.0.37, который используется в этой работе как база для локальной сборки.

Обзор и сборка локального образа

На этом этапе вы изучите подготовленный Dockerfile и соберете локальный образ. Образ — это шаблон файловой системы и метаданных, пригодный для повторного использования. Контейнер — это запущенный экземпляр, созданный на основе образа.

Просмотрите содержимое Dockerfile. Строка ENTRYPOINT важна, так как кэшированный базовый образ имеет свою собственную точку входа по умолчанию. В этой работе задается новая точка входа, чтобы контейнер сразу запускал практический скрипт.

cat Dockerfile

Соберите образ и присвойте ему тег lfcs-container-demo:1.0. Опция -t задает имя и тег, а точка . в конце указывает Docker использовать текущую директорию в качестве контекста сборки.

docker build -t lfcs-container-demo:1.0 .

Проверьте наличие образа после успешной сборки.

docker image ls lfcs-container-demo:1.0

Запуск именованного контейнера

На этом этапе вы запустите образ в качестве фонового (detached) контейнера. "Фоновый" означает, что контейнер работает в фоновом режиме. Контейнеру присваивается имя lfcs-demo, а примонтированный том (bind mount) связывает директорию /home/labex/project/container-data на хосте с директорией /data внутри контейнера.

Запустите контейнер.

docker run -d --name lfcs-demo -v /home/labex/project/container-data:/data lfcs-container-demo:1.0

Покажите ID контейнера.

docker ps -q --filter name=lfcs-demo

Выведите список запущенных контейнеров и найдите lfcs-demo.

docker ps --filter name=lfcs-demo

Просмотр логов и выполнение команды

На этом этапе вы изучите работающий контейнер. Логи показывают вывод процесса, запущенного внутри контейнера. Примонтированный том позволяет убедиться, что контейнер записал данные обратно на хост. Команда docker exec позволяет выполнить команду внутри работающего контейнера.

Дайте контейнеру немного времени на запись логов.

sleep 3

Прочитайте последние логи контейнера.

docker logs --tail 5 lfcs-demo

Проверьте файл, записанный через примонтированный том.

tail -n 5 container-data/container-output.log

Выполните команду внутри контейнера, чтобы подтвердить, что примонтированные данные видны изнутри.

docker exec lfcs-demo sh -c 'test -f /data/container-output.log && echo container-data-visible'

Остановка и удаление контейнера

На этом этапе вы очистите систему от запущенного контейнера. Остановка контейнера завершает его процесс. Удаление остановленного контейнера удаляет объект контейнера, но не удаляет собранный вами образ.

Остановите контейнер.

docker stop lfcs-demo

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

docker rm lfcs-demo

Проверьте результат очистки. Команда docker ps -a выводит все контейнеры, включая остановленные. После удаления lfcs-demo не должен отображаться в списке.

docker ps -a --filter name=lfcs-demo

Резюме

Вы отработали полный базовый цикл работы с Docker: проверка движка, использование кэшированного локального базового образа, сборка образа с тегом, запуск именованного фонового контейнера с примонтированным томом, просмотр логов, выполнение команды внутри контейнера, а также остановка и удаление контейнера. Это основные операции, которые необходимо освоить перед переходом к более глубоким темам настройки движка или оркестрации.