23.06.2025

Docker container: что это и как управлять?

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

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

Как работает контейнер?

Docker container – это фактически ограниченный процесс в операционной системе, к которому прикрепили отдельную файловую систему, сетевой стек и PID. Все эти компоненты были виртуально созданы в рамках одного ядра, после чего добавлены к процессу контейнера. На схеме связей фиолетовым отображены компоненты и процесс контейнера, а синим хостовые объекты:

Скриншот №1 — Схема

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

Как запускать и управлять контейнерами Docker?

Рассмотрим основные примеры использования и работы с контейнером. Представим, что у нас есть ТЗ на развертку Web-приложения или любого иного сервиса, но через Docker. Для этого мы можем использовать, как готовый образ или слепок системы, который будет разворачивать в нашем контейнере, так и написать Docker File самим. В данном материале рассмотрим первый случай, второй вы можете найти в нашем подробном руководстве. Предустановим все зависимости и необходимые компоненты командой:

apt update && apt install docker.io docker-compose -y

Скриншот №2 — APT установка

После чего запустим контейнер командой docker run container, где также укажем его основные параметры для работы:

docker run -d -p 8080:80 --name my_container -v data:/app/data nginx

Скриншот №3 — Docker run

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

docker ps

Скриншот №4 — Docker running containers

На устройстве оказались еще два дополнительно запущенных контейнера, здесь видно их основные характеристики и состояние на текущий момент. Чтобы выполнить процесс docker connect to container или же войти в контейнер пропишем команду:

docker exec -it my_container /bin/bash

Где docker exec это утилита и субкоманда, -it опция интерактивного связывания нашего терминала и процесса в контейнере, my_container имя контейнера, а /bin/bash наша запускаемая оболочка.

Скриншот №5 — Bash

Логически мы открываем новый процесс вывод которого отображается у нас в терминале, соответственно работаем через него. Для выхода используем сочетание клавиш Ctrl+D или команду exit.

Чтобы завершить запущенный контейнер, пропишем команду:

docker stop  my_container

А если нужно закрыть сразу все, то пропишите указанную ниже. Она позволит выполнить функцию внутри себя, которая вернет лишь список ID всех контейнеров:

docker stop $(docker ps -q)

Сейчас они находятся в остановленном состоянии, соответственно их можно командой docker run обратно запустить.

Обратите внимание, что данные после перезапуска не сохраняются на машине, кроме объявленных для хранения мест -v data:/app/data. Для того, чтобы данные сохранялись без хранилища, после перезапуска (docker save), используйте команду docker container commit <container> <image>! 

Удалить их можно командой ниже для одно контейнера:

docker container remove my_container

И для всех существующих контейнеров сразу:

docker container remove $(docker container ls -a -q)

Скриншот №6 — Remove Docker container

Она так же позволит выполнить сначала функцию по их перечислению, а затем удалить все те, которые были возвращены в команду. Так же в процессе работы вы можете просматривать логи вашего контейнера с помощью такой же команды docker logs <name_of_container>. Они перенаправляются из данной виртуальной среды в файл, вывод которого можно фильтровать. К примеру найти необходимые строки с аутентификацией в контейнер:

docker logs | grep "SSH"

При нехватке собственных мощностей можно воспользоваться облачными серверами от Serverspace, для этого перейдем к созданию сервера, на любой из двух платформ vStack cloud или же VMware cloud. Нажмем на кнопку Создать сервер и выберем конфигурацию, подходящую под наши задачи, затем нажмем кнопку Создать:

Скриншот №6 — Создание сервера

Рассмотрим одну из последних функций Docker контейнеров – docker container stats. Для мониторинга производительности и жизнеспособности существующего приложения и сервиса в Docker есть встроенное решение:

docker container stats <container_name>

Скриншот №7 — Docker statistic

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