Haw*_*eye 127 windows ubuntu lxc docker windows-10
我的理解是,在其他操作系统上运行 docker 的主要限制是使之成为可能的 Linux 网络容器。(当然适用于 Mac)。
最近,Microsoft 宣布了在 Windows 10 上本地运行的Ubuntu linux用户模式的测试版。这可以在 Windows 上运行以 ELF 格式编译的二进制文件(与需要编译的 cygwin 不同。)
我的问题是:您能否在新的 Windows 10 (Ubuntu) bash 用户空间上本地运行 Docker?
Car*_*rez 104
您可以在 Windows 上的 Ubuntu/Debian 上的 WSL 中使用 Docker Desktop for Windows 作为引擎和 Docker for Linux 作为客户端。通过 TCP 连接它们。
安装适用于 Windows 的 Docker 桌面:https : //hub.docker.com/editions/community/docker-ce-desktop-windows 如果您想使用 Windows Containers 而不是 Linux Containers,这两种类型的容器都可以由 Linux docker 客户端管理bash 用户空间。
从 17.03.1-ce-win12 (12058) 版本开始,您必须在没有 TLS 的情况下检查tcp://localhost:2375 上的 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
Run Code Online (Sandbox Code Playgroud)
或者
env DOCKER_HOST=tcp://0.0.0.0:2375 ./docker ps
Run Code Online (Sandbox Code Playgroud)
要使其永久化:
mkdir ~/bin
mv ~/docker/docker ~/bin
Run Code Online (Sandbox Code Playgroud)
.bashrc 中添加相应的变量
export DOCKER_HOST=tcp://0.0.0.0:2375
export PATH=$PATH:~/bin
Run Code Online (Sandbox Code Playgroud)
当然,你可以安装 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
Run Code Online (Sandbox Code Playgroud)
或者使用 python pip
sudo apt-get install python-pip bash-completion
sudo pip install docker-compose
Run Code Online (Sandbox Code Playgroud)
和 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
Run Code Online (Sandbox Code Playgroud)
我已经使用 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**
Run Code Online (Sandbox Code Playgroud)
卷
添加卷时要小心。该路径C:\dir将/mnt/c/dir在 WSL 和/c/dir/docker 引擎上可见。您可以永久克服它:
sudo bash -c "echo -e '[automount] \nroot = /'>/etc/wsl.conf"
Run Code Online (Sandbox Code Playgroud)
在对 wsl.conf 进行更改后,您必须退出并重新加载 WSL,以便 WSL 在启动时读取您的更改。
更新
来自:Windows 10 版本 1803 中命令行的新增功能
Unix 套接字 Windows 不支持 Unix 套接字,现在支持了!您还可以在 Windows 和 WSL 之间通过 Unix 套接字进行通信。这样做的好处之一是它使 WSL 能够运行 Linux Docker 客户端以与运行在 Windows 上的 Docker 守护程序进行交互。
更新
此脚本和 Unix 套接字的使用包含在Pengwin的 pengwin-setup 中。
问候
sle*_*ske 51
截至目前(2016 年 4 月),答案是:
我们还不知道(但可能不知道)。
所以问题是 Docker 需要的系统调用(用于 chroot 和命名空间等)是否已实现。答案很可能是“不”。Docker 需要相当复杂的(和 Linux 特定的)功能来进行进程和资源管理以及进程隔离。虽然有可能在 Windows 上复制所有这些,但需要做很多工作,而且由于此 Windows 功能的目标似乎是运行 Linux 用户空间程序,因此他们似乎不太可能完成所有工作(并保密) .
但是,据我所知,这两种方式都没有明确的信息。
当然,如果微软决定在 Windows 10 中支持 Docker,他们可能会提供它。将 Docker 移植到不同的内核有一些先例:
Flo*_*aie 13
不,这是不可能的。
Docker 需要多种东西才能运行容器:
这些都是在 Linux 中实现的内核特性。不幸的是,它们中的大多数在 Windows 中都没有类似的功能可以用作替代品(也不在 Microsoft 在 Windows 内核中实现的 Linux 子系统中)。所有这些都需要由操作系统提供。
小智 13
昨天发布了第一个内部预览。我尝试安装 docker,但失败并显示以下内容:

所以看起来,对于第一次预览,它目前不起作用。然而,正如许多人所推测的那样,它可能会在未来的版本中工作。
从Creator Update(2017 年 6 月 13 日公开发布)开始,您可以直接在 WSL 中运行本机 Windows 可执行文件。这意味着如果您已经为 Windows安装了Docker,您可以简单地调用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
Run Code Online (Sandbox Code Playgroud)
这会为目录中的所有文件创建别名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
Run Code Online (Sandbox Code Playgroud)
一个警告:如果从 Linux 目录运行,您将收到一条错误消息,例如“无法转换当前工作目录”。只需cd进入 Windows 目录(例如/mnt/c/Users/YourUsername),您应该就可以了。
一旦 Docker 1.12 发布并且 Linux Docker 客户端分离,您应该能够在 Windows 10 bash 中运行 docker客户端。
考虑到您拥有 Docker Windows 客户端,这听起来可能并不多,但如果您拥有包含 docker 的 Linux 工具链作为其客户端功能,这将非常有用。