Что такое кроссплатформенная архитектура 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 - это не абстракция, которая возьмет любой контейнер и заставит его работать на любой архитектуре, ОС... Вы должны знать, чего вы пытаетесь достичь, и тщательно принимать решения о том, что вы в конечном итоге решите использовать.

Другие вопросы по тегам