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

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

Недавно Microsoft объявила бета-версия a Ubuntu линукс пользовательский режим изначально работает в 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 docker в пользовательском пространстве bash.

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

Выполните следующие действия:

cdwget https://download.docker.com/linux/static/stable/`uname -m`/docker-19.03.1.tgztar -xzvf docker-*.tgzcd docker./docker -H tcp://0.0.0.0:2375 ps

или

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

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

mkdir ~/binmv ~/docker/docker ~/bin

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

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

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

sudo -icurl -L https://github.com/docker/compose/releases/download/1.24.1/docker-compose-`uname -s`-`uname -m` > /usr/local/bin/docker-composechmod +x /usr/local/bin/docker-compose

Или с помощью python pip

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

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

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

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

$ docker versionClient: 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:      falseServer: 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:        fec3683Look both client and server say **OS/Arch: linux/amd64**

Тома

Будьте осторожны при добавлении томов. Путь C:\dir будет виден как /mnt/c/dir на WSL и как /c/dir/ с помощью docker engine. Вы можете преодолеть это навсегда:

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 для взаимодействия с демоном Docker, работающим в Windows.

ОБНОВЛЕНИЕ

Этот сценарий и использование сокетов Unix были включены в Пенгвинэто настройка pengwin.

С уважением

По состоянию на данный момент (апрель 2016 года) ответ таков:

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

Факты

  • Windows 10 теперь может запускать различные программы Linux (среди них оболочка Bash и различные текстовые утилиты). Это не порты (т.е. перекомпилированные версии, как, например, в Cygwin), они одинаковы Двоичные файлы ELF которые работают в типичной системе Linux. В данном случае они были взяты из Ubuntu.
  • Чтобы сделать это возможным, Windows 10 была изменена, чтобы принимать системные вызовы Linux (системные вызовы) и иметь возможность загружать и запускать двоичные файлы 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 на другое ядро:

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

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

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

  • корень
  • Пространства имен для:
    • pid
    • Пользователи
    • Сеть
    • Монтирует
    • UTS
    • МПК

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

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

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

По состоянию на Обновление создателя (выпущен публично 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 dockerdocker is aliased to `"/mnt/c/Program Files/Docker/Docker/resources/bin/docker.exe"'$ docker --versionDocker version 17.03.1-ce, build c6d412e

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

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

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

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

Простая "версия docker" скажет вам:

Client version: 1.6.2Client API version: 1.18Go version (client): go1.2.1Git commit (client): 7c8fca2OS/Arch (client): linux/amd64FATA[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 versionClient: 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/amd64Server: 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, ни auf изначально не входят в ядро 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 --helpruntime: address space conflict: map(0x7ff5ddbb0000) = 0x7ff5ffd20000fatal 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 usinghypervisors built into each operating system. (No more VirtualBox!)

Это не “просто” пользовательское пространство “bash”. Это настоящее, довольно полное пользовательское пространство Linux, но без X Windows, т.Е. только текст. Высказывание “bash” довольно хорошо передает ограничение только для текста…

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

Я думаю, что это не будет ясно, пока они не выпустят это (AFAIK, оно пока недоступно даже для инсайдеров Windows), однако стоит отметить, что Microsoft и Docker работают над тем, чтобы изначально перенести Docker в Windows, который будет выпущен вместе с Windows server 2016

@RoryMcCune: Интересно. Однако, согласно [этой записи в блоге Docker](https://blog.docker.com/2015/08/tp-docker-engine-windows-server-2016 /) с августа 2015 года это будет порт, который позволяет Docker запускать образы Windows в Windows, а не образы Linux в Windows.

Для системы GNU запуск на ядре Windows, безусловно, возможен. Это было бы БОЛЬШОЙ работой для очень бокового сдвига в качестве. Я был бы удивлен, если бы это произошло или если бы люди приняли это.

Я что-то пропустил? Действительно ли это было распространено? На данный момент я знаю об этом только как о vaporware.

По теме: ошибка docker: /var/run/docker.sock: нет такого файла или каталога.

Можно ли запустить образ windows docker на экземпляре ubuntu aws? или есть какая-то альтернатива? …root@ip-172-31-22-20:~/ docker/windows# docker pull microsoft/nanoserver
Использование тега по умолчанию: последняя
версия последняя версия: Извлечение из microsoft/nanoserver
bce2fbc256ea: Извлечение слоя fs
4806a44e00a0: Извлечение
образа слоя fs операционная система “windows” не может использоваться на этой платформе
root@ip-172-31-22-20:~/ докер/windows#