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

Что такое Docker и как он работает

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

Что такое Docker и как он работает.
Изображение от freepik.

Контейнеры Docker работают поверх ядра операционки, используют его мощности и реализуют изоляцию на уровне процесса. Это делает Докер-контейнеры гораздо легковеснее и эффективнее по сравнению с традиционными виртуализированными машинами (ВМ), которые эмулируют работу целых операционных систем. Основное отличие контейнеров от ВМ заключается именно в этом: они (контейнеры) используют одно и то же ядро ОС хоста, но при этом изолируют приложения друг от друга. Благодаря этому можно запустить множество отдельных контейнеров на общем хосте без значительного потребления ресурсов.

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

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

  1. Портативность. Приложения, работающие через Docker, можно запускать в любой системе, где он установлен. Это позволяет разработчикам создавать контейнеры на своих локальных машинах и быть уверенными, что они будут работать одинаково в любой другой среде, будь то тестовый сервер, продуктивная среда или сервер разработки.
  2. Изоляция. Докер изолирует приложения друг от друга и от хостовой системы, что обеспечивает высокий уровень безопасности и предотвращает конфликты зависимостей. Каждое приложение существует в собственном контейнере со своими файловой системой, сетью и процессами. Благодаря этому можно использовать разные версии одного и того же приложения или различных приложений на одном хосте без взаимного влияния.
  3. Масштабируемость. Docker упрощает горизонтальное и вертикальное масштабирование приложений. Контейнеры легко клонировать и распределять по различным хостам, что достаточно сильно оптимизирует управление нагрузкой и ресурсами. Это по-особенному полезно в микросервисной архитектуре, где каждую часть приложения можно развертывать и масштабировать независимо от других.
  4. Быстрое развертывание и откат. С Докером вы можете в считанные минуты развернуть новую версию приложения и также без проблем откатиться к предыдущей при необходимости. В образах Docker содержатся все нужные зависимости и настройки, что помогает избежать проблем с несовместимыми окружениями. Это упрощает процесс непрерывной интеграции и доставки (CI/CD).
  5. Эффективное расходование ресурсов. Если сравнивать с обычными виртуальными машинами, то контейнеры используют хостовые ресурсы более эффективно. Они делят ядро операционной системы и общие библиотеки, а это уменьшает накладные расходы на запуск. В результате можно запускать больше контейнеров на одном хосте и экономить мощности.

Основные компоненты Docker

  1. Главным компонентом Докера является Docker Engine, включающий в себя демон (dockerd), клиентскую утилиту (docker) и REST API для взаимодействия с демоном. Последний отвечает за создание и мониторинг контейнеров. Клиентская утилита добавляет интерфейс командной строки для взаимодействия с демоном.
  2. Docker Images (образы Докер) — это шаблоны, которые используют для сборки контейнеров. Образ, как мы уже писали выше, содержит все компоненты, без которых приложение не будет работать (будь то код, библиотеки, зависимости, настройки и т. д.). Каждый образ создается на основе Dockerfile — текстового файла, где содержатся инструкции, по которым происходит сборка. Такие шаблоны можно сохранять и распространять через официальный Docker Hub или другие реестры образов.
  3. Docker Containers (контейнеры Докер) — это запущенные экземпляры образов. Их можно легко создавать, останавливать, перезапускать и удалять, что упрощает управление приложениями.
  4. Docker Hub — это публичный репозиторий Докер-образов, где пользователи могут находить, загружать и публиковать шаблоны. Docker Hub содержит тысячи публичных образов, которые можно использовать в своих проектах. Кроме того, Docker Hub позволяет создавать частные реестры для хранения собственных образов.
  5. Docker Compose — это инструмент, предназначенный для определения и запуска многоконтейнерных (состоящих из нескольких контейнеров) приложений. Он использует файл YAML, чтобы описывать сервисы, сети и тома, нужные для корректного функционирования приложения. С его помощью довольно легко создавать и масштабировать приложения, части которых «раскиданы» по множеству отдельных контейнеров.

Как установить Docker

Процесс установки Докера будет отличаться в разных операционных системах. Мы покажем, как устанавливать платформу на нескольких популярных ОС: Linux (в частности, Ubuntu), Windows и macOS.

  1. Установка Docker на Убунту. Для начала нам, как и всегда, следует обновить существующие пакеты:

    sudo apt update 
    sudo apt upgrade

    Далее установим необходимые зависимости (чтобы использовать пакеты через https):

    sudo apt install apt-transport-https ca-certificates curl software-properties-common

    Добавим Docker GPG ключ:

    curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -

    Добавим Докер-репозиторий:

    sudo add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable"

    Теперь можно установить Докер с помощью команд:

    sudo apt update 
    sudo apt install docker-ce

    Запускаем Docker и добавляем текущего пользователя в группу:

    sudo systemctl start docker 
    sudo systemctl enable docker
    sudo usermod -aG docker $USER

    Готово!

  2. Установка Docker на Windows. Для работы в Докере на Винде используют приложение с графическим интерфейсом, а не командную строку. Требуется всего несколько шагов:

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

    Обратите внимание, что на Windows требуется включение подсистемы Windows для Linux (WSL) 2 для работы Docker Desktop.

  3. Установка Докер на Мак. Ситуация такая же, как с Виндовс. Нужно:

    • загрузить установочный файл Docker Desktop;
    • переместить загруженный файл в папку Applications и запустить его;
    • выполнить инструкции на экране, а после установки запустить приложение.

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

По завершении установки Докера можно приступать к запуску контейнеров. Для этого нам понадобится образ. Рассмотрим простой пример на основе образа hello-world из официального репозитория.

Проверяем успешную установку Docker:

docker --version

Запускаем контейнер:

docker run hello-world

Докер загрузит образ из Docker Hub (если не найдет его в локальном реестре образов) и запустит контейнер, который выведет приветственное сообщение. Чтобы создать собственный образ, сначала необходимо создать Dockerfile со всеми инструкциями по его сборке. Затем соберите контейнер на основе созданного образа, используя команду:

docker build -t my-node-app .

Где my-node-app — название вашего образа. После можно осуществить запуск:

docker run -p 8080:8080 my-node-app

Эти команды создадут образ на основе вашего Dockerfile и запустят контейнер с приложением, доступным по адресу http://localhost:8080.

Заключение

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