Ответ
Docker-контейнер — это изолированный процесс, использующий ядро хостовой ОС. Виртуальная машина — это полноценная эмуляция компьютера с собственной гостевой ОС.
Ключевые отличия, делающие Docker легковесным:
| Аспект | Docker (Контейнер) | Виртуальная Машина (VM) |
|---|---|---|
| Архитектура | Разделяет ядро хоста (через namespaces, cgroups) |
Эмулирует виртуальное железо (через гипервизор) + гостевая ОС |
| Запуск | Секунды (запуск процесса) | Минуты (загрузка всей ОС) |
| Потребление | Минимум RAM/CPU (только приложение + его зависимости) | Значительное (гостевая ОС + приложение) |
| Размер образа | Обычно МБ (например, alpine:3.18 ~ 6MB) |
Обычно ГБ (образ с ОС) |
Пример Dockerfile:
# Использует общее ядро хоста
FROM alpine:3.18
RUN apk add --no-cache openjdk11
COPY app.jar /app.jar
CMD ["java", "-jar", "/app.jar"]
Итог: Docker устраняет оверхед от дублирования ОС и виртуализации железа, упаковывая приложение в более эффективные и быстрые единицы развертывания.