Вопрос: Можете ли вы запустить Docker изначально в новом пользовательском пространстве Windows 10 (Ubuntu)?


Мое понимание заключалось в том, что основным ограничением работы докеров в других ОС было контейнеры Linux Network, которые сделали это возможным. (Конечно, для Mac).

В последнее время Microsoft объявила бета-версия Ubuntu линукс режим пользователя выполняется в Windows 10. Это может запускать двоичные файлы, скомпилированные в формате ELF в Windows (в отличие от cygwin, который требует компиляции).

Мой вопрос: Можете ли вы запустить Docker изначально в новом пользовательском пространстве Windows 10 (Ubuntu)?


121
2018-04-04 10:16


Источник


Это не «просто» bash в пользовательском пространстве. Это реальное, довольно полное Linux-пространство пользователя, но без X Windows, то есть только текст. Высказывание «bash» достаточно хорошо передает текстовое ограничение. - MSalters
Я что-то пропустил? Разве это действительно распространялось? На данный момент я знаю только об этом как об утилизации. - Michael Hampton♦
Я думаю, что это будет неясно, пока они не выпустят это (AFAIK он еще не доступен для Windows-инсайдеров), однако стоит отметить, что Microsoft и Docker работают над тем, чтобы докеры были подключены к Windows изначально, выпущенные вместе с сервером Windows 2016 - Rоry McCune
@ RоryMcCune: Интересно. Однако, согласно запись в блоге Docker с августа 2015 года это будет порт, который позволяет Docker запускать Windows изображения в Windows, а не изображения Linux в Windows. - sleske
действительно, это цель родного докера Windows. Характер контейнеризации заключается в том, что вы не можете запускать системы с другими ядрами, не добавляя какой-либо виртуализации или (возможно) этой новой подсистемы, которую разрабатывает Microsoft - Rоry McCune


Ответы:


На данный момент (апрель 2016 года) ответ:

Мы еще не знаем (но, вероятно, нет).

Факты

  • Теперь Windows 10 может запускать различные программы Linux (среди их оболочку Bash и различные текстовые утилиты). Это не порты (то есть перекомпилированных версий, например, в Cygwin), они есть тоже самое ELF-файлы которые работают на типичной системе Linux. В В этом случае они были взяты у Ubuntu.
  • Чтобы сделать это возможным, Windows 10 была изменена, чтобы принимать системные вызовы Linux (syscalls) и иметь возможность загружать и запускать двоичные файлы ELF (комментарий Скотта Гензельмана). Это означает, что исполняемые файлы без модификации Linux могут быть запущены, они будут загружать свои немодифицированные разделяемые библиотеки по мере необходимости, а Windows будет запускать их как процессы Windows.
  • Всякий раз, когда такая программа Linux хочет взаимодействовать с ядром, она выдает системный вызов (или позволяет библиотеке это делать). Это (по-видимому) единственное отличие от работы в Linux: при работе в Linux ядро ​​Linux обрабатывает эти вызовы; в Windows 10 вместо этого используется ядро ​​Windows 10.

Спекуляция

Таким образом, вопрос заключается в том, были ли реализованы системные вызовы, требуемые Докером (для chroot и пространств имен, между прочим) или нет. Ответ на это, скорее всего, «нет». Docker требует довольно сложных (и специфичных для Linux) функциональных возможностей для управления процессами и ресурсами и изоляции процессов. Хотя, возможно, возможно повторить все это в Windows, это будет очень много работы, и поскольку цель этой функции Windows, похоже, заключается в использовании пользовательских программ Linux, кажется маловероятным, что они выполнили всю работу (и сохранили ее в тайне) ,

Насколько я могу судить, нет никакой окончательной информации. 

Существующие порты Докера

Конечно, если Microsoft решит, что им нужна поддержка Docker в Windows 10, они, вероятно, смогут ее предложить. Существует прецедент для переноса Docker на другое ядро:

  • Eсть Порт докеров для FreeBSD, Он помечен как «экспериментальный», но, похоже, работает в принципе. Он может использовать немодифицированные контейнеры Docker из репозитория Docker, а это означает, что на самом деле он предоставляет хост-среду, подобную Linux, для изображений.
  • В настоящее время идет проект по переносу Docker на Windows (в частности, Windows Server 2016) - см. Это Запись в блог Докера с августа 2015 года. Однако, в отличие от порта FreBSD выше, это будет порт, который позволяет Docker запускать образы Windows в Windows, а не изображения Linux в Windows. Спасибо Рори Маккуне за это.

50
2018-04-05 07:15



Обновление: в блоге MSDN есть статья по этой теме: Обзор подсистемы Windows для Linux, - sleske
На сегодняшний день это возможно с Hyper-V: tutorials.ubuntu.com/tutorial/... - Nick Sweeting
Я проиграл просто потому, что более высокий голосовой ответ более полезен, чем размышления о том, что может быть, оно охватывает то, что есть. - James


Вы можете использовать Docker для Windows в качестве движка и Docker для linux в качестве клиента в Bash на Ubuntu в Windows. Подключите их через TCP.

Установите Docker для Windows: https://docs.docker.com/docker-for-windows/ Если вы хотите использовать Контейнеры Windows, вместо контейнеров Linux контейнеры типа типа могут управляться клиентом linux docker в пользовательском пространстве bash.

Начиная с версии 17.03.1-ce-win12 (12058), вы должны проверить Expose daemon на tcp: // localhost: 2375 без TLS чтобы клиент-докер-клиент linux продолжал связываться с демоном docker Windows с помощью TCP

Следуй этим шагам:

cd
wget https://download.docker.com/linux/static/stable/x86_64/docker-18.06.0-ce.tgz
tar -xzvf docker-*.tgz
cd docker
./docker -H tcp://0.0.0.0:2375 ps

или

env DOCKER_HOST=tcp://0.0.0.0:2375 ./docker ps

Чтобы сделать его постоянным:

mkdir ~/bin
mv ~/docker/docker ~/bin

Добавьте соответствующие переменные в .bashrc

export DOCKER_HOST=tcp://0.0.0.0:2375
export PATH=$PATH:~/bin

Конечно, вы можете установить docker-compose

sudo -i
curl -L https://github.com/docker/compose/releases/download/1.22.0/docker-compose-`uname -s`-`uname -m` > /usr/local/bin/docker-compose
chmod +x /usr/local/bin/docker-compose

Или используя питон python

sudo apt-get install python-pip bash-completion
sudo pip install docker-compose

И завершение Баша. Лучшая часть:

sudo -i
apt-get install bash-completion
curl -L https://raw.githubusercontent.com/docker/docker-ce/master/components/cli/contrib/completion/bash/docker > /etc/bash_completion.d/docker
curl -L https://raw.githubusercontent.com/docker/compose/$(docker-compose version --short)/contrib/completion/bash/docker-compose > /etc/bash_completion.d/docker-compose

Я протестировал его, используя версию Docker для Windows 18.06.0-ce-win59 (19098), используя Hyper-V:

~$ docker version
Client:
 Version:           18.06.0-ce
 API version:       1.38
 Go version:        go1.10.3
 Git commit:        0ffa825
 Built:             Wed Jul 18 19:04:39 2018
 OS/Arch:           linux/amd64
 Experimental:      false

Server:
 Engine:
  Version:          18.06.0-ce
  API version:      1.38 (minimum version 1.12)
  Go version:       go1.10.3
  Git commit:       0ffa825
  Built:            Wed Jul 18 19:13:46 2018
  OS/Arch:          linux/amd64
  Experimental:     true

Посмотрите как клиент, так и сервер OS / Arch: linux / amd64

тома

Будьте осторожны при добавлении томов. Путь C:\dir будут видны как /mnt/c/dir на WSL и как /c/dir/ двигателем докеров. Вы можете постоянно ее преодолевать (см. BashOnWindows вопрос)

sudo mkdir /c
sudo mount --bind /mnt/c /c

ОБНОВИТЬ

из: Что нового в командной строке в Windows 10 версии 1803

Unix Sockets   Unix Sockets не поддерживались в Windows, и теперь они есть! Вы также можете общаться через Unix-сокеты между Windows и WSL. Одна из замечательных моментов в этом - это то, что WSL запускает Linux Docker Client для взаимодействия с Docker Daemon, работающим в Windows.

С уважением


98
2017-07-19 22:05



Привет @ joel-pearson, докер имеет две части: движок и клиент. Двигатель запускается в окнах с помощью Docker Toolbox (на основе VirtualBox) или Docker for Windows (Hyper-V), официально поддерживаемых командой докеров. Двигатель Docker еще не запускается в пространстве пользователя bash. Клиент Docker в Windows можно запускать в cmd, powershell или cygwin. Этот ответ говорит о том, как запустить клиент-докер в пользовательском пространстве bash. Зачем? Лично я предпочитаю bash, завершение работ. Я согласен, что вопрос касается механизма докеров, но я нашел его, когда искал клиента, и многие люди делают то же самое. - Carlos Rafael Ramirez
Я просто протестировал его, и он работает для меня на 1.12 :) Супер взволнован, чтобы теперь иметь возможность сделать серьезную разработку на окнах. - Zach Russell
Пробовал ваши инструкции в Bash на Ubuntu в Windows, получил «Не удается подключиться к демону Docker. Является ли демон docker на этом хосте?». Вам не хватает некоторых шагов? - mpen
По состоянию на февраль 2017 года это еще единственный способ. - hdave
После июня 2017 года вы можете запустить докер для окон исполняемые файлы из оболочки bash, Вместо установки клиента докеров вы можете использовать docker.exe непосредственно для запроса / взаимодействия подсистемы докеров. Однако обратите внимание, что докер для окон будет использовать переменные и конфигурации Windows. - Jaime


Первый предварительный просмотр инсайдера был опубликован вчера. Я попытался установить докер, но он не работает со следующим: docker fail

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


13
2018-04-07 10:29



Круто - спасибо за попытку! - Hawkeye
Хорошая идея, чтобы на самом деле попробовать это. Одно: Не могли бы вы добавить текст скриншота как фактический текст (терминал Ubuntu поддерживает копирование и вставку). «Реальный» текст имеет множество преимуществ (проще читать, поддерживает программы чтения с экрана, сканируется поисковыми системами) - sleske
Некоторое обновление: мне удалось полностью установить докеры на моем компьютере, на котором было завершено обновление последней юбилеи. Но делать docker ps не удается: Get http:///var/run/docker.sock/v1.18/containers/json: dial unix /var/run/docker.sock: setsockopt: invalid argument. Are you trying to connect to a TLS-enabled daemon without TLS? - kumar_harsh
Похоже, он работает сейчас: tutorials.ubuntu.com/tutorial/... - Nick Sweeting


Нет, это невозможно.

Докер требует нескольких вещей для запуска контейнеров:

  • корневой
  • Пространства имен:
    • PID
    • пользователей
    • сеть
    • кронштейны
    • ОТС
    • IPC

Это все функции ядра, которые реализованы в Linux. К сожалению, большинство из них не имеют аналогичной функции в Windows для использования в качестве замены (и в подсистеме Linux, которую Microsoft реализовала в ядре Windows). Все это должно быть обеспечено ОС.


11
2018-04-04 10:21



На самом деле Windows имеет пространства имен для пользователей, Mounts и IPC. Пространства имен пользователей необходимы для Active Directory, пространства имен имен и пространства имен IPC необходимы для многопользовательской работы. По сути, ядро ​​Object Manager в Windows всегда имело пространства имен, начиная с самой первой версии Windows NT, так что это не так странно. - MSalters
И с помощью служб удаленных рабочих столов объекты сеанса активно используют эти пространства имен для обеспечения параллельной работы. Это не значит, что у вас есть вся необходимая инфраструктура, но там есть основные части. Что касается chroot, понимаем, что среда Ubuntu уже имеет другой корень, чем WIN32. - MSalters
На самом деле, я думаю, что еще слишком рано это ответить. Как описано в комментарий Скотта Гензельмана, ядро ​​Windows 10 теперь принимает системные вызовы Linux. Таким образом, вопрос заключается в том, были ли реализованы системные вызовы, требуемые Докером (для chroot и namespaces), или нет. Хотя ответ, скорее всего, «нет», по крайней мере, нет окончательной информации, насколько я могу судить. - sleske
@sleske прав, этот вопрос сейчас не отвечает и говорит «нет, он не может» без каких-либо реальных указаний на то, что разработчики, работающие на пространстве linux в вдовах, до сих пор довольно самонадеянны. - Ryan
Я не знаю достаточно, чтобы заявить с уверенностью, что этот ответ совершенно не прав, но способ его формулировки заставляет меня немного скептически относиться к его действительности. В частности, заявив, что «Bash - простая программа для пользовательского пространства и не может предоставить ни одного из них», и ссылаясь на подсистему Windows для Linux, как «новая функция Bash», похоже, что этот ответ основан на абсолютно ложном предположении, что все Microsoft был port bash для Windows. Это не то, что произошло. Они разработали полный интерфейс ядра Linux, работающий поверх ядра Windows: msdn.microsoft.com/en-us/commandline/wsl/about - Ajedi32


Начиная с Обновление для авторов (выпущенный публично 13 июня 2017 года) вы можете запускать собственный исполняемый файл Windows непосредственно в WSL. Это означает, что если вы уже установили Докер для Windows вы можете просто вызвать docker двоичные файлы, установленные в C:\Program Files, Поскольку они заканчиваются .exe Самый простой вариант - создать псевдонимы. Что-то вроде следующего в вашем .bashrc должно сработать:

DOCKER_BIN='/mnt/c/Program Files/Docker/Docker/resources/bin'
for f in "$DOCKER_BIN"/*; do
  alias "$(basename "$f" | sed 's/.exe$//')"'="'"$f"'"'
done

Это создает псевдонимы для всех файлов в DOCKER_BIN каталог:

$ type docker
docker is aliased to `"/mnt/c/Program Files/Docker/Docker/resources/bin/docker.exe"'

$ docker --version
Docker version 17.03.1-ce, build c6d412e

Одно предостережение: вы получите сообщение об ошибке типа "Невозможно перевести текущий рабочий каталог«если запустить из каталога Linux. cd в каталог Windows (например, /mnt/c/Users/YourUsername), и вы должны быть хорошими.


6
2018-06-22 06:02



Похоже, что это не означает, что переменные среды bash в файлах YML хранятся в докере. Любая идея для этого? - Rüdiger Schulz
Это имеет смысл, поскольку вы вызываете Windows docker бинарный, и только это делается через оболочку Linux. Я не уверен, есть ли способ сделать это. - dimo414


Как только Docker 1.12 будет выпущен, а клиент Docker Linux будет разделен, вы сможете запустить докер клиент в Windows 10 bash.

Это может звучать не так, как если бы у вас был клиент Docker Windows, но это полезно, если у вас есть Linux toolchains, которые включают докер для его клиентской функции.


5
2018-04-29 09:31





В Windows 10 Version 1607 Build 1493.10 вы можете успешно установить его на Ubuntu Bash, но это не работает :(

Простая «версия докеров» скажет вам:

Client version: 1.6.2
Client API version: 1.18
Go version (client): go1.2.1
Git commit (client): 7c8fca2
OS/Arch (client): linux/amd64
FATA[0000] Get http:///var/run/docker.sock/v1.18/version: dial unix /var/run/docker.sock: setsockopt: invalid argument. Are you trying to connect to a TLS-enabled daemon without TLS?

Если вы запустите «sudo docker -d», вы получите следующую ошибку:

FATA[0000] ERROR: You are running Linux kernel version 3.4.0+, which is unsupported for running Docker. Please upgrade your kernel to 3.8+.

Так что это определенно стоппер со стороны bash.

Тем не менее, вы можете установить Докер для Windows и это работает как шарм, вы, очевидно, можете развернуть Linux-серверы и все, что вам нужно.

> docker version
Client:
 Version:      1.12.0
 API version:  1.24
 Go version:   go1.6.3
 Git commit:   8eab29e
 Built:        Thu Jul 28 21:15:28 2016
 OS/Arch:      windows/amd64

Server:
 Version:      1.12.0
 API version:  1.24
 Go version:   go1.6.3
 Git commit:   8eab29e
 Built:        Thu Jul 28 21:15:28 2016
 OS/Arch:      linux/amd64

3
2017-08-12 21:38





По состоянию на сентябрь 2016 года

Все текущие реализации Docker в Windows используют виртуализацию, Docker 1.12 использует гипервизор в Windows, что устраняет преимущества контейнеризации над виртуализацией.

Докеру требуется больше, чем просто использование системных вызовов Linux.

Для него нужны группы управления процессами (группы), стекируемая файловая система (aufs) и другие Linux-системы вне ядра.

Ни одна из групп или aufs не является родной для ядра Windows 10.

Существует реализация Windows Server 2016 здесь: https://msdn.microsoft.com/en-gb/virtualization/windowscontainers/quick_start/quick_start_windows_server .. но это будет работать только с некоторыми службами Windows, например. IIS, а не Ubuntu


2
2017-09-05 13:15