一、安装docker

 本文主要介绍Windows上利用 docker toolbox 来安装docker,可以使用阿里云的镜像来安装,

镜像地址:http://mirrors.aliyun.com/docker-toolbox/windows/docker-toolbox/

 

1.安装镜像

下载完成之后直接点击安装,安装成功后,桌边会出现三个图标,入下图所示:

其中VirtualBox提供了linux虚拟机的运行环境,Docker Quickstart Terminal用于进入linux虚拟机,提供命令行交互,Kitematic是docker GUI很少用到。

 

2.安装docker

点击 Docker QuickStart 图标来启动 Docker Toolbox 终端。

如果系统显示 User Account Control 窗口来运行 VirtualBox 修改你的电脑,选择 Yes。

第一次运行Docker Quickstart Terminal时会进行Docker环境的初始化,会在VirtualBox中自动创建名字为【default】的linux虚拟机,再此过程中会用到boot2docker.iso镜像文件。boot2docker是基于 Tiny Core Linux 的轻量级Linux发行版,专为 Docker准备,完全运行于内存中,24M大小,启动仅5-6秒。

默认情况下,启动程序会从GitHub上下载此文件的最新版,但经常会下载失败,造成Docker环境无法启动。

如果下载成功,会进入下图界面:

docker for win运行镜像 windows docker镜像_Centos

 

如果自动下载失败,可以先借助第三方下载工具下载boot2docker.iso,之后将下载好的镜像放到上图所示路径中(如:C:\Users\Administrator\.docker\machine\cache\boot2docker.iso),再运行Docker Quickstart Terminal,程序检测到本地已经有boot2docker.iso之后会使用本地的镜像。

注意:安装前需要确保bios中打开xt-v/amd64-v虚拟化支持,否则会出错。


3.更改虚拟磁盘存储位置

 虚拟机的默认存储位置是C:\Users\Administrator\.docker\machine\machines ,后期docke镜像文件会不断增加,为了给系统盘减负,最好将磁盘移动到其他位置。

安装完成之后虚拟机时默认启动的,要改变磁盘磁盘存储位置,需要先停止虚拟机,可以通过Docker Quickstart Terminal,也可以使用Windows自带的PowerShell工具。

例如:通过PowerShell或cmd终端中执行【docker-machine stop default】命令停止default虚拟机

docker for win运行镜像 windows docker镜像_Centos_02

通过VirtualBox【管理】-》【虚拟介质管理】界面对虚拟磁盘进行复制

docker for win运行镜像 windows docker镜像_Docker_03

 

需要注意虚拟磁盘类型的选择

选择分配方式(此处我选择的动态分配),复制disk.vmdk到待存储的位置(如D:\Docker),复制完成之后关闭窗口。

点击“设置-->存储”,右键删除disk.vmdk

docker for win运行镜像 windows docker镜像_Centos_04

为虚拟机添加新复制的虚拟磁盘

通过PowerShell或cmd终端中执行【docker-machine start default】命令启动停止的default虚拟机, 通过执行【docker-machine ssh default】进入到虚拟机。

docker for win运行镜像 windows docker镜像_docker_05

4.Windows文件目录共享给docker 容器

停止虚拟机,新建D:\DockerToolbox\workspace目录:

将这个目录挂载到docker 的虚拟机下面:设置 -> 共享 -> 添加共享文件夹

默认共享文件夹是workspace,此处我改为data:

启动虚拟机,然后进入虚拟机default :

执行【df】可以看到再虚拟机里共享文件夹已经自动挂载。

docker for win运行镜像 windows docker镜像_Docker_06

到这一步只是将Windows文件夹共享给虚拟机,还需要将虚拟机文件夹data共享给容器才行(下面会说明)。

 

5.容器ssh服务访问

因为docktools使用了虚拟机做为载体。虚拟机默认虚拟ip是192.168.99.100,所以从其他机器不能直接访问虚拟机,容器依赖虚拟机宿主,所以也不能直接访问。

【Windows ---- VBox(linux虚拟机) ---- 容器】

以ssh服务为例 ,默认主机ip的22端口是访问的是Windows主机(192.168.21.14)

 如果访问虚拟机,需要把主机ip的某个端口映射到虚拟机22好端口。

如下图,点击“设置--->网络--->网卡1--->端口转发”,可以看到默认已经配置好了一个名为ssh的规则,这也是指令【docker-machine ssh default】能够登陆到虚拟机的原因,(但这样只能支持Windows本机访问)。

docker for win运行镜像 windows docker镜像_Windows_07

如图规则VM 把ip为192.168.21.14的主机的57211端口映射到了22端口

这样局域网中其他机器就可以使用57211端口ssh连接到虚拟机进行管理虚拟机内的镜像和容器。

docker for win运行镜像 windows docker镜像_docker for win运行镜像_08

 

Windows主机映射一个端口到虚拟机,再使用虚拟机的8010端口映射到容器的22端口。这样“Windows IP:8010” == “虚拟机IP:8010” == “容器IP:22”,访问"Windows IP:8010"就相当于直接访问"容器IP:22",就可以使用ssh连接到容器了。

 

二、Docker使用

本文以centos7镜像为例说明:

1.下载及启动容器

使用指令【docker pull centos:7】拉取centos7镜像,【docker images】可以查看本地已下载镜像。

docker for win运行镜像 windows docker镜像_docker_09

【docker run -t -i -v /data:/soft -p 8010:22 centos:7 /bin/bash】运行容器(首次运行需要使用docker run指令设置一些参数,后面直接“docker start 容器ID”即可启动容器)。

【说明】

容器中会自动创建soft目录,这样容器就可以通过soft访问windows共享目录了;

使用-p把虚拟机端口8010映射到容器22端口;

”centos:7“为"镜像名:tag",也可以使用IMAGE ID代替,只是为了区分不通镜像;

如果不指定 /bin/bash,容器运行后会自动停止。

 

2.Docker中安装sshd服务

"sudo apt-get install openssh-server"-->回车-->输入"y"-->回车-->安装完成。

打开"终端窗口",输入"sudo ps -e |grep ssh"-->回车-->有sshd,说明ssh服务已经启动,如果没有启动,输入"sudo service ssh start"-->回车-->ssh服务就会启动

修改“/etc/ssh/sshd_config"

把配置文件中的"PermitRootLogin without-password"加一个"#"号,把它注释掉-->再增加一句"PermitRootLogin yes"-->保存,修改成功。

设置root密码123456,就可以使用root登陆了

 

3.将容器打包生产镜像Image

可看到,镜像Image依赖于容器Container

docker for win运行镜像 windows docker镜像_docker for win运行镜像_10

 

打包容器成镜像,保存自定义后的镜像:

docker  commit  -a "YourName"  -m "My First Image"   d9b1a8798289   centos7:v1

-a "YourName" 作者;

-m "My First Image" 简介;

 d9b1a8798289 要打包的容器ID;

centos7 创建的镜像名;

v1 镜像版本;

 

4.常见docker命令

运行容器(根据镜像生产容器)

docker run --privileged -t -i -v /data:/soft -p 8010:22 centos:7 /bin/bash

退出容器 exit

进入容器 docker exec -i -t a9a30a0f138f /bin/bash

启动容器 docker start a2156e555711

停止容器 docker stop a2156e555711

删除容器 docker rm a2156e555711

删除镜像 docker rmi a8a2ba3ce1a3 (需要先把所有子镜像的容器删除)

查看容器 docker ps -a

查看镜像 docker images

打包容器 docker  commit  -a "YourName"  -m "My First Image"   d9b1a8798289   centos7:v1

进入容器也可以docker attach a9a30a0f138f