- "Докер не виртуальная машина"
Правильно, контейнеры следует рассматривать как процессы, выполняющиеся в песочнице. Если вы будете искать, как происходит эта изоляция в Linux, вы обязательно столкнетесь с namespaces
& cgroups
. Одно определение контейнеров, которое я видел в последнее время, гласит:
"контейнеры - это процессы , созданные на основе тарболов, привязанные к пространствам имен и контролируемые cgroups "
![enter image description here](https://i.stack.imgur.com/9cvuy.jpg)
фотография Дэн Майер , #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 - это не абстракция, которая возьмет любой контейнер и заставит его работать на любой архитектуре, ОС ... Вы должны знать, чего вы пытаетесь достичь, и тщательно принимать решения о том, что вы в итоге решите использовать.