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

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

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

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

120 голосов | спросил Hawkeye 4 PMpMon, 04 Apr 2016 13:16:14 +030016Monday 2016, 13:16:14

10 ответов


50

Как сейчас (апрель 2016 года) ответ:

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

Факты

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

Спекуляция

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

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

Существующие порты Docker

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

  • Порт докеров для FreeBSD . Он помечен как «экспериментальный», но, похоже, работает в принципе. Он может использовать немодифицированные контейнеры Docker из репозитория Docker, что означает, что на самом деле он предоставляет хост-среду, подобную Linux, для изображений.
  • Выполняется проект по переносу Docker на Windows (в частности, Windows Server 2016) - см. этот Запись блога Docker с августа 2015 года. Однако, в отличие от порта FreBSD выше, это будет порт, который позволяет Docker запускать образы Windows в Windows, а не изображения Linux в Windows. Спасибо Rоry McCune за это.
ответил sleske 5 AMpTue, 05 Apr 2016 10:15:06 +030015Tuesday 2016, 10:15:06
98

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

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

Начиная с версии 17.03.1-ce-win12 (12058) вы должны проверить демон Expose на 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 /местные /бен /докер-Compose
chmod + x /usr /local /bin /docker-compose
 

Или используя python pip

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

И завершение Bash. Наилучшая часть:

  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
Клиент:
 Версия: 18.06.0-ce
 Версия API: 1.38
 Версия Go: go1.10.3
 Git commit: 0ffa825
 Построено: ср. 18 июл 19:04:39 2018
 OS /Arch: linux /amd64
 Экспериментальный: false

Сервер:
 Двигатель:
  Версия: 18.06.0-ce
  Версия API: 1.38 (минимальная версия 1.12)
  Версия Go: go1.10.3
  Git commit: 0ffa825
  Построено: ср. 18 июл 19:13:46 2018
  OS /Arch: linux /amd64
  Экспериментальный: истинный
 

Посмотрите, как клиент, так и сервер говорят ОС /Arch: linux /amd64

Volumes

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

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

<сильный> UPDATE

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

  

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

Привет

ответил Carlos Rafael Ramirez 20 J000000Wednesday16 2016, 01:05:51
13

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

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

ответил CodedBeard 7 PMpThu, 07 Apr 2016 13:29:45 +030029Thursday 2016, 13:29:45
11

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

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

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

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

ответил Florin Asăvoaie 4 PMpMon, 04 Apr 2016 13:21:35 +030021Monday 2016, 13:21:35
6

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

  DOCKER_BIN = '/mnt /c /Program Files /Docker /Docker /resources /bin'
для f в "$ DOCKER_BIN" /*; делать
  псевдоним "$ (basename" $ ​​f "| sed 's /.exe $ //')" '= "'" $ f "'"'
сделанный
 

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

  $ type docker
docker имеет псевдоним `` /mnt /c /Program Files /Docker /Docker /resources /bin /docker.exe "'

$ docker --версия
Докер версия 17.03.1-ce, сборка c6d412e
 

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

ответил dimo414 22 J0000006Europe/Moscow 2017, 09:02:13
5

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

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

ответил mixja 29 PMpFri, 29 Apr 2016 12:31:12 +030031Friday 2016, 12:31:12
3

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

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

  Клиентская версия: 1.6.2
Версия клиентского API: 1.18
Go version (клиент): go1.2.1
Git commit (клиент): 7c8fca2
OS /Arch (клиент): linux /amd64
FATA [0000] Получить http: ///var/run/docker.sock/v1.18/version: набрать unix /var/run/docker.sock: setsockopt: недопустимый аргумент. Вы пытаетесь подключиться к демону с поддержкой TLS без TLS?
 

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

  FATA [0000] ОШИБКА. Вы используете ядро ​​Linux версии 3.4.0+, которое не поддерживается для запуска Docker. Обновите ядро ​​до 3.8+.
 

Итак, это определенно стоппер со стороны bash.

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

  & GT; версия докера
Клиент:
 Версия: 1.12.0
 Версия API: 1.24
 Версия Go: go1.6.3
 Git commit: 8eab29e
 Построено: Чт июл 28 21:15:28 2016
 OS /Arch: windows /amd64

Сервер:
 Версия: 1.12.0
 Версия API: 1.24
 Версия Go: go1.6.3
 Git commit: 8eab29e
 Построено: Чт июл 28 21:15:28 2016
 OS /Arch: linux /amd64
 
ответил Bruno Medina 13 AM000000120000002331 2016, 00:38:23
2

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

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

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

Ему нужны группы управления процессами (cgroups), стековая файловая система (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

ответил Graham 5 thEurope/Moscowp30Europe/Moscow09bEurope/MoscowMon, 05 Sep 2016 16:15:52 +0300 2016, 16:15:52
1

Docker в настоящее время не работает в текущей сборке (14316) - при условии, что вы можете установить его.

  root @ localhost: ~ # docker --help
runtime: конфликт адресного пространства: карта (0x7ff5ddbb0000) = 0x7ff5ffd20000
фатальная ошибка: время выполнения: конфликт адресного пространства
 
ответил lgj 12 PMpTue, 12 Apr 2016 23:47:38 +030047Tuesday 2016, 23:47:38
0

От: https: //blog.docker.com/2016/07/docker-for-mac-and-windows-production-ready/

  Быстрее и надежнее - среда разработки, использующая
гипервизоры, встроенные в каждую операционную систему. (Больше нет VirtualBox!)
 
ответил gavenkoa 3 PM00000030000005131 2016, 15:20:51

Похожие вопросы

Популярные теги

security × 330linux × 316macos × 2827 × 268performance × 244command-line × 241sql-server × 235joomla-3.x × 222java × 189c++ × 186windows × 180cisco × 168bash × 158c# × 142gmail × 139arduino-uno × 139javascript × 134ssh × 133seo × 132mysql × 132