Docker — это не виртуальная машина, поэтому он запускает только приложения, встроенные в ОС, верно? Означает ли это, что Docker для Windows запускает только файлы Windows .exe? Итак, контейнеры Docker для Windows и Linux, что у них общего? Можно ли каким-либо образом повторно использовать контейнеры в разных операционных системах?
Что такое кроссплатформенная архитектура Docker
Ответы (1)
- "Docker — это не виртуальная машина"
Правильно, контейнеры следует рассматривать как процессы, работающие в песочнице. Если вы будете искать, как эта изоляция происходит в Linux, вы обязательно наткнетесь на namespaces
и cgroups
. Одно определение контейнеров, которое я недавно видел, гласит:
"Контейнеры – это процессы, созданные из tar-архивов, привязанные к пространствам имен и контролируемые cgroups"
фото Дэна Майера, #LeadDevLondon, июнь 2018 г.
Вы также можете найти кое-что интересное о контейнерах Linux здесь: Анатомия контейнера: пространства имен, cgroups и немного магии файловой системы — LinuxCon, Жером Петаццони
- Docker для Windows запускает только файлы Windows .exe?
Нет. Учтите, что разработчик с ПК с Windows может работать с контейнерами на базе Linux, которые позже будут развернуты в облаке. Docker для Windows обеспечивает такую гибкость, НО если вы запускаете контейнеры Linux, они будут работать в какой-то среде виртуализации. Первоначально панель инструментов Docker использовала 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 или без нее — это решение во время выполнения. Вы можете сначала создать контейнер с изоляцией Hyper-V, а затем во время выполнения выбрать его запуск вместо контейнера Windows Server.
- Windows и Linux, что у них общего?
В общем, я бы ответил, что контейнеры служат идее микросервисов, разделения задач, делают одну вещь и делают ее хорошо.
- Можно ли повторно использовать контейнеры в разных операционных системах?
Да и нет. Вы можете столкнуться с ограничениями. Например, если у вас есть приложение, которое запускает FROM ubuntu:latest
и вы хотите, чтобы оно работало на Raspberry Pi, вам придется создать новый контейнер из базового образа, созданного для архитектуры arm. Docker — это не абстракция, которая возьмет любой контейнер и заставит его работать на любой архитектуре, ОС... Вы должны знать, чего вы пытаетесь достичь, и тщательно принимать решения о том, что вы в конечном итоге решите использовать.