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