在windows上开始docker

docker默认是运行在Linux内核系统上的,所以在windows电脑上不能直接运行docker。目前官方给出的方案是,在windows上运行一个virtualbox虚拟机,在这个虚拟机内运行一个最小化的Linux,然后再在这个Linux之上去运行docker。但是由于我们是直接操作docker的相关命令,所以在我们和docker之间,几乎看不到中间这个virtualbox虚拟机,但这并不代表它不存在。

这篇文章就是来告诉你,如何在windows上利用官方工具DockerToolBox运行docker。

在DockerToolBox的使用中,需要区分virtualbox这一层和docker这一层,实际上,virtualbox只是toolbox的一个引擎,从理论上讲,我们应该可以使用其他的虚拟机作为引擎来运行一个Linux,然后再在这个Linux上运行docker。而这一层,toolbox创建了一个docker-machine命令来操作。

当你安装好dockertoolbox之后,你可以使用它提供的Docker Quickstart Terminal来启用一个cmd客户端,在这个cmd开启时,它会自动去完成docker-machine的一些操作,比如创建一个虚拟机,在这个虚拟机里面部署docker,并且把当前cmd的环境变量连接到虚拟机中,这样你就可以直接通过docker命令进行操作。

但是,由于这个terminal并不友好,我更习惯用git bash。这里的意思是,希望你不要仅限于Docker Quickstart Terminal,而是可以在任何terminal里面都可以启动自己的docker。

创建虚拟机:

docker-machine create --driver virtualbox default

default是虚拟机的名称,我们默认都是使用virtualbox,所以下面所说的“虚拟机”特指“由docker-machine创建的一个基于virtualbox的最小化Linux系统,并且这个系统中已经运行了docker”。给这个虚拟机取名称,意味着你可以创建多个不同名称的虚拟机,也就是说你有多个docker,如果不是由toolbox这个工具作为桥,这些虚拟机之间应该是相互隔离的,所以你在某一个虚拟机里面运行docker容器得到的上下文,跟另外一个虚拟机里面的docker没有半毛钱关系。这也就是说,docker在不同的虚拟机里面的镜像、容器是不能共享的。我想这应该是为不同的作业做准备的。

但是!但是,我们只能同一时间在同一个cmd中操作一台虚拟机的docker,而且,每次一个新的cmd启动的时候,这个cmd并没有和虚拟机连接起来,所以docker命令都会报错。接下来,我们启用一个新的cmd,来进行我们的docker操作。

docker-machine create --driver virtualbox mydocker ## 创建并启动
docker-machine env mydocker ## 将mydocker这个虚拟机设置为当前cmd的环境连接虚拟机,这样才能在后面通过docker命令对虚拟机内的docker进行操作
## 执行完上面这一句之后,cmd里面会给出一句话,让你执行另外一条语句,复制它执行一下:
eval $("C:\Program Files\Docker Toolbox\docker-machine.exe" env mydocker)
## 这条语句的作用是设置你的环境变量使之生效,是一定要执行的,否则仍然无法进入下一步
docker images

这时,你就可以正常使用docker命令了。

上面是创建一个虚拟机,并且去执行,那么下面我们开启第二个cmd,再次进入到这个虚拟机,去操作同一个docker。

eval $("C:\Program Files\Docker Toolbox\docker-machine.exe" env mydocker)
docker images

只需要执行eval $("C:\Program Files\Docker Toolbox\docker-machine.exe" env mydocker)就可以了,因为前面我们已经启动了这个虚拟机,所以这个虚拟机其实是运行着的,而且env也执行过了,所以,要做的,是把当前这个cmd的环境变量映射过去,这样就可以直接操作docker了。

docker-machine还有其他的一些操作,都可以使用--help去了解。比如stop, ls等这些指令。如果你运行了docker-machine stop mydocker,那么你到第一个cmd里面去运行docker命令就会发现出错,这个虚拟机都已经停掉了,这个虚拟机里面运行的docker当然也就不可操作了。

如果在windows上的docker里面修改registry呢?因为docker是安装在虚拟机内的Linux系统上,所以你要登入到虚拟机内部才能修改docker的配置:

docker-machine ssh mydocker
sudo sed -i "s|EXTRA_ARGS='|EXTRA_ARGS='--registry-mirror=https://w4t0iuav.mirror.aliyuncs.com |g" /var/lib/boot2docker/profile

这样就可以修改为阿里云的docker镜像。

2016-11-23