Pull to refresh

Comments 31

Кто-то пробовал уже это делать? Есть какое-нибудь мнение об этом?
я пробывал нормально работало, но мне не подошло, потому что мне нужет для работы virtualbox, а они (hyper-v и virtualbox) паралелльно не работают (ну кроме 32битных виртуалок) пришлось его удалить и hyper-v заодно и использовать docker-toolbox

там же везде оптимизированные Docker образы без UI

Где там?

В репозиториях для докера есть образы с включенным VNC.

В официальном репощитории Ubuntu образ из которого используется в этом руководстве

Чем это лучше простой установки docker for windows или использования linux subsystem for windows?

linux subsystem for windows позволяет использовать себя, как хост-машину для докера? Или вы о том, чтобы использовать linux subsystem for windows, как конечный линукс?

Я пробовал несколько месяцев назад, запустить Docker под Linux subsystem — не получалось. Даже с попыткой замены Unix сокетов на TCP. Не помню что именно, но это ядро не поддерживало все фичи изоляции, которые нужны докеру.


Так что думаю что вопрос в использовании самой подсистемы как линукса.


И насколько я помню, там продублирован не весь функционал Линукса, так что некоторые утилиты не работают.

Ну да, всё так, аналогичный экспириенс.

ну они говорили, что это у них не в приоритете, так как сейчас есть docker for windows. но обещали, что в будущем будет

В Linux Sub Docker не работает. Клиент — работает, engine — нет. Здесь речь о запуске контейнеров.


Вот здесь описал разницу между docker for windows и этим. Технологически, почти то же самое, но есть ньюансы: https://habrahabr.ru/company/microsoft/blog/339746/#comment_10467902

А я так понимаю что .\dockerd.exe запускается вместо стандартного докер-демона, который запускается через "C:\Program Files\Docker\Docker\Docker for Windows.exe"


То есть запустив таким образом особый Ubuntu-Docker, я не смогу использовать другие контейнеры, например на основе alpine?


Или все не Ubuntu контейнеры будут также запускаться через старый MobyLinuxVM?

Сможете использовать любые контейнеры. Идея данной реализации Hyper-V Linux контейнеры под Windows, когда прозрачно для вас на специально собраном ядре в виртуалке запускаются линукс контейнеры, но внути самой Linuх виртуалки _незапускается Docker Engine, COW файлы пишутся на Windows хост и т.д. Т.е. выглядит это, как Linix контейнер под Windows :)


Для того, чтобы организовать такую штуку, вам нужны специальные оптимизировванные образы для этих виртуалок, внутри которых запускаются контейенры. Эта статья про такой образ от Ubuntu, на которм запускается Ubuntu :) Прошлая статья про такой образ от Docker.

Спасибо за ответы, я уже после вопроса прочитал предыдущую статью и примерно так и понял.


А что с потреблением памяти? Сейчас под виртуалку с докером можно выделить фиксированное количество ОЗУ, у меня например стоит 2 Гб.
А при новом подходе — надо будет задавать объем памяти для каждого контейнера?


И еще вопрос, который волнует — можно ли теперь подключать volumes без необходимости расшаривать весь диск по самбе?

Пока что это очень раняя бета и сейчас этого там точно нет. Но, я рассчитваю, что интеграция будет прозрачной и можно будет делать подключение на уровне директорий.

Там идея работы — прозрачная работа с контейнерами, соответсвенно, предположу, что ограничения на память должны буду задаваться ограничениями на память контейнера.

Хотелось бы чтобы статьи (эта и предудущая) начинались с качественного описания решаемой проблемы.
И еще хотелось бы чтобы Микрософт понял что Стасу Павлову надо помочь рости в понимании зачем он пишет.

П.С. В предыдущей статье было сказано «Docker для Windows и Linux в одной системе, что упростит сборку и тестирование гетерогенных приложений, состоящих из контейнеров Docker для обеих платформ.»

Можно ли рассказать в чем упрощение?

Да, моя вина. Поскольку для меня это "горячая" тема, пропустил "очевидные" вещи.


Как работает Docker for Windows с Linux контейнерами? Он поднимает виртуалку с Linux, поднимает на ней Docker Engine, пробрасывет порт на Windows хост. В этом случае, реальным хостом для запуска контейнера является для Docker Linux виртуалка и, например, все COW файлы пишутся именно туда.


Теперь делаем шаг назад. Под Windows есть 2 типа контейнеров: Windows Containers и Hyper-V Windows Containers. Windows Containers устроены аналогично Linux контейнерам, а вот Hyper-V — нет. Hyper-V контейнеры запскаются каждый, как контейнер в специальной Windows виртуалке, оптимизированной под запуск контейнеров, но при этом они прозрачны для Docker Engine и на самой виртуалке не запускется Docker Engine, COW файлы пишутся на основной хост и т.д.


Так вот. То, о чём я рассказывал в этой и предыдущей статье — Hyper-V Linux контейнеры. Т.е. прозрачно для Docker Engine в специализированной виртуалке запускается Linux контенер, в самой виртуалке не запускается Docker Engine, COW файлы пишутся на Windows хост и т.д. А так как Linux дистрибутивов больше одно, то вариантов этой специализированной виртуалки может быть больше одного. В прошлый раз это была виртуалка от Docker, в этой статье — Ubuntu.


Что это означает для администратора и разработчика? Возможность прозрачного запуска, без какого-либо переключения, одновременно, всех типов Windows контейнеров, Hyper-V Linux контейнеров на одном Windows хосте, который будет для Docker Engine хостом на котором запускаются контейнеры со всеми вытекающими плюсами, вроде прозрачной интеграции networks и т.д.

Спасибо за ответ. Хочу понять «возможность прозрачного запуска» в чем непрозрачность сейчас (с точки зрения штатных средств управления контейнерами) 2) «без какого-либо переключения, одновременно, всех типов… контейнеров» — фраза не понятна, может имеется ввиду переключение между штатными средствами управления «разными типами контейнеров»?

На сколько я понимаю штатные средства — скриптовые, то хотелось бы увидеть разницу в скриптах.

Не нужно будет никакого переключения, Docker network между Windows и Linux на одной машине, созданный и управляемый средствами Docker

С выходом Creator Fall решил попробовать сделать все по туториалу.
И столкнулся с проблемой из этого тикета. Флаг experimental тоже не помог. Не знаете, есть ли какое-то решение? Возможно надо откатиться на предыдущую версию dockerd?

Частично отвечу на свой же вопрос.


Прочитал тикет 1219 — после определенной версии нужна еще одна переменная окружения.


$env:LCOW_API_PLATFORM_IF_OMITTED="linux"

Но все равно при попытке pull выходит ошибка. Образ находится, скачивается, но после распаковки падает.


Текст ошибки

C:\Work\dockerbeta\docker.exe: failed to register layer: failed to start service utility VM (applydiff c01367536c422450a2126cfc8ff74f689748c09740e399186473ab911faa1d16): container c01367536c422450a2126cfc8ff74f689748c09740e399186473ab911faa1d16_svm encountered an error during CreateContainer: failure in a Windows system call: Access is denied. (0x5) extra info: {"SystemType":"container", "Name": "c01367536c422450a2126cfc8ff74f689748c09740e399186473ab911faa1d16_svm", "Layers":null,"HvPartition":true, "HvRuntime":{"ImagePath":"C:\\Program Files\\Linux Containers\\uvm.vhdx", "BootSource":"Vhd"},"ContainerType":"linux", "TerminateOnLastHandleClosed":true}.


Скрипт для ACL я выполнял. Если открыть в проводнике, то там есть Full Access для Virtual Machines. Но если попробовать давать права через проводник, то он не находит роль NT VIRTUAL MACHINE\Virtual Machines. И с LinuxKit вместо Xenial выходит тоже самое.

Ну, это же preview, где-то ещё не синхронизировалась кодова база. Я тоже обновился, сейчас попробую сам ещё раз и если что-то получится, отпишусь.

Взял инструкцию отсюда для LinuxKit, добавил в окружение $env:LCOW_API_PLATFORM_IF_OMITTED="linux" для запуска сервиса.


Без переменной окружения $env:LCOW_API_PLATFORM_IF_OMITTED="linux" не работало, с ней запустилось. Windows 10 Version 1709 — это как раз Update.


Запускал всё из PowerShell (Admin)

Я так понимаю вы про эту статью — Linux-контейнеры для Windows.


Только что попробовал, видимо там zip архив с LinuxKit обновили. Теперь удалось запустить… правда через раз почему то, и на второй раз начало зависать при распаковке образа, но хоть что-то. Пришлось пару раз очищать папку lcow и качать образы заново.


Один из моментов который интересовал работает — можно добавить volume с диска который не расшарен. Так что есть повод ждать релиза.

с последнего апдейта докера (17.10.0-ce 13788) такие танцы уже не нужны, там уже есть поддержка запуска Linux контейнеров на Windows 10 1709 (build 16299) или Windows Server 1709 — t.me/MicrosoftRus/266

Небольшое уточнение, 1) текущая stable версия Version 17.09.0-ce-win33 (13620), 17.10.0-ce (13788) — это edge версия 2) сейчас при включение этой возможности невозможно однвременно работать с Windows контейнерами.

спасибо за статью.
Есть вопрос — я успешно проделал всё это и запустил Linux контейнер (с одним уточнением — сейчас для запуска демона надо использовать также флаг --experimental)
Но вот при попытке запулить windows контейнер я получаю сообщение
PS C:\docker> ./docker pull microsoft/iis
Using default tag: latest
latest: Pulling from microsoft/iis
no matching manifest for linux/amd64 in the manifest list entries

не подскажете что я делаю не так?
или сейчас в принципе нельзя никак на этом экспериментальном демоне запустить и виндовый и линуксовый контейнер одновременно? я видел вот этот комментарий «сейчас при включение этой возможности невозможно однвременно работать с Windows контейнерами», но думал, что он относится к edge версии докера, а не к той, которую предлагается скачать в статье из мастер ветки…

Пока что одновременно Windows и lcow контейнеры не работают.

Sign up to leave a comment.