Назад | Перейти на главную страницу

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

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

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

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

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

Установите Docker Desktop для Windows: https://hub.docker.com/editions/community/docker-ce-desktop-windows Если вы хотите использовать контейнеры Windows вместо контейнеров Linux, контейнеры обоих типов могут управляться клиентом докеров Linux в пользовательском пространстве bash.

Начиная с версии 17.03.1-ce-win12 (12058) вы должны проверить Выставить демон на tcp: // localhost: 2375 без TLS чтобы позволить клиенту Linux Docker продолжить связь с демоном Windows Docker по TCP

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

cd
wget https://download.docker.com/linux/static/stable/`uname -m`/docker-19.03.1.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.24.1/docker-compose-`uname -s`-`uname -m` > /usr/local/bin/docker-compose
chmod +x /usr/local/bin/docker-compose

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

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

Я тестировал его с помощью версии 2.1.0.1 (37199) Docker Desktop с использованием Hyper-V:

$ docker version
Client: Docker Engine - Community
 Version:           19.03.1
 API version:       1.40
 Go version:        go1.12.5
 Git commit:        74b1e89e8a
 Built:             Thu Jul 25 21:17:37 2019
 OS/Arch:           linux/amd64
 Experimental:      false

Server: Docker Engine - Community
 Engine:
  Version:          19.03.1
  API version:      1.40 (minimum version 1.12)
  Go version:       go1.12.5
  Git commit:       74b1e89
  Built:            Thu Jul 25 21:17:52 2019
  OS/Arch:          linux/amd64
  Experimental:     false
 containerd:
  Version:          v1.2.6
  GitCommit:        894b81a4b802e4eb2a91d1ce216b8817763c29fb
 runc:
  Version:          1.0.0-rc8
  GitCommit:        425e105d5a03fabd737a126ad93d62a9eeede87f
 docker-init:
  Version:          0.18.0
  GitCommit:        fec3683
Look both client and server say **OS/Arch: linux/amd64**

Объемы

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

sudo bash -c "echo -e '[automount] \nroot = /'>/etc/wsl.conf"

Вы должны выйти и перезагрузить WSL после внесения изменений в wsl.conf, чтобы WSL считывал ваши изменения при запуске.

ОБНОВИТЬ

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

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

ОБНОВИТЬ

Этот сценарий и использование сокетов Unix были включены в PengwinPengwin-setup.

С уважением

На данный момент (апрель 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.

Спекуляция

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

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

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

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

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

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

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

  • chroot
  • Пространства имен для:
    • PID
    • Пользователи
    • Сеть
    • Крепления
    • UTS
    • МПК

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

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

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

По состоянию на Creator Update (выпущен публично 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) и у вас должно быть хорошо.

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

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

В Windows 10 версии 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

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

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

Docker нужно больше, чем просто использовать системные вызовы Linux.

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

Ни cgroups, ни aufs не входят в состав ядра Windows 10.

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

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

root@localhost:~# docker --help
runtime: address space conflict: map(0x7ff5ddbb0000) = 0x7ff5ffd20000
fatal error: runtime: address space conflict

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

Faster and more reliable – native development environment using
hypervisors built into each operating system. (No more VirtualBox!)