Windows环境下安装Docker

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

    docker-compose 1.4.2 (Mac OS X only)

    Kitematic 0.8.7

    Boot2Docker ISO 1.8.3

    VirtualBox 5.0.6

 2.安装Docker Toolbox

   (1)       安装过程

安装的界面如下图所示:

 
Windows环境下安装Docker
   (2)       安装后

完成安装后,在电脑桌面生成了3个快捷方式,包括“Docker Quickstart Termial”、“Oracle VM VirtualBox”、“Kitematic”。

Windows环境下安装Docker 

同时安装程序往windows的环境变量里增加了配置,例如path里添加了Docker Toolbox安装目录,这样在cmd命令行里就可以运行Docker Toolbox自带的命令了:docker-machine命令、docker客户端命令等。

Windows环境下安装Docker3.         Docker Toolbox功能说明

Docker ToolBox会安装下面几个组件:

 (1)       Git

       Git是一个非常优秀的版本控制系统。

  •  Github是一个基于Git的代码托管平台,像JQueryDocker等比较火的开源社区都使用它进行源码管理。GithubGit的服务端。
  • 通过sshgit协议访问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系统虚拟机”上。流行的虚拟机软件有VMwareVirtualBox等,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 OceanMicrosoft Azure

 (5)       docker client

面向WindowsDocker客户端,采用的是命令行界面。在cmd下输入“docker

”后按回车键,就会看到该命令的使用说明。

 (6)       kitematic

Docker GUI(图形用户界面)

3 Docker关键概念

Windows环境下安装DockerWindows环境下安装Docker

对于linuxDocker clientDocker deamon以及容器都可以直接运行在本地机器上,但是对于windowsDocker 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是个快捷方式:

Windows环境下安装Docker 

目标:该快捷方式实际上指向了Toolbox安装目录下的一个sh文件;

目标位置Docker Toolbox提供了windows环境下的Git软件安装包,并进行了安装。安装后的Git提供了各种辅助工具,包括“Bashsh等”。

这里需要进行扫盲:

git bash】是Windows下的命令行工具,基于msys GNU环境。

MSYSMinimal GNUPOSIXsystem on Windows,是一个小型的GNU环境,包括基本的bashmake等等。是Windows下最优秀的GNU环境。

MinGW Minimalist GNU for Windows 的简称,是指只用*软件来生成纯粹的Win32可执行文件的编译环境。MinGW 是为了那些不喜欢工作在 Linux(FreeBSD) 操作系统而留在Windows 的人提供一套符合GNU 的工作环境。

 

1.双击运行“Docker Quickstart Terminal

 通过分析start.sh文件,以及终端窗口的输出,该执行过程完成了以下功能:

  •  打开一个终端窗口; 
  • 创建并启动一个名词为default的虚拟机;
  •  设置环境变量;

最终执行结束后的界面如下图:

Windows环境下安装Docker2.通过运行“hello-worldcontainer来验证安装是否正确。

运行“$ docker run hello-world”命令后的效果:

Windows环境下安装Docker

4.2 通过CMD命令行

1.打开一个CMD命令行窗口

2.进入“Shell环境”

    假设大家都是习惯于Linux环境的,在windows下操作肯定不习惯,因此我们需要使用bash环境。
Windows环境下安装Docker

在安装docker Toolbox过程中,默认安装了Git软件。如上图所示,在Git的安装目录下(bin子目录以及usr/bin子目录)提供了许多工具。其中的BashGitwindows环境提供的类Unixshell环境,为了使用这些工具,需要将工具的对应目录添加到path变量里。

Windows环境下安装Docker
 

这里需要进行扫盲:

git bash】是Windows下的命令行工具,基于msys GNU环境。

MSYSMinimal GNUPOSIXsystem on Windows,是一个小型的GNU环境,包括基本的bashmake等等。是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)、停止(stopDocker虚拟机。其实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-worldcontainer来验证安装是否正确。

运行“ 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的正常的存储结构为:
Windows环境下安装Docker
     但是卡住的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”命令:          
Windows环境下安装Docker5.登录Docker 虚拟机

a)         使用用户名和密码:docker/tcuser。

b)         使用public key :存储在docker-machine实例目录下的id_rsa文件。