在 Windows 下使用 boot2docker 搭建 docker 开发环境
很久以前研究过一会儿 docker ,当时觉得只是一个轻量级的虚拟机包装而已,没觉得有多大用。
最近发现这玩意还蛮好玩的,但是又懒得翻以前的虚拟机了,于是发现一个叫 boot2docker – 国内下载(via DaoCloud) 的东西。官方宣称是“It runs completely from RAM, weighs ~27MB and boots in ~5s (YMMV).”。
下载回来的安装包有 100 多 MB,当时在想说好的 27MB 呢,结果发现包里有个 VirtualBox 和一个 msysgit ……简直坑。
如果你的机器上没有这俩玩意,那就放心大胆的直接安装吧。它会帮你把各种琐事配置好,官方的指导文档里也写的十分详细。
如果你的系统里有 VirtualBox 了,那也就直接安装,它会自动识别系统上的 vbox 的,不过你最好先测试一下你的 Host-only 网卡是否正常。
那么重点来了:如果你的系统里有 msysgit,并且还有其它的 GNU 工具链,比如我这种装了 Gow 的人,那么其实这个玩意是有坑的。
要说这个坑,首先要谈一谈 boot2docker 的工作原理。 boot2docker 由 VirualBox 里的一个叫 boot2docker 的虚拟机、一个用来管理 Virual Box 里的虚拟机的工具 boot2docker.exe 和 docker 本体 docker.exe 组成。
当你执行 sh start.sh 的时候,它首先调用 boot2docker init
来创建这个虚拟机(如果已经存在则跳过);其次将该虚拟机启动;最后使用 boot2docker ip
来获取虚拟机的 ip 地址并设置环境变量。
而 boot2docker ip
这个命令,是调用系统中的 ssh
来获取 ip 地址的。它在 init 的时候,将虚拟机的 22 端口转发到宿主机的 2022 端口,并运行 ssh -p 2022 docker@localhost ip addr show dev eth1
来获取 ip 地址(详细的命令可运行 boot2doker -v ip
来显示)。而 Gow 里的 ssh
指令,则是调用了 PuTTY 的 plink.exe
。
那么问题来了:plink.exe 根本不支持 -p
语法,也不支持它所使用的 -o
等参数。
所以,如果你装了 Gow,请一定把 msys git 的路径加到 PATH 的最前方……起码是在 Gow 的前面,这样就不会被坑了。
处理完这些乱七八糟的事情之后,运行 boot2docker status
即可看到你的虚拟机的当前状态。下次使用时,只需执行 sh start.sh
即可自动配置好环境变量并且开启 git bash。在这个 git bash 里,你就可以执行你的 docker 指令了~
如果不想用 git bash,那么执行 boot2docker shellinit
,也可以看到应设置的环境变量,如:
export DOCKER_HOST=tcp://192.168.111.222:2376 export DOCKER_CERT_PATH='C:\Users\oott123\.boot2docker\certs\boot2docker-vm' export DOCKER_TLS_VERIFY=1
此时,用 set 将这些环境变量设置好,即可在 cmd 中使用 docker 来管理 docker 容器了,如:
set DOCKER_HOST=tcp://192.168.111.222:2376 set DOCKER_CERT_PATH=C:\Users\oott123\.boot2docker\certs\boot2docker-vm set DOCKER_TLS_VERIFY=1
试试 docker info
能不能显示出虚拟机的信息来吧。