Прежде чем разбираться в Docker, давайте посмотрим на контейнеры Linux.
Linux Контейнеры это что за зверь?
В обычной виртуализированной среде зачастую запускается одна или несколько виртуально созданных машин поверх физического сервера с использованием специального программного обеспечения — гипервизора (Xen,Vsphere, Hyper-v и др.). На уровне же операционной системы, за виртуализацию отвечают контейнеры. Контейнеры работают в своем отдельном пространстве пользователя внутри операционной системы, при этом данное пространство изолированно. Контейнер в своей работе используют отдельное пространство, за счет этого вы сможете легко запустить несколько контейнеров на одной машине и у каждого контейнера будет свое собственное пространство. Вы сможете использовать контейнеры даже для запуска различных систем Linux, которые будут находиться внутри контейнера, используя одну хост машину. Используя виртуальную машину Ubuntu, сможете запустить контейнер с RHEL или SUSE Linux независимо друг от друга, при этом используя для каждого из контейнеров необходимое для их работы окружение, хотя Ваш хост будет являться хостом Ubuntu.
Изоляция Linux контейнеров достигается за счет использования двух основных функций ядра системы Linux — это пространство имен и контрольные группы.
Пространства имен:
В ОС Linux вы можете встретить пять пространств имен
- PID пространство имен: данное пространство изолирует сам процесс внутри системы Linux (ID процесса — PID).
- Сетевое пространство имен (namespace net): данное пространство регулирует и управляет работой сетевых интерфейсов Linux системы.
- Пространство IPC: отвечает за управление доступом к InterProcess Communication или связями между процессами.
- MNT (Mount) пространство: управляет точками монтирования файловой системы.
- Пространство Unix Timesharing System (UTS): управляет изоляцией идентификаторов версий ядра.
Контейнер используя данные пространства имен создает свои собственные интерфейсы сети, уникальные IP адреса для каждого контейнера и др. При этом контейнер, работая в собственном уникальном пространстве, не будет иметь привилегий доступа к другим пространствам имен и ограничен лишь своем окружением.
Контрольные группы:
Ресурсы, используемые контейнером, управляются группами управления Linux. Вы можете решить, сколько ресурсов процессора и памяти должен использовать контейнер, используя группы управления Linux. Контейнер не новая концепция. Google уже несколько лет использует свою собственную контейнерную технологию в своей инфраструктуре.
Что такое Докер?
Docker — это проект, который использует открытый исходный код и распространяется под свободной лицензией. Docker — основан на работе контейнеров в системе Linux, а в качестве языка программирования для написания Docker использовался язык Go от компании Google. Разработчиком Docker, является DotCloud. Docker — это не сам контейнер, а его движок, который работает с функциями системы Linux и ее ядра. Docker создает контейнеры в ОС Linux и служит для автоматизации развертывания контейнеров с приложениями. Вам больше не нужно тратить большое количество времени на создание среды для работы вашего приложения, Docker упростит перенос приложения с ноутбука разработчика или тестовой среды на рабочую среду. Это очень легко и крайне быстро и работает на любом хосте с подходящим ядром Linux.
В работе с файловой системой Docker используется механизм Copy-On-Write для внутреннего хранилища. Когда вы изменяете контейнер Docker будет записывать изменения на диск с использованием методов копирования при записи. Создание же контейнеров с помощью Docker занимает менее нескольких секунд.
Что нужно знать о Docker:
- Докер это не LXC
- Docker не является решением для виртуальных машин.
- Docker не является системой управления конфигурацией и не является заменой для chef, puppet, Ansible.
- Docker — это не платформа как сервисная технология.
Компоненты докера:
- Docker Client и Daemon.
- Docker Images
- Docker registries
- Контейнеры
Как работает Docker?
Docker имеет архитектуру клиент-сервер. Docker Daemon или сервер отвечает за все действия, связанные с контейнерами. Демон получает команды от клиента Docker через CLI или REST API. Клиент Docker может находиться на том же хосте, что и демон, или может присутствовать на любом другом хосте.
Изображения (Docker Images) являются основными строительными блоками Docker. Контейнеры построены из изображений. Изображения можно настроить с помощью приложений и использовать в качестве шаблона для создания контейнеров. Он организован многослойно. Каждое изменение в изображении добавляется как слой поверх него.
Docker registry — это хранилище образов Docker. Используя реестр Docker, вы можете создавать и делиться изображениями с вашей командой. Реестр может быть публичным или частным. Docker Inc предоставляет службу реестра, которая называется Docker Hub. Это позволяет загружать и скачивать изображения из центрального расположения. Если ваш репозиторий общедоступен, все ваши изображения могут быть доступны для других пользователей Docker-hub. Вы также можете создать личный реестр в Docker Hub. Docker-концентратор действует как git, где вы можете создавать свои изображения локально на своем ноутбуке, фиксировать его, а затем его можно отправить в Docker-концентратор.
Контейнер — это среда выполнения Docker. Контейнеры создаются из изображений. Это доступный для записи слой изображения. Вы можете упаковать свои приложения в контейнер, зафиксировать его и сделать его основным изображением, чтобы создавать из него больше контейнеров. Два или более контейнеров могут быть связаны вместе, чтобы сформировать многоуровневую архитектуру приложения. Контейнеры могут быть запущены, остановлены, зафиксированы и прекращены. Если вы завершите работу контейнера без его фиксации, все изменения, внесенные в контейнер, будут потеряны.
Заключение:
Лучшая особенность Docker — это сотрудничество. Образы Docker могут быть переданы в хранилище и могут быть перенесены на любой другой хост для запуска контейнеров из этого образа. Кроме того, в Docker-концентраторе есть тысячи образов, созданных пользователями, и вы можете загружать эти образы на свои хосты в зависимости от требований вашего приложения.
2 comments On Что такое Docker? Как это работает?
Спасибо, наглядно для тех, кто никогда не сталкивался. Сразу вопрос — у нас большая часть приложений на стеке Microsoft. Умеет ли с ним работать docker?
Да контейнеры Docker работают с продуктами компании Microsoft, если Вам интересно, то в скором времени будет еще больше материала по данным вопросам. К тому же если Вам необходима помощь мы всегда готовы рассмотреть варианты к сотрудничеству.