我的理解是,在其他操作系统上运行docker的主要限制是使Linux成为可能的Linuxnetworking容器。 (当然对于Mac)。
最近, 微软宣布推出一个在Windows 10上本地运行的Ubuntu Linux 用户模式的testing版。它可以在Windows上运行以ELF格式编译的二进制文件(与需要编译的cygwin不同)。
我的问题是: 你可以在新的Windows 10(Ubuntu)bash用户空间上本地运行Docker吗?
截至目前(2016年4月)的答案是:
我们还不知道 (但可能不是)。
所以问题是Docker需要的系统调用(对于chroot和命名空间等)是否被实现。 答案是这可能是“不”。 Docker需要用于进程和资源pipe理以及进程隔离的相当复杂的(和Linux特有的)function。 尽pipe可能在Windows上复制所有这些内容,但这将是一个很大的工作,而且由于这个Windowsfunction的目标似乎在运行Linux用户空间程序,似乎他们不太可能完成所有的工作(并且保密) 。
但是,就我所知,没有任何明确的信息。
当然,如果微软决定要在Windows 10中支持Docker,他们可能会提供它。 将Docker移植到不同的内核有一些先例:
您可以使用Docker for Windows作为Linux上的引擎和Docker,作为Windows上Ubuntu上Bash中的客户端。 通过TCP连接它们。
安装用于Windows的Docker: https : //docs.docker.com/docker-for-windows/如果你想使用Windows Containers,而不是Linux Containers,那么types容器可以由bash用户空间中的linux docker客户端来pipe理。
从版本17.03.1-ce-win12(12058)开始,您必须检查tcp:// localhost:2375上没有TLS的Expose守护进程 ,以便linux docker客户端通过TCP继续与windows docker守护进程通信
按着这些次序:
cd wget https://download.docker.com/linux/static/stable/x86_64/docker-17.09.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
将相应的variables添加到.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.16.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
我已经使用Hyper-V的17.06.0-ce-win19(12801)版Docker for Windows进行了testing:
~$ docker version Client: Version: 17.09.0-ce API version: 1.32 Go version: go1.8.3 Git commit: afdb6d4 Built: Tue Sep 26 22:39:28 2017 OS/Arch: linux/amd64 Server: Version: 17.09.0-ce API version: 1.32 (minimum version 1.12) Go version: go1.8.3 Git commit: afdb6d4 Built: Tue Sep 26 22:45:38 2017 OS/Arch: linux/amd64 Experimental: true
看看客户端和服务器说OS / Arch:linux / amd64
卷
添加卷时要小心。 pathC:\dir
将在WSL上显示为/mnt/c/dir
,并由docker引擎显示为/c/dir/
。 你可以永久解决它(见BashOnWindows 问题 )
sudo mkdir /c sudo mount --bind /mnt/c /c
问候
第一个内幕预告昨天发布。 我试图安装docker,但它失败,如下所示:
所以它会出现,第一次预览它目前不工作。 但是,正如很多人所猜测的那样,它可能会在未来的版本中发挥作用。
不,这是不可能的。
Docker需要多个东西才能运行容器:
这些都是在Linux中实现的所有内核function。 不幸的是,他们中的大多数在Windows中没有类似的function来代替(在Windows内核中微软实现的Linux子系统中)。 所有这些都需要由操作系统提供。
一旦Docker 1.12发布并且Linux Docker客户端被分开,您应该能够在Windows 10 bash中运行Docker客户端。
考虑到你有一个Docker Windows客户端,这听起来可能听起来不太像,但是如果你有Linux工具链,包括Docker的客户端function的话,这将会非常有用。
截至创build者更新 (2017年6月13日公开发布),您可以直接在WSL中运行本机Windows可执行文件。 这意味着如果你已经安装了Docker for Windows,你可以简单地调用C:\Program Files
下安装的docker
二进制C:\Program Files
。 由于它们以.exe
结尾,最简单的select是创build别名。 在.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
目录中的所有文件创build别名:
$ 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
),你应该是好的。
在Windows 10的版本1607年build立1493.10您可以成功安装在Ubuntu Bash,但它不工作:(
一个简单的“docker版本”会告诉你:
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方面的一个制止者。
不过,你可以安装Docker for Windows ,它的function就像一个魅力,显然你可以部署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
Docker目前没有在当前版本中工作(14316) – 假设你可以安装它。
root@localhost:~# docker --help runtime: address space conflict: map(0x7ff5ddbb0000) = 0x7ff5ffd20000 fatal error: runtime: address space conflict
截至2016年9月,
目前所有Docker上的实现都使用虚拟化,Docker 1.12在Windows中使用虚拟机pipe理程序,从而消除了虚拟化的集装箱优势。
Docker需要的不仅仅是使用Linux系统调用。
它需要进程控制组(cgroups),可堆栈文件系统(aufs)以及内核之外的其他基于Linux的系统。
在Windows 10内核中,cgroup和aufs本身都不是。
这里有一个Windows Server 2016的实现: https: //msdn.microsoft.com/en-gb/virtualization/windowscontainers/quick_start/quick_start_windows_server ..但是这只会运行一些Windows服务,例如IIS,而不是Ubuntu
来自: 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!)