Найти тему

Кубер для самых маленьких, ч. 1 | Контейнеры

Оглавление

При упоминании kubernetes часто всплывают два основных термина: контейнеры и оркестрация. Сегодня разберёмся что такое контейнеры и чем они отличаются от виртуальных машин, а также рассмотрим на пальцах разницу между контейнером и образом.

Что такое Kubernetes и для кого этот курс я описал здесь:

В этой статье описана самая популярная контейнерная технология Docker. Если вы уже знакомы с этим ПО, возможно, эта часть покажется вам скучной.

Контейнеры

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

Вам не нужно заботиться о совместимости разных версий пакетов с установленными приложениями, т.к. каждый контейнер содержит все необходимые зависимости.

Каждое приложение использует свои зависимости, причём изолированно от ОС и других контейнеров
Каждое приложение использует свои зависимости, причём изолированно от ОС и других контейнеров
Несмотря на то, что у контейнеров есть собственные процессы, службы, тома хранения данных и сетевые интерфейсы, они не являются виртуальными машинами, т.к. используют ядро операционной системы.

Docker

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-контейнерами и виртуальными машинами
Различия между Docker-контейнерами и виртуальными машинами

Полноценная операционная система в виртуальных машинах влечёт более высокое использование ресурсов, по сравнению с контейнерами:

Разница в потреблении ресурсов
Разница в потреблении ресурсов

Откуда берутся контейнеры?

Контейнеры разворачиваются из готовых образов. Вы можете использовать готовые образы, например, из Docker Hub или создать их самостоятельно.

Официальный образ NextCloud в Docker Hub
Официальный образ NextCloud в Docker Hub
Вы можете опубликовать собственные образы в Docker Hub

Контейнеры vs. образы. В чём разница?

Пожалуй, вы не раз встречали термины docker-image и docker-container и, вероятно, у вас возникал вопрос: чем они отличаются друг от друга?

Если вы работали с виртуальными машинами, то уже знаете, что можно создать шаблон ВМ и затем развернуть из него обычную виртуальную машину. Разница между docker-image и docker-container точно такая же, как между шаблоном ВМ и самой ВМ соответственно.

Контейнеры представляют собой запущенные экземпляры образов.

Заключение

Спасибо, что дочитали статью до конца. Поддержите канал лайком и подпиской, чтобы чаще видеть в ленте подобный контент.

UPD: Следующая часть:

Поддержать мой труд:

-8