Docker отличная платформа, которая собрала в себе множество инструментов и библиотек, позволяющих создавать изолированные пространства с приложениями/сервисами. Они автоматизированно развертываются, позволяя без знаний работы приложения, использовать готовое решение!
Такие пространства еще называются Docker контейнерами, благодаря своим возможностям изоляции от хоста, за исключением общего ядра и повышенной эффективности – они стали использоваться для развертывания сервисов и иных решений. В данном материале рассмотрим все о них, а так же практических примерах с их использованием!
Как работает контейнер?
Docker container – это фактически ограниченный процесс в операционной системе, к которому прикрепили отдельную файловую систему, сетевой стек и PID. Все эти компоненты были виртуально созданы в рамках одного ядра, после чего добавлены к процессу контейнера. На схеме связей фиолетовым отображены компоненты и процесс контейнера, а синим хостовые объекты:
При такой схеме взаимодействия достигается определенный уровень сетевой и файловой изоляции, кроме ядра, что достаточно часто эксплуатируют хакеры. Поэтому рекомендуется, для подобных сред максимально ограничить площадь взаимодействия с хостовой машиной. К примеру, лучше использовать виртуальные тома для хранения конфигов и прочих данных. Так как, если вы прикрепите хостовой том к контейнеру, то виртуальный root будет иметь такие же права на файлы, как и хостовой!
Как запускать и управлять контейнерами Docker?
Рассмотрим основные примеры использования и работы с контейнером. Представим, что у нас есть ТЗ на развертку Web-приложения или любого иного сервиса, но через Docker. Для этого мы можем использовать, как готовый образ или слепок системы, который будет разворачивать в нашем контейнере, так и написать Docker File самим. В данном материале рассмотрим первый случай, второй вы можете найти в нашем подробном руководстве. Предустановим все зависимости и необходимые компоненты командой:
После чего запустим контейнер командой docker run container, где также укажем его основные параметры для работы:
После запуска утилиты для создания контейнера с пробросом 80 порта виртуальной среды на хостовую машину, а так же созданием виртуального тома data для хранения данных контейнера, был начат процесс инициализации. Образа не нашлось на устройстве, поэтому он был докачан из репозитория и развернут. Для просмотра контейнера пропишем команду:
На устройстве оказались еще два дополнительно запущенных контейнера, здесь видно их основные характеристики и состояние на текущий момент. Чтобы выполнить процесс docker connect to container или же войти в контейнер пропишем команду:
Где docker exec это утилита и субкоманда, -it опция интерактивного связывания нашего терминала и процесса в контейнере, my_container имя контейнера, а /bin/bash наша запускаемая оболочка.
Логически мы открываем новый процесс вывод которого отображается у нас в терминале, соответственно работаем через него. Для выхода используем сочетание клавиш Ctrl+D или команду exit.
Чтобы завершить запущенный контейнер, пропишем команду:
А если нужно закрыть сразу все, то пропишите указанную ниже. Она позволит выполнить функцию внутри себя, которая вернет лишь список ID всех контейнеров:
Сейчас они находятся в остановленном состоянии, соответственно их можно командой docker run обратно запустить.
Удалить их можно командой ниже для одно контейнера:
И для всех существующих контейнеров сразу:
Она так же позволит выполнить сначала функцию по их перечислению, а затем удалить все те, которые были возвращены в команду. Так же в процессе работы вы можете просматривать логи вашего контейнера с помощью такой же команды docker logs <name_of_container>. Они перенаправляются из данной виртуальной среды в файл, вывод которого можно фильтровать. К примеру найти необходимые строки с аутентификацией в контейнер:
При нехватке собственных мощностей можно воспользоваться облачными серверами от Serverspace, для этого перейдем к созданию сервера, на любой из двух платформ vStack cloud или же VMware cloud. Нажмем на кнопку Создать сервер и выберем конфигурацию, подходящую под наши задачи, затем нажмем кнопку Создать:
Рассмотрим одну из последних функций Docker контейнеров – docker container stats. Для мониторинга производительности и жизнеспособности существующего приложения и сервиса в Docker есть встроенное решение:
Относительно него мы можем оценить какая заполненность диска, нагрузка в виртуальной среде, чтобы во время добавить необходимых мощностей или оттраблшутить. Мы рассмотрели все необходимые основы по управлению виртуальными средами, данные знания позволят вам более эффективно управлять своими сервисами и решениями!