Введение в Docker: образы, контейнеры и докер-файлы

Сложно представить современную инфраструктуру без контейнеров и микросервисов. Эти технологии давно уже зарекомендовали себя, а Docker стал нарицательным именем для контейнеризации. В этой статье мы расскажем, что такое Docker, образ, контейнер и Dockerfile, а одна из следующих статей будет посвящена Docker-compose. Начнем с понятия Docker. Docker — это средство или система упаковки, доставки и запуска приложений. Он позволяет запускать приложения написанные на разных языках программирования благодаря унифицированному подходу к упаковке, доставке и запуску приложений. Несмотря на то, что Docker стал уже давно стандартом в DevOps, до сих пор его установка у начинающих пользователей вызывает затруднения. Чтобы у наших читателей не было с этим проблем — мы подготовили краткую инструкцию по его установке. Появление докера сильно упростило процесс доставки и запуска приложений у конечных пользователей. Docker, следуя специальным инструкциям, прописанным разработчиком в конфигурационных файлах (Dockerfile и Docker-compose.yaml), собирает всё необходимое для запуска приложения в одно место — в образ. Docker-образ можно сравнить с CD-диском, с которого в будущем будет установлен и запущен некий софт.

n

Контейнер в свою очередь — это запущенная копия образа. В начале статьи мы сказали, что Docker — это целая экосистема, которая содержит различные компоненты. Давайте теперь рассмотрим эти компоненты поближе. Переменные компоненты: Docker image (докер-образ), Docker container (докер-контейнер), Docker registry (репозиторий), Dockerfile (докер-файл), Docker-compose.yaml (конфигурационный файл кластера контейнеров). Docker host (докер-хост) — это просто компьютер или виртуальный сервер, на котором установлен Docker. Кстати, Docker можно запустить и из WSL 2. Это удобно, если вы работаете под Windows и используете Visual Studio Code. Прочитать о том как настроить WSL для работы с докером можно здесь. Docker daemon (докер-демон) — центральный системный компонент, который управляет всеми процессами докера: создание образов, запуск и остановка контейнеров, скачивание образов. Работает Docker daemon как фоновый процесс (демон) и постоянно следит за состоянием других компонентов. Docker client (докер-клиент) — это утилита, предоставляющая API к докер-демону. Разберём теперь подробнее компоненты второй группы. Начнём с центральных элементов — докер-образа.

n

Docker образ — это шаблон (физически — исполняемый пакет), из которого создаются Docker-контейнеры. Образ хранит в себе всё необходимое для запуска приложения, помещенного в контейнер: код, среду выполнения, библиотеки, переменные окружения и конфигурационные файлы. Docker-образ создаётся с помощью команды docker build, которая считывает конфигурацию создаваемого образа из специального конфигурационного файла — dockerfile. В Dockerfile записываются команды и опции создания образа, а также некоторые настройки будущего контейнера, такие как порты, переменные окружения и другие опции. Каждая команда записанная в dockerfile создаёт свой слой. Чем больше слоёв, тем дольше будет собираться образ и дольше загружаться контейнер. Финальный Docker-образ — это объединение всех слоев в один. Благодаря такому подходу можно переиспользовать уже готовые образа для создания новых образов. Рассмотрим на реальном примере процесс формирования Docker-образа. Предположим мы хотим запустить Docker-контейнер с микросервисом написанном на Python. Поскольку контейнер изолирован от всего, что происходит на хостовой машине, наше приложение не сможет запуститься, ведь в контейнере нет питона, а питон в свою очередь не сможет запуститься без ОС.

n

Получается, чтобы запустить приложение на питоне, в контейнере должна быть ОС и Python. Возникает вопрос: откуда нам это всё взять? Первая команда говорит докеру следующие: возьми образ Python с тегом latest, а если его нет локально — скачай из хаба. Вторая команда — создаст директорию app. Третья команда установит директорию /usr/app/ в качестве рабочей директории, а команда CMD осуществит системный вызов, который будет выполнен при старте контейнера. Docker заботится об используемых ресурсах, поэтому скачанные или собранные самостоятельно образы хранятся локально. Посмотреть их можно командой docker images. Вы могли заметить, что образы довольно объемны и хранить их локально накладно. Для экономии места и «правильной передачи образов другим разработчикам», Docker предлагает удобный инструмент загрузки образов в удалённый репозиторий. Теперь вы можете их скачать на любую машине командой docker pull название образа. Образ — это только шаблон для создания контейнеров. В основе любого образа лежит родительский образ, который, как правило, содержит ОС. Образ состоит из слоев. Каждая команда в Dockerfile создаёт новый слой. Образы можно переиспользовать много раз.

n

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *