Что такое кроссплатформенная архитектура Docker?
Docker не виртуальная машина, поэтому он запускает только приложения, встроенные в операционную систему, верно? Означает ли это, что Docker для Windows запускает только файлы.exe Windows? Итак, контейнеры Docker для Windows и Linux, что у них общего, если что? Можно ли повторно использовать контейнеры в разных операционных системах?
1 ответ
- "Докер не ВМ"
Правильно, контейнеры следует рассматривать как процессы, выполняющиеся в песочнице. Если вы будете искать, как происходит эта изоляция в Linux, вы обязательно столкнетесь с namespaces
& cgroups
, Одно определение контейнеров, которое я видел в последнее время, гласит:
"Контейнеры - это процессы, созданные на основе тарболлов, привязанные к пространствам имен и контролируемые cgroups"
фотография Дэна Майера, #LeadDevLondon - июнь 2018
Вы также можете найти некоторые интересные вещи относительно контейнеров Linux здесь: Анатомия контейнера: пространства имен, группы и некоторая магия файловой системы - LinuxCon by Jérôme Petazzoni
- Docker для Windows запускает только Windows .exe файлы?
Нет. Учтите, что разработчик с ПК под управлением Windows может работать с контейнерами на основе Linux, которые впоследствии будут развернуты в облаке. Docker для Windows обеспечивает такую гибкость, НО, если вы запускаете контейнеры linux, они будут работать в какой-то среде виртуализации. Изначально Docker toolbox использовал Oracle Virtualbox, теперь Docker для Windows использует Hyper-V.
Я не знаю много о том, как происходит изоляция внутри ОС Windows, но я думаю, что логика похожа на Linux. Некоторая информация о контейнерах Windows:
Типы контейнеров Windows
Контейнеры Windows включают два разных типа контейнеров или среды выполнения.
Контейнеры Windows Server - обеспечивают изоляцию приложений с помощью технологии изоляции процессов и пространств имен. Контейнер Windows Server совместно использует ядро с хостом контейнера и всеми контейнерами, работающими на хосте. Эти контейнеры не обеспечивают враждебную границу безопасности и не должны использоваться для изоляции ненадежного кода. Из-за общего пространства ядра эти контейнеры требуют одинаковой версии и конфигурации ядра.
Изоляция Hyper-V - расширяется изоляция, обеспечиваемая контейнерами Windows Server, благодаря запуску каждого контейнера в высоко оптимизированной виртуальной машине. В этой конфигурации ядро хоста контейнера не используется совместно с другими контейнерами на том же хосте. Эти контейнеры предназначены для враждебного мультитенантного хостинга с одинаковыми гарантиями безопасности виртуальной машины. Поскольку эти контейнеры не разделяют ядро с хостом или другими контейнерами на хосте, они могут запускать ядра с разными версиями и конфигурациями (с поддерживаемыми версиями) - например, все контейнеры Windows в Windows 10 используют изоляцию Hyper-V для использования Версия и конфигурация ядра Windows Server.
Запуск контейнера в Windows с или без Hyper-V Isolation является решением времени выполнения. Вы можете сначала создать контейнер с изоляцией Hyper-V, а затем во время выполнения выбрать запустить его вместо контейнера Windows Server.
- Windows и Linux, что у них общего, если что?
В общем, я бы ответил, что контейнеры служат идее микросервисов, разделения интересов, делают одно и делают это хорошо.
- Можно ли повторно использовать контейнеры в разных операционных системах?
Да и нет. Вы можете столкнуться с ограничениями. Например, если у вас есть приложение, которое запускается FROM ubuntu:latest
и чтобы заставить его работать на Raspberry Pi, вам нужно будет создать новый контейнер из базового образа, созданного для архитектуры arm. Docker - это не абстракция, которая возьмет любой контейнер и заставит его работать на любой архитектуре, ОС... Вы должны знать, чего вы пытаетесь достичь, и тщательно принимать решения о том, что вы в конечном итоге решите использовать.