我的理解是,在其他操作系统上运行docker的主要限制是使Linux容器成为可能。(当然对于Macs)。
最近,Microsoft宣布了一个本机运行在Windows 10上的Ubuntu linux 用户模式的beta版。它可以在Windows上运行以ELF格式编译的二进制文件(不同于cygwin需要编译)。
我的问题是:您可以在新的Windows 10(Ubuntu)bash用户空间上本地运行Docker吗?
我的理解是,在其他操作系统上运行docker的主要限制是使Linux容器成为可能。(当然对于Macs)。
最近,Microsoft宣布了一个本机运行在Windows 10上的Ubuntu linux 用户模式的beta版。它可以在Windows上运行以ELF格式编译的二进制文件(不同于cygwin需要编译)。
我的问题是:您可以在新的Windows 10(Ubuntu)bash用户空间上本地运行Docker吗?
Answers:
在Windows的Ubuntu / Debian的WSL中,您可以将Windows的Docker Desktop用作引擎,将Linux的Docker用作客户端。通过TCP连接它们。
安装适用于Windows的Docker桌面: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的Expose守护程序,以允许Linux Docker客户端继续通过TCP与Windows Docker守护程序进行通信
跟着这些步骤:
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
我已经使用Hyper-V使用Docker桌面的2.1.0.1(37199)版本对其进行了测试:
$ 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/
docker引擎上可见。您可以永久克服它:
sudo bash -c "echo -e '[automount] \nroot = /'>/etc/wsl.conf"
对wsl.conf进行更改后,必须退出并重新加载WSL,以便WSL在启动时读入更改。
更新
Unix套接字 Windows上不支持Unix套接字,现在支持了!您还可以在Windows和WSL之间通过Unix套接字进行通信。这方面的一大优点是,它使WSL能够运行Linux Docker Client与Windows上运行的Docker Daemon进行交互。
更新
该脚本和Unix套接字的使用已包含在Pengwin的pengwin设置中。
问候
docker.exe
直接使用来查询/交互docker子系统。但是,请注意,用于Windows的docker将使用Windows变量和配置。
截至目前(2016年4月),答案是:
我们尚不知道(但可能还不知道)。
因此,问题在于,是否实现了Docker所需的syscall(用于chroot和名称空间)。答案是可能是“否”。Docker需要相当复杂(特定于Linux)的功能来进行流程和资源管理以及流程隔离。虽然可能可以在Windows上复制所有这些内容,但是这将需要大量工作,并且由于此Windows功能的目标似乎是运行Linux用户空间程序,因此它们似乎不太可能完成所有工作(并将其保密) 。
但是,据我所知,这两种方式都没有确切的信息。
当然,如果Microsoft决定希望Windows 10支持Docker,则他们可能会提供。将Docker移植到其他内核有一些先例:
昨天发布了第一份内部预览。我尝试安装docker,但失败,并显示以下内容:
如此看来,第一次预览当前不起作用。但是,正如许多人推测的那样,它可能会在将来的版本中使用。
docker ps
失败的原因是:Get http:///var/run/docker.sock/v1.18/containers/json: dial unix /var/run/docker.sock: setsockopt: invalid argument. Are you trying to connect to a TLS-enabled daemon without TLS?
不,这是不可能的。
Docker需要执行多项操作才能运行容器:
这些都是在Linux中实现的内核功能。不幸的是,它们中的大多数在Windows中都没有类似的功能来替代(在Microsoft在Windows内核中实现的Linux子系统中也没有)。所有这些都需要由OS提供。
chroot
,请意识到Ubuntu环境已经具有与WIN32不同的根目录。
从创建者更新(2017年6月13日公开发布)开始,您可以直接在WSL中运行本机Windows可执行文件。这意味着,如果您已经安装了Docker for 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
二进制文件,而只是通过Linux Shell进行操作。我不确定是否有一个很好的方法来实现这一目标。
在Windows 10版本1607内部版本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方面来讲,这绝对是一个障碍。
不过,您可以安装适用于Windows的Docker,它的工作原理非常吸引人,您显然可以部署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年9月,
Windows上所有当前的Docker实施都使用虚拟化,Docker 1.12在Windows中使用虚拟机监控程序-因此消除了容器化优于虚拟化的优势。
Docker不仅仅需要使用Linux系统调用。
它需要过程控制组(cgroup),可堆叠的文件系统(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
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!)
bash
用户空间。这是一个真实,相当完整的Linux用户空间,但是没有X Windows,即仅文本。说“庆典”通信的纯文本的限制相当好..