Что такое кроссплатформенная архитектура Docker? - PullRequest
0 голосов
/ 04 сентября 2018

Docker не является виртуальной машиной, поэтому он запускает только приложения, встроенные в операционную систему, верно? Означает ли это, что Docker для Windows запускает только файлы .exe Windows? Итак, контейнеры Docker для Windows и Linux, что у них общего, если что? Можно ли повторно использовать контейнеры в разных операционных системах?

1 Ответ

0 голосов
/ 04 сентября 2018
  • "Докер не виртуальная машина"

Правильно, контейнеры следует рассматривать как процессы, выполняющиеся в песочнице. Если вы будете искать, как происходит эта изоляция в Linux, вы обязательно столкнетесь с namespaces & cgroups. Одно определение контейнеров, которое я видел в последнее время, гласит:

"контейнеры - это процессы , созданные на основе тарболов, привязанные к пространствам имен и контролируемые cgroups "

enter image description here

фотография Дэн Майер , #LeadDevLondon - июнь 2018

Вы также можете найти некоторые интересные вещи, касающиеся контейнеров Linux, здесь: Анатомия контейнера: пространства имен, группы и некоторая магия файловой системы - LinuxCon от 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 или без нее - это решение во время выполнения. Вы можете сначала создать контейнер с изоляцией Hyper-V, а затем во время выполнения выбрать запустить его вместо контейнера Windows Server.


  • Windows и Linux, что у них общего, если что?

В общем, я бы ответил, что контейнеры служат идее Микросервисы , разделение задач, делай одно и делай это хорошо.


  • Можно ли повторно использовать контейнеры в разных операционных системах?

Да и нет. Вы можете столкнуться с ограничениями. Например, если у вас есть приложение, которое запускается FROM ubuntu:latest и вы хотите, чтобы оно работало на Raspberry Pi, вам придется создать новый контейнер из базового образа, созданного для архитектуры arm. Docker - это не абстракция, которая возьмет любой контейнер и заставит его работать на любой архитектуре, ОС ... Вы должны знать, чего вы пытаетесь достичь, и тщательно принимать решения о том, что вы в итоге решите использовать.

...