DevOps и облака
Что такое контейнер?
Контейнер — это изолированная среда, в которой приложение работает вместе со всеми своими зависимостями, но использует ядро операционной системы сервера. Программа внутри контейнера видит только собственные файлы и процессы.
Контейнеры делают работу приложения предсказуемой: все библиотеки зафиксированы в образе, поэтому программа ведёт себя одинаково на любом сервере. При этом один сервер может запускать десятки контейнеров, которые не мешают друг другу.
Важная особенность — контейнер временный. Его могут в любой момент остановить и запустить заново, поэтому данные хранят не в нём, а во внешних томах и базах данных.
Где применяется
Контейнер стал стандартным способом поставки приложений. В контейнерах разворачивают веб-сервисы и API, запускают сборку кода, поднимают базы данных для тестов, упаковывают аналитические инструменты. Почти все облачные платформы — от простого хостинга до Kubernetes — принимают приложение именно в виде контейнера.
Для команды главная польза — предсказуемость. Среда описана в образе, который хранится в репозитории рядом с кодом. Поэтому обновление версии языка или библиотеки становится обычным изменением, которое видно в истории и можно отменить.
Пример
Приложению нужна старая версия библиотеки, а на сервере установлена новая, от которой зависит другой сервис. В контейнерах такого конфликта нет: у каждого своя среда, и он не мешает соседям.
docker run -d \
--name pg \
-e POSTGRES_PASSWORD=secret \
-p 5432:5432 \
postgres:16
docker ps
docker logs -f pg
Контейнер и виртуальная машина: разница
Виртуальная машина имитирует целый компьютер с собственной операционной системой, поэтому её образ занимает гигабайты, а запуск длится минуты. Контейнер использует ядро сервера и содержит только приложение с зависимостями: десятки мегабайт и запуск за секунды. Виртуальная машина лучше изолирована, контейнер легче и быстрее.
Частые вопросы
Чем контейнер отличается от виртуальной машины?
Виртуальная машина содержит полную операционную систему, занимает гигабайты и запускается минутами. Контейнер использует ядро сервера и содержит только приложение с зависимостями: десятки мегабайт и запуск за секунды. Зато изоляция у него слабее.
Сохраняются ли данные в контейнере после перезапуска?
По умолчанию нет: файловая система контейнера временная и исчезает вместе с ним. Для базы данных или загруженных файлов подключают отдельный том, который существует независимо от контейнера. Новички часто об этом забывают.
Сколько контейнеров можно запустить на одном сервере?
Ограничивает не количество, а ресурсы: память, процессор, диск. На обычном сервере легко работают десятки контейнеров, потому что каждый забирает минимум лишних ресурсов. Именно поэтому контейнеры выгоднее виртуальных машин.
Безопасны ли контейнеры?
Изоляция есть, но слабее, чем у виртуальных машин, потому что ядро общее. Поэтому базовые образы регулярно обновляют, процессы в контейнере не запускают от администратора, а образы проверяют на известные уязвимости. Для чувствительных задач иногда выбирают виртуальные машины.
Обучение DevOps в OWU
Освойте профессию DevOps-инженера на практических курсах с менторами и реальными проектами.
Выбрать курс