При упоминании kubernetes часто всплывают два основных термина: контейнеры и оркестрация. Сегодня разберёмся что такое контейнеры и чем они отличаются от виртуальных машин, а также рассмотрим на пальцах разницу между контейнером и образом.
Что такое Kubernetes и для кого этот курс я описал здесь:
В этой статье описана самая популярная контейнерная технология Docker. Если вы уже знакомы с этим ПО, возможно, эта часть покажется вам скучной.
Контейнеры
Контейнеры - это полностью изолированная среда, в которой содержится код и все зависимости приложения для его быстрой и надёжной работы в разных вычислительных средах.
Вам не нужно заботиться о совместимости разных версий пакетов с установленными приложениями, т.к. каждый контейнер содержит все необходимые зависимости.
Несмотря на то, что у контейнеров есть собственные процессы, службы, тома хранения данных и сетевые интерфейсы, они не являются виртуальными машинами, т.к. используют ядро операционной системы.
Docker
Docker - программное обеспечение с открытым исходным кодом, которое предназначено для автоматизации развёртывания и управления приложениями в виде переносимых автономных контейнеров.
Контейнеры - это не новшество, введённое Docker, они существовали до появления этой технологии. Популярные типы контейнеров: LXC, LXD, LXCFS и др.
Docker использует контейнеры LXC. Сама по себе их настройка сложна, т.к. они очень низкоуровневые, но docker позволяет сделать управление ими по-настоящему простым и в то же время функциональным.
Принцип работы docker
Как было сказано выше, контейнеры docker совместно используют ядро операционной системы хоста. Чтобы лучше понять что это значит, рассмотрим простой пример.
У нас есть операционная система Debian с установленным Docker'ом. Docker может запустить любую версию ОС, основанную на том же ядре, что и основная операционная система, например, Ubuntu, Fedora, CentOS и т.п., так как все они основаны на одном ядре - Linux.
В каждом контейнере docker будет только дополнительное ПО (утилиты, графическое окружение и т.п.), т.е. то, чем отличаются эти ОС.
Как быть с Windows?
Windows не использует ядро Linux, поэтому запустить контейнер с этой ОС на хосте Linux не получится. Для запуска ОС Windows в контейнере Docker, нужен хост с установленной ОС Windows.
Невозможность запуска другого ядра в операционной системе объясняется тем, что основная цель docker'а - контейнеризация приложений, а не виртуализация и запуск различных операционных систем.
Пожалуй, пора рассмотреть различия между контейнерами и виртуальными машинами.
Контейнеры vs. виртуальные машины
Контейнер содержит в себе только приложение и его зависимости, в то время, как виртуальная машина кроме приложения и зависимостей содержит полноценную операционную систему:
Полноценная операционная система в виртуальных машинах влечёт более высокое использование ресурсов, по сравнению с контейнерами:
Откуда берутся контейнеры?
Контейнеры разворачиваются из готовых образов. Вы можете использовать готовые образы, например, из Docker Hub или создать их самостоятельно.
Вы можете опубликовать собственные образы в Docker Hub
Контейнеры vs. образы. В чём разница?
Пожалуй, вы не раз встречали термины docker-image и docker-container и, вероятно, у вас возникал вопрос: чем они отличаются друг от друга?
Если вы работали с виртуальными машинами, то уже знаете, что можно создать шаблон ВМ и затем развернуть из него обычную виртуальную машину. Разница между docker-image и docker-container точно такая же, как между шаблоном ВМ и самой ВМ соответственно.
Контейнеры представляют собой запущенные экземпляры образов.
Заключение
Спасибо, что дочитали статью до конца. Поддержите канал лайком и подпиской, чтобы чаще видеть в ленте подобный контент.
UPD: Следующая часть:
Поддержать мой труд:
- Сбербанк: 2202 2013 5155 5152
- Тинькофф: 2200 7008 1567 2323