本文简要说明 Windows 环境下 Docker 的安装与配置。
原理概述
Docker 最早基于 Linux 内核相关特性构建,只能在 Linux 类系统上运行。所以,Windows 上只能基于 Linux 虚拟机运行 Docker。但与微软深入合作后,从 Windows Server 2016 开始,提供了对 Docker 的原生支持。所以,在 Windows 上安装、运行 Docker 有两种模式:
- Windows Container:专为 Windows 设计的容器架构下原生支持、运行的容器,Windows 底层相关 API 都是全新设计的。
- Hyper-V/VirtualBox Container(Linux Container):基于 Windows Hyper-V 或 Docker Toolbox 内嵌的 VirtualBox 创建 Linux 虚拟机承载 Docker 容器环境。
要点:
- Windows Container 与其宿主机共享一个内核,因此容器映像版本必须与宿主机相匹配。 如果版本不同,容器虽然可以启动,但其功能完整性得不到保证。
- 而 Linux Container 基于虚拟机构建,所以使用自己的内核实例。因此,宿主机和容器镜像可以是不同的操作系统版本。
环境要求
- Windows Container 功能仅适用于 Windows Server 2016(核心和桌面体验)、Nano Server 和 Windows 10 专业版和企业版(周年纪念版)。
- 运行 Hyper-V 容器之前必须安装 Hyper-V 角色。
- Windows Server 容器主机必须将 Windows 安装到 C:\。 如果将仅部署 Hyper-V 容器,则不会应用此限制。
安装配置概述
Docker Toolbox For Windows 7/8
要点
对于 Windows 7/8 系统,可以基于 Docker Toolbox 安装 Docker 环境。注意如下要点:
- 操作系统必须是 Windows 7 之后的系统。
- 必须是 64位系统。
Docker Toolbox 涵盖了 Docker 运行的通用组件。包括:
- Docker CLI 客户端:创建镜像、运行容器等 Docker 相关操作的 CLI 环境。
- Docker Machine:使您可以在 Windows CMD 里面直接运行 docker 相关指令。
- Docker Compose : 使您可以运行 docker-compose 相关指令。
- Kitematic: 提供了 Docker 图形配置界面
- Docker 快速启动:使您能快速启动 Docker 命令行环境。
- Oracle VM VirtualBox: 虚拟机软件,基于其自动创建 Docker 运行所依赖的 Linux 虚拟机。
- Git: Windows Git 客户端。
安装
Docker Toolbox 的安装非常简单。和常见的 Windows 软件类似,从 Docker 官方下载安装包后直接双击安装即可。
具体安装细节及更多安装说明,本文不再详述,您可以查阅 Docker 官方文档。
注意事项
Docker Quickstart Terminal 启动时会自动从 github 下载最新的 boot2docker.iso (一个专为Docker而设计的轻量级 Linux 发行包)。而由于国内到 github 的网络稳定性问题,会导致由于该文件无法下载导致启动过程中出现类似如下信息并持续卡顿:
(default) No default Boot2Docker ISO found locally, downloading the latest release...
(default) Latest release for github.com/boot2docker/boot2docker is v17.05.0-ce
(default) Downloading C:\Users\\Administrator\.docker\machine\cache\boot2docker.iso from https://github.com/boot2docker/boot2docker/releases/download/v17.05.0-ce/boot2docker.iso...
(default) 0%Error removing file: Error removing temporary download file: remove C:\Users\\Administrator\.docker\machine\cache\boot2docker.iso.tmp24517390: The process cannot access the file because it is being used by another process.
(default)Looks like something went wrong in step ´Checking if machine default exists´...Press any key to continue...
处理办法
1. 复制上述报错信息正文中的 boot2docker.iso 下载地址,比如:https://github.com/boot2docker/boot2docker/releases/download/v17.07.0-ce/boot2docker.iso
2. 通过 VPN 等方式从 github 直接下载该文件。
3. 将下载后的文件保存到上述报错信息中的相应目录。比如: C:\Users\Administrator.docker\machine\cache
4. 同时删除上述目录所有之前生成的类似 boot2docker.iso.tmpxxxx 的缓存文件。
4. 重新运行 Docker Quickstart Terminal 。
通过 Client 连接和管理 Docker Engine
基于上述 Docker Quickstart Terminal 快速创建 Docker 虚拟环境后,可以通过如下方式,使用 Docker CLI 连接和管理 Docker Engine。
注意: 必须确保相应 Docker Engine 已正常启动后才能正常连接。
-
前置:获取基础信息
- 新建 CMD窗口,执行
docker-machine ls
获取 docker Engine 相关信息:URL 列是监听地址,Name 列是名称(默认为 default)。 - Docker Quickstart Terminal 创建的 Docker Engine 默认的证书目录如下(Administrator 对应安装用户):
C:\Users\Administrator.docker\machine\certs
- 新建 CMD窗口,执行
-
直接在命令中添加相关参数
可以在命令行中结合相关参数,直接指定目标 docker Engine 的地址进行使用和管理:
格式:
docker -H tcp://:2376 --tlsverify --tlscacert=<证书路径>\ca.pem --tlscert=<证书路径>\cert.pem --tlskey=<证书路径>\key.pem <操作指令>示例:
docker -H tcp://192.168.99.100:2376 --tlsverify --tlscacert=C:\Users\Administrator\.docker\machine\certs\ca.pem --tlscert=C:\Users\Administrator\.docker\machine\certs\cert.pem --tlskey=C:\Users\Administrator\.docker\machine\certs\key.pem ps
-
通过 docker-machine 获取自配置脚本
docker-machine env 指令可以根据相应的 docker engine 自动生成相应 shell 的环境配置脚本。根据所使用 shell 的不同,结合相应 Docker Engine 的名称,使用如下格式获取配置脚本:
格式:
docker-machine env --shell [docker engine 名称]
说明:- 支持的 shell 包括: fish,cmd,powershell,tcsh,auto-detect
- shell 自动判断不建议使用,实测判断效果很差。
- docker engine 名称参阅前述说明,通过 docker-machine ls 获取,如果不输入,则使用默认名称:*default*。
示例
【cmd 环境】 docker-machine env --shell cmd default SET DOCKER_TLS_VERIFY=1 SET DOCKER_HOST=tcp://192.168.99.100:2376 SET DOCKER_CERT_PATH=C:\Users\Administrator\.docker\machine\machines\default SET DOCKER_MACHINE_NAME=default SET COMPOSE_CONVERT_WINDOWS_PATHS=true REM Run this command to configure your shell: REM @FOR /f "tokens=*" %i IN ('docker-machine env --shell cmd') DO @%i
- 参阅返回信息末尾相关说明,在新开的 shell 窗口中,执行最后一条指令进行环境自动配置即可。比如:
```
【cmd 环境】:
@FOR /f "tokens=*" %i IN ('docker-machine env --shell cmd') DO @%i
【powershell环境】:
& docker-machine env --shell powershell default | Invoke-Expression
5. 可以将上述脚本指令创建对应脚本,比如 setCmd.bat,然后将脚本路径添加到环境变量 PATH 末尾即可。这样后续使用的时候直接输入 setcmd 按需调用即可:
```
【setDockerCmd.bat】:注意,bat 脚本中,for 语句中的特殊字符需要进行转义。所以这里将 %i 替换为 %%i:
@FOR /f "tokens=*" %%i IN ('docker-machine env --shell cmd') DO @%%%i
```
Docker for Windows For Windows 10
安装
对于 Windows 10 系统,可以基于 Docker for Windows 直接安装 Docker 环境。注意如下要点:
- 安装包分为 Stable channel 和 Edge channel 两个分支。
- Stable 版是稳定版本,每个季度更新一次。而 Edge 版是测试版,每个月更新一次。
Docker for Windows 的安装也类似,从 Docker 官方按需下载所需的分支版本安装包后,直接双击安装即可。
安装完成后,双击桌面上的 Docker for Windows 图标运行 Docker。待通知区域的 Docker 图标显示 Docker 正在运行后,以管理员身份打开 PowerSehll,然后运行指令 docker version,则会输出 Docker 客户端及服务端的相关版本信息:
PS C:\Windows\system32> docker version
Client:
Version: 17.09.0-ce-rc1
API version: 1.31
Go version: go1.8.3
Git commit: ae21824
Built: Wed Sep 6 22:25:14 2017
OS/Arch: windows/amd64
Server:
Version: 17.09.0-ce-rc1
API version: 1.32 (minimum version 1.24)
Go version: go1.8.3
Git commit: ae21824
Built: Wed Sep 6 22:35:40 2017
OS/Arch: windows/amd64
Experimental: true
配置
配置自动补齐
PowerShell 下 Docker 相关指令默认没有配置自动补齐功能。可以参阅如下步骤安装配置 posh-docker 来实现自动补齐:
1. 以管理员身份打开 powershell
2. 执行如下指令配置 powershell 脚本执行权限(按 Y 选择 是):
Set-ExecutionPolicy RemoteSigned
# 执行完成后,可以执行如下指令检查配置情况
get-executionpolicy
- 安装 posh-docker
Install-Module posh-docker
# 出现相关提示,选择 Y
- 默认情况下,自动补齐只对当前 powershell 生效。执行如下指令以对全局生效:
if (-Not (Test-Path $PROFILE)) {
New-Item $PROFILE –Type File –Force
}
Add-Content $PROFILE "`nImport-Module posh-docker"
关于 Windows 镜像
完成前述配置后,就可以按正常模式继续使用 Docker 了。可以点击通知栏 Docker 图标进行 Windows Container 和 Linux Container 的切换。需要注意的是,Windows Docker 目前支持的容器镜像只有两种:Windows Server Core 和 Nano Server。 并非所有配置都支持这两个操作系统映像。 下表详细介绍所支持的配置。
| 主机操作系统| Windows Server 容器| Hyper-V 容器|
| - | -|
|Windows Server 2016(Standard 或 Datacenter) |Server Core/Nano Server |Server Core/Nano Server|
| Nano Server | Nano Server | Server Core/Nano Server|
| Windows 10 专业版/企业版 | 不可用 | Server Core/Nano Server |
切换到 Windows Container 后,执行如下指令获取 Windows 镜像:
docker pull microsoft/nanoserver
docker pull microsoft/servercore
配置加速器
由于 docker hub 在国外,所以 pull 镜像时速度很慢甚至中断。目前 Docker 官方与阿里云合作,已经退出官方国内加速地址:https://registry.docker-cn.com*,可以配置加速器加速镜像的下载:
Docker Toolbox For Windows 7/8
参阅前述说明,在 通过 docker-machine 获取自配置脚本 步骤中,手工增加如下指令
SET REGISTRY-MIRRORS=https://registry.docker-cn.com
Docker for Windows For Windows 10
右击通知区域的 Docker 图标,选择 Settings...,然后切换到 Proxies 选项卡,选择 Manual proxy configuration,然后取消勾选 Use same for both,最后在 Secure Web Server.. 区域填入如下内容:
https://registry.docker-cn.com