Насколько я понимаю, основным ограничением запуска 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 г.) ответ таков:
Мы еще не знаем (но, вероятно, нет).
Итак, вопрос в том, были ли реализованы системные вызовы, которые нужны Docker (среди прочего, для chroot и пространств имен), или нет. Ответ - скорее всего, «нет». Docker требует довольно сложных (и специфичных для Linux) функций для управления процессами и ресурсами, а также изоляции процессов. Хотя, вероятно, можно воспроизвести все это в Windows, это потребует много работы, и поскольку целью этой функции Windows, похоже, является запуск программ пользовательского пространства Linux, маловероятно, что они сделали всю работу (и держали ее в секрете) .
Однако, насколько я могу судить, окончательной информации в любом случае нет.
Конечно, если Microsoft решит, что им нужна поддержка Docker в Windows 10, они, вероятно, смогут ее предложить. Был прецедент переноса Docker на другое ядро:
Нет, это невозможно.
Docker нужно несколько вещей для запуска контейнеров:
Все это функции ядра, реализованные в 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!)