Насколько я понимаю, основным ограничением запуска докеров на других ОС были контейнеры сети Linux, которые сделали это возможным. (Конечно, для 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), вы должны установить флажок Expose daemon на 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
и завершение 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
Я тестировал его с помощью версии 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**
Volumes
Будьте осторожны при добавлении томов. Путь 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 Sockets Сокеты Unix не поддерживались в Windows, и теперь они есть! Вы также можете общаться через сокеты Unix между Windows и WSL. Одна из замечательных особенностей этого состоит в том, что он позволяет WSL запускать Linux Docker Client для взаимодействия с Docker Daemon, работающим в Windows.
ОБНОВЛЕНИЕ
Этот сценарий и использование сокетов Unix было включено в настройку pengwin Pengwin .
С уважением
Вчера была выпущена первая предварительная версия для инсайдеров. Я попытался установить докер, но это не удалось:
Похоже, что для первого предварительного просмотра он в настоящее время не работает. Однако, как предполагали многие, он может работать в будущем выпуске.
Нет, это невозможно.
Docker нуждается в нескольких вещах для запуска контейнеров:
Все эти функции ядра реализованы в Linux. К сожалению, у большинства из них нет аналогичной функции в Windows для использования в качестве замены (ни в подсистеме Linux, которую Microsoft реализовала в ядре Windows). Все это должно быть обеспечено ОС.
Docker в настоящее время не работает в текущей сборке (14316) - если вы можете установить его.
root@localhost:~# docker --help
runtime: address space conflict: map(0x7ff5ddbb0000) = 0x7ff5ffd20000
fatal error: runtime: address space conflict
На данный момент (апрель 2016 г.) ответ следующий:
Мы еще не знаем (но, вероятно, нет).
Итак, вопрос в том, были ли реализованы системные вызовы, необходимые Docker (среди прочего, для chroot и пространств имен), или нет. Ответ - скорее всего, «нет». Docker требует довольно сложных (и специфичных для Linux) функций для управления процессами и ресурсами, а также изоляции процессов. Хотя, вероятно, можно воспроизвести все это в Windows, это потребует много работы, и поскольку целью этой функции Windows, похоже, является запуск программ пользовательского пространства Linux, маловероятно, что они сделали всю работу (и держали ее в секрете) .
Однако, насколько я могу судить, окончательной информации в любом случае нет.
Конечно, если Microsoft решит, что им нужна поддержка Docker в Windows 10, они, вероятно, смогут предложить Это. Есть прецедент переноса Docker на другое ядро:
После выпуска Docker 1.12 и отделения клиента Linux Docker вы сможете запустить клиент docker ] в Windows 10 bash.
Это может показаться не таким уж большим, учитывая, что у вас есть клиент Docker для Windows, но это полезно, если у вас есть наборы инструментов Linux, которые включают докер для его функций на стороне клиента.
I ka Windows 10 Mana 1607 Kūkulu i ka 1493.10 hiki iā ʻoe ke hoʻokau pono iā ia ma Ubuntu Bash, akā ʻaʻole holo pono : (
E haʻi kahi "docker mana" maʻalahi iā ʻoe:
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?
Inā holo ʻoe i "sudo docker -d" loaʻa iā ʻoe kēia hewa:
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+.
No laila he paʻa paʻa kēia mai ka ʻaoʻao bash.
Eia nō naʻe, hiki iā ʻoe ke hoʻouka Docker no Windows a hana ia e like me ka mea hoʻonanea, hiki iā ʻoe ke hoʻokaʻawale i nā Linux Servers a me nā mea āpau āu e makemake ai.
> 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
От: 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!)
Am September 2016, Nr
All aktuell Implementéierunge vun Docker op Windows benotze Virtualiséierung, Docker 1.12 benotzt en Hypervisor am Windows - doduerch datt de Virdeel vun der Containeriséierung iwwer d'Virtualiséierung ewechgeholl gëtt.
Docker brauch méi wéi just Linux Systemanruffe benotzt.
Et brauch Prozesskontrollgruppen (cgroups), e stackbar Dateiesystem (aufs), plus aner Linux-baséiert Systemer ausserhalb vum Kernel.
Weder Cgroups nach aufs sinn natierlech an der Windows 10 Kernel.
Et gëtt eng Implementatioun vu Windows Server 2016 hei: https://msdn.microsoft.com/en-gb/virtualization/windowscontainers/quick_start/quick_start_windows_server .. awer dëst wäert nëmmen lafen e puer Windows Servicer, z IIS, an net Ubuntu
Начиная с Creator Update (публично выпущенного 13 июня 2017 г.) вы можете запускать собственный исполняемый файл Windows непосредственно в WSL. Это означает, что если вы уже установили Docker для Windows , вы можете просто вызвать двоичные файлы докера
, установленные в 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
), и все будет хорошо.