环境说明:windows10专业版 64位
一、Docker在Windows10上有两种部署方式
1、安装DockerToolbox,该方法是利用VirtualBox创建了一个名为default的linux虚拟机,再在该linux虚拟机上来运行docker。
2、利用Windows的Hyper-v虚拟化技术,直接在Windows上安装docker(先开启Hyper-v,但Hyper-v与vmware workstation不兼容,后期想运行vmware workstation时还需要禁用Hyper-v,所以暂不推荐该方法)。需要尝试的童鞋下载链接(https://download.docker.com/win/stable/Docker%20Desktop%20Installer.exe)
二、以下仅介绍使用DockerToolbox在windows10上运行docker
1、Docker Toolbox下载链接:https://dn-dao-github-mirror.daocloud.io/docker/toolbox/releases/download/v1.12.3/DockerToolbox-1.12.3.exe
DokcerToolbox默认集成的VirtualBox版本可能无法正常使用,所以可先安装最新版本的VirtualBox,再安装DockerToolbox时就可以取消勾选VirtaulBox了,如图1.1所示。
图1.1
备注:若无法使用默认VirtualBox,则下载最新的VirtualBox(下载链接为: https://download.virtualbox.org/virtualbox/6.0.14/VirtualBox-6.0.14-133895-Win.exe),按默认设置完成安装。
2、完成DockerToolbox安装后,双击桌面图标,如图2.1,运行Docker Quickstart Terminal,会提示C:\Users\${user}.docker\machine\cache\boot2docker.iso 版本太低,如图2.2所示,要重新从github上(https://github.com/boot2docker/boot2docker/releases/download/v19.03.5/boot2docker.iso)下载,建议直接复制终端的下载地址使用迅雷下载。
图2.1
图2.2
另外要注意的事,VirtaulBox默认创建的default虚拟机以及虚拟磁盘是放在C:\Users\${user}.docker\machine\machines\default。镜像和容器多了之后,会导致C盘空间不够用,所以可将虚拟机目录指到其他盘符,只需要增加环境变量MACHINE_STORAGE_PATH,如图2.3所示。
图2.3
关闭上述图2.2终端窗口,待下载完成后,直接复制替换D:\virtual-box\cache\boot2docker.iso,然后再运行桌面Docker Quickstart Terminal图标,如图2.4所示。
图2.4
3、创建容器进行测试,如图2.5、图2.6、图2.7所示。
$ docker pull centos
$ docker run -idt --name web01 -p 8088:80 --privileged=true centos:latest /sbin/init
$ docker exec -it web01 /bin/bash
[root@b95faf1d7801 /]# yum -y install httpd
[root@fe83f8d07d98 /]# systemctl enable httpd
[root@fe83f8d07d98 /]# systemctl start httpd
[root@fe83f8d07d98 /]# echo "hello world" >> /var/www/html/index.html
图2.5
图2.6
图2.7
三、总结
1、windows上安装virtaul box后默认会运行一个虚拟机(通过boot2docker.iso引导,相当于livecd),挂载一块虚拟磁盘(/dev/sda)持久化存储docker容器及镜像,该虚拟机网段是192.168.99.0/24(config.json可改),若是第一次安装,默认IP是192.168.99.100,登录用户名/密码是docker/tcuser,该虚拟机有2个用途:
(1)、所有容器运行于该虚拟机之上。
(2)、iptables做DNAT发布应用端口。
2、在使用过程中遇到的一些问题说明:
(1)、该虚拟机每次重启会清理掉iptables配置,docker和root用户密码也会恢复成默认。所以每次关闭自己电脑时,建议在virtual box中将该虚拟机暂停(挂起),第二天要用时先在VirtualBox运行该虚拟机。
(2)、windows上默认端口映射是用default虚拟机(ssh docker@192.168.99.100)配置iptables做DNAT发布端口。容器创建后,如果有新增服务,需要再次映射端口,可直接登录到default虚拟机增加映射记录,例如执行如下命令发布8089端口:root@default:~# iptables -t nat -A DOCKER ! -i docker0 -p tcp -m tcp --dport 8089 -j DNAT --to-destination 172.17.0.2:80
若要删除映射,可执行以下命令root@default:~# iptables -t nat -L -n --line-numbers
#列出所有nat规则root@default:~# iptables -t nat -D DOCKER 8
#按编号删除规则,此处是删除编号是8的规则
推荐使用以下方法修改映射(该方法同样适合于Ubuntu/Centos宿主机)
i)、iptables-save > iptbles
2)、修改iptables里面内容,删除或添加规则
3)、iptables-restore iptables
注:以上操作在default虚拟机中是以root用户执行。
3、使用Kitematic管理容器遇到的问题
(1)、在Kitematic管理菜单项中,每点一次save (保存)操作都会删除原容器重新创建新容器,在原容器所安装的软件以及配置都不会在新容器中得到继承。例如使用Kitematic来发布端口,若是已经在使用的容器,此时想用Kitematic来发布新端口会导致容器内数据全部丢失,包括安装的软件环境!是我操作姿势不对?,个人觉得该工具仅适合在首次创建容器(方便搜索docker Hub上的image以及一次性设置)时使用。