1 前提条件
windows操作系统支持:win7以上,具体请查看官方网站;
cpu 虚拟化技术支持:我的机器cpu型号是Intel Core 2 Duo T6570,虽然通过bios没有看到VT设置,但是使用微软的硬件虚拟化技术检测工具进行检测,我的机器是支持的。
2 安装Docker Toolbox
1.下载 Docker Toolbox
下载地址 | https://github.com/docker/toolbox |
版本 | v1.8.3 |
组件内容 | 包含的组件: docker 1.8.3 docker-machine 0.4.1 Kitematic 0.8.7 Boot2Docker ISO 1.8.3 VirtualBox 5.0.6 |
2.安装Docker Toolbox
(1) 安装过程
安装的界面如下图所示:
(2) 安装后
同时安装程序往 windows 的环境变量里增加了配置,例如 path 里添加了 Docker Toolbox 安装目录,这样在 cmd 命令行里就可以运行 Docker Toolbox 自带的命令了: docker-machine 命令、 docker 客户端命令等。
3. Docker Toolbox功能说明
Docker ToolBox 会安装下面几个组件:(1) Git
Git是一个非常优秀的版本控制系统。
- Github是一个基于Git的代码托管平台,像JQuery、Docker等比较火的开源社区都使用它进行源码管理。Github是Git的服务端。
- 通过ssh、git协议访问Github,就需要一个git客户端。Docker Toolbox提供了windows环境下的Git客户端(即msysGit),msysGit的优势是提供了一个命令行界面(Git Bash)。
- 对于Github来说,msysGit是客户端。其实msysGit也可以是服务器端,用来创建Git仓库(Repository)。
(2) Virtualbox
由于Docker 是基于Linux Container的,所以Docker必须运行在Linux内核的操作系统上。在Windows平台上运行的Docker,其实是运行在“使用虚拟机软件在Windows平台上创建的Linux系统虚拟机”上。流行的虚拟机软件有VMware、VirtualBox等,Docker Toolbox提供了VirtualBox软件的安装包。
(3) Boot2Docker.iso
创建Linux虚拟机需要Linux操作系统的安装文件(例如Ubuntu镜像文件、Red Hat Linux镜像文件等都可以),Docker Toolbox提供了一个比较小的Linux系统安装镜像文件(即boot2docker.iso,这是一个由CD-ROM引导的TinyCoreLinux系统)。该镜像里自带了docker引擎。
(4) docker-machine
Docker Machine 是一个简化 Docker 安装的命令行工具,通过一个简单的命令行即可在相应的平台上安装 Docker ,比如 VirtualBox 、 Digital Ocean 、 Microsoft Azure 。(5) docker client
面向 Windows 的 Docker 客户端,采用的是命令行界面。在 cmd 下输入“ docker”后按回车键,就会看到该命令的使用说明。
(6) kitematic
Docker GUI(图形用户界面)
3 Docker关键概念
对于linux,Docker client、Docker deamon以及容器都可以直接运行在本地机器上,但是对于windows,Docker deamon以及容器必须运行在Linux虚拟机上,这个虚拟机称为Docker host。
4 运行一个Docker Container
在Windows操作系统上运行一个Docker Container,你需要:
- 在电脑上创建一个(或者启动一个已经存在的虚拟机)虚拟机(将该虚拟机称为docker主机,标记为:Docker host)。
- 为windows环境(我们直接在windows环境操作docker,因此将windows环境称为Docker client)配置相关环境变量。
- 通过docker client 来创建、加载并管理container。
有两种方式来使用所安装的Toolbox:通过Docker Quickstart Terminal或者通过shell(即命令行)
4.1 通过Docker Quickstart Terminal(傻瓜式操作)
Docker Toolbox提供的Docker Quickstart Terminal是个快捷方式:
目标:该快捷方式实际上指向了Toolbox安装目录下的一个sh文件;
目标位置:Docker Toolbox提供了windows环境下的Git软件安装包,并进行了安装。安装后的Git提供了各种辅助工具,包括“Bash、sh等”。
这里需要进行扫盲: 【git bash】是Windows下的命令行工具,基于msys GNU环境。 【MSYS】Minimal GNU(POSIX)system on Windows,是一个小型的GNU环境,包括基本的bash,make等等。是Windows下最优秀的GNU环境。 【MinGW】 Minimalist GNU for Windows 的简称,是指只用自由软件来生成纯粹的Win32可执行文件的编译环境。MinGW 是为了那些不喜欢工作在 Linux(FreeBSD) 操作系统而留在Windows 的人提供一套符合GNU 的工作环境。 |
1.双击运行“Docker Quickstart Terminal”
通过分析start.sh文件,以及终端窗口的输出,该执行过程完成了以下功能:
- 打开一个终端窗口;
- 创建并启动一个名词为default的虚拟机;
- 设置环境变量;
最终执行结束后的界面如下图:
2.通过运行“hello-world”container来验证安装是否正确。
运行“$ docker run hello-world”命令后的效果:
4.2 通过CMD命令行
1.打开一个CMD命令行窗口
2.进入“Shell环境”
假设大家都是习惯于Linux环境的,在windows下操作肯定不习惯,因此我们需要使用bash环境。
在安装docker Toolbox过程中,默认安装了Git软件。如上图所示,在Git的安装目录下(bin子目录以及usr/bin子目录)提供了许多工具。其中的Bash是Git为windows环境提供的类Unix的shell环境,为了使用这些工具,需要将工具的对应目录添加到path变量里。
这里需要进行扫盲: 【git bash】是Windows下的命令行工具,基于msys GNU环境。 【MSYS】Minimal GNU(POSIX)system on Windows,是一个小型的GNU环境,包括基本的bash,make等等。是Windows下最优秀的GNU环境。 【MinGW】 Minimalist GNU for Windows 的简称,是指只用自由软件来生成纯粹的Win32可执行文件的编译环境。MinGW 是为了那些不喜欢工作在 Linux(FreeBSD) 操作系统而留在Windows 的人提供一套符合GNU 的工作环境。 |
后续的步骤通过bash环境来执行命令。输入sh进入bash环境:
C:\Users\oliver>sh bash-4.3$ |
3.创建一个Docker虚拟机(Docker host)
bash-4.3$ docker-machine create --driver virtualbox my-default Creating VirtualBox VM... Creating SSH key... Starting VirtualBox VM... Starting VM... To see how to connect Docker to this machine, run: D:\environment\DockerToolbox\ docker-machine.exe env my-default |
Docker Machine能够创建(create)、删除(rm)、启动(start)、停止(stop)Docker虚拟机。其实Docker Quickstart Terminal的实现也是调用这些docker-machine命令。
4.列出可用的Docker虚拟机(Docker host)
bash-4.3$ docker-machine ls NAME ACTIVE DRIVER STATE URL SWARM my-default virtualbox Timeout |
5.显示“设置Docker client环境变量”的命令
bash-4.3$ docker-machine env my-default export DOCKER_TLS_VERIFY="1" export DOCKER_HOST="tcp://192.168.99.100:2376" export DOCKER_CERT_PATH="C:\Users\oliver\.docker\machine\machines\my-default" export DOCKER_MACHINE_NAME="my-default" # Run this command to configure your shell: # eval "$(D:\environment\DockerToolbox\docker-machine.exe env my-default)" bash-4.3$ eval "$(docker-machine env my-default)" |
6.设置Docker client环境变量
bash-4.3$ eval "$(docker-machine env my-default)" |
通过evn命令,验证环境变量是否设置成功
7.通过运行“hello-world”container来验证安装是否正确。
运行“ docker run hello-world”命令后的效果:
bash-4.3$ docker run hello-world Post http://127.0.0.1:2375/v1.20/containers/create: dial tcp 127.0.0.1:2375: ConnectEx tcp: No connection could be made because the target machine actively refu 0a6ba66e537a: Pull complete Digest: sha256:517f03be3f8169d84711c9ffb2b3235a4d27c1eb4ad147f6248c8040adb93113 Status: Downloaded newer image for hello-world:latest 0a6ba66e537a: Extracting 32 B/32 B Hello from Docker.load complete This message shows that your installation appears to be working correctly. 0a6ba66e537a: Downloading 32 B/32 B To generate this message, Docker took the following steps: 1. The Docker client contacted the Docker daemon. 2. The Docker daemon pulled the "hello-world" image from the Docker Hub. 3. The Docker daemon created a new container from that image which runs the executable that produces the output you are currently reading. 4. The Docker daemon streamed that output to the Docker client, which sent it to your terminal. 'hello-world:latest' locallylatest: Pulling from library/hello-world
To try something more ambitious, you can run an Ubuntu container with: $ docker run -it ubuntu bash
Share images, automate workflows, and more with a free Docker Hub account: https://hub.docker.com
For more examples and ideas, visit: https://docs.docker.com/userguide/ |
4.3 FAQ
1.创建docker主机时,卡在“Sarting VM...”
C:\Users\oliver>docker-machine create --driver virtualbox test1 Creating CA: C:\Users\oliver\.docker\machine\certs\ca.pem Creating client certificate: C:\Users\oliver\.docker\machine\certs\cert.pem Creating VirtualBox VM... Creating SSH key... Starting VirtualBox VM... Starting VM... Error creating machine: Maximum number of retries (60) exceeded You will want to check the provider to make sure the machine and associated resources were properly removed. |
经过不断尝试和搜索,发现一个Docker host的正常的存储结构为:
但是卡住的docker并没有生成红色矩形所标注的几个文件。怀疑是在连接虚拟机时没有这些认证文件所导致。至于为什么没有生成,不得而知…..
2.初次运行hello-world容器时报错
bash-4.3$ docker run hello-world Unable to find image 'hello-world:latest' locally Pulling repository docker.io/library/hello-world Get https://registry-1.docker.io/v1/repositories/library/hello-world/tags/latest: net/http: TLS handshake timeout |
网络问题,多尝试几次。
3.能否不借助bash ,完全在CMD下运行。
完全可以,只有一个步骤需要更改,在“设置Docker client环境变量”时,通过“docker-machine env --shell cmd my-default”命令显示需要执行哪些配置:
C:\Users\oliver>docker-machine env --shell cmd my-default set DOCKER_TLS_VERIFY=1 set DOCKER_HOST=tcp://192.168.99.102:2376 set DOCKER_CERT_PATH=C:\Users\oliver\.docker\machine\machines\test set DOCKER_MACHINE_NAME=test # Run this command to configure your shell: # copy and paste the above values into your command prompt |
然后在cmd里执行这4个环境设置命令。
4.查看Docker虚拟机的状态
此时输入“$ docker-machine status default”命令:
5.登录Docker 虚拟机
a) 使用用户名和密码:docker/tcuser。
b) 使用public key :存储在docker-machine实例目录下的id_rsa文件。