Что такое кроссплатформенная архитектура Docker

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


person Yuri Geinish    schedule 04.09.2018    source источник
comment
Образы в докере только для gnu/linux, нет контейнеров для окон или osx, поэтому демон докера запускает linux vm в ackground в ОС windows и osx.   -  person Ramo    schedule 04.09.2018
comment
содержимое URL-адреса не противоречит тому, что я сказал, докер сам работает на Linux vm в случае Windows или OS X OS. Обычно контейнеры — это процессы, а в Windows и MacOS — это процессы, работающие внутри виртуальной машины. И насколько я знаю, вы не можете запустить контейнер Windows или OSX (имеющий другой, чем Linux) с докером.   -  person Ramo    schedule 04.09.2018
comment
ахах, Docker не запускает файлы .exe, он запускает только бинарные файлы Linux, напрямую внутри Linux (собственный) или через виртуальную машину.   -  person Ramo    schedule 04.09.2018
comment
Документы @shi Docker четко определяют, что такое контейнер (среда выполнения, созданная из образа), и относятся к контейнерам Linux и Windows отдельно, но вы говорите, что контейнеров Docker для Windows не существует, что явно противоречит. Я чувствую, что существует большая путаница в используемых терминах, и надеюсь, что кто-то сможет это прояснить.   -  person Yuri Geinish    schedule 04.09.2018
comment
извините, похоже, что есть контейнер Windows docker.com/products/windows-containers здесь docs.docker.com/docker-for-windows/ install/ они говорят о переключении между окнами и контейнерами linux, поэтому я думаю, что окна и контейнеры linux не имеют ничего общего (ошибка докера после извлечения образа операционной системы linux, окна нельзя использовать на этой платформе) в конце, если вы имеете в виду под ОС хост докера, тогда докер гарантирует изоляцию между ОС и контейнером (поэтому приложение), поэтому контейнер будет работать одинаково независимо от того, где.   -  person Ramo    schedule 04.09.2018


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

person tgogos    schedule 04.09.2018
comment
Просто для ясности, прямо из документации Docker: Docker предоставляет возможность упаковывать и запускать приложение в слабо изолированной среде, называемой контейнером. -- docs.docker.com/engine/docker-overview Итак, согласно Docker, контейнеры — это не процессы, а процессы — это не контейнеры. Спасибо за информацию. - person Yuri Geinish; 04.09.2018
comment
контейнер — это процессный докер, назовите его контейнером, но технически это процесс. а ссылка которую вы дали ничего об этом не говорит - person Ramo; 04.09.2018
comment
Я нашел свой источник... Это был @alicegoldfuss на #LeadDevLondon, июнь 2018 г., контейнеры это процессы, рожденные из архивов, привязанные к пространствам имен и контролируемые cgroups - person tgogos; 05.09.2018