最近在研究虚拟化,容器和大数据,所以从Docker入手,下面介绍一下在Windows下怎么玩转Docker。
Docker本身在Windows下有两个软件,一个就是Docker,另一个是Docker Toolbox。这里我选择的是Docker Toolbox,为什么呢?参见官方文档:
官方下载地址(推荐):https://blog.docker.com/2015/08/docker-toolbox/
从阿里云下载的docker-toolbox-18.03.0-ce安装完成后在启动的时候报错好多,官方下的19.03.1版本的启动很顺利
首先我们从官网下载最新版的Windows Docker Toolbox。安装后会安装一个VirtualBox虚拟机,一个Kitematic,这是GUI管理Docker的工具,没有发布正式版,不推荐使用,另外还有就是我们在命令行下用到的docker-machine和docker命令了。
安装
安装过程很简单,保持默认选项,直接【next】即可。VirualBox和Git如果已经安装,也可以不选
安装完成后,桌面上会多出3各图标,如下。其中VirtualBox提供了linux虚拟机的运行环境,Docker Quickstart Terminal用于快速介入linux虚拟机,提供命令行交互,Kitematic是docker GUI很少用到。
安装的时候要把Git For Windowns勾选起来,不然会出现图下错误
或者参考这里解决https://blog.51cto.com/suyanzhu/2315322
启动
添加环境变量MACHINE_STORAGE_PATH值为E:VirtualBox VMsDefault
(虚拟机文件存储的位置,放在E盘,默认在C盘下,避免C盘空间不足)把已经安装的虚拟机文件转移一个盘老是出错,不是知道为什么,所以建议在创建default之前把我虚拟机文件目录设置好。
第一次运行Docker Quickstart Terminal时会进行Docker环境的初始化,会在VirtualBox中自动创建名字为【default】的linux虚拟机,再此过程中会用到boot2docker.iso镜像文件。默认情况下,启动程序会从GitHub上下载此文件的最新版,但由于文件相对较大且速度不给力,多数情况下会下载失败,造成Docker环境无法启动,如下图:
解决方法:
其实DockerToolbox安装文件自带了boot2docker.iso镜像文件,位于安装目录下(如C:Program FilesDocker Toolbox) ,将此文件拷至E:VirtualBox VMsDefaultcache目录下,然后重新启动,结果还是出错,然后在网络断开的情况下重新启动,便可初始化成功。如下图
其中 【192.168.99.100】是VirtualBox中名字为【default】虚拟机的ip地址。
镜像加速
在国内使用Docker Hub的话就特别慢,为此,我们可以给Docker配置国内的加速地址。我看了一下,DaoCloud和阿里云的镜像加速还不错,另外还有网易的蜂巢。选一个就行了。以DaoClound为例,注册账号,我用的加速地址是:https://alzgoonw.mirror.aliyuncs.com
然后到PowerShell中去依次执行:
docker-machine ssh default sudo sed -i "s|EXTRA_ARGS='|EXTRA_ARGS='--registry-mirror=加速地址 |g" /var/lib/boot2docker/profile exit docker-machine restart default
这样重启Docker后就可以用国内的镜像来加速下载了。
试一下下载一个mysql看看快不快:
docker pull mysql
下载完镜像,我们运行一个容器:
docker run -d -p 3306:3306 --name mysql -e MYSQL_ROOT_PASSWORD=123 mysql:latest
接下来我们打开windows下的mysql客户端,服务器地址填docker虚拟机的IP地址,通过docker-machine env可以看到,我这里是192.168.99.100,然后用户名root,密码123,这样我们就可以连接到docker容器里面的mysql了。
【注意,Docker容器是在VirtualBox的虚拟机里面,不是在Windows里面,所以不能用127.0.0.1访问】
Docker Quickstart Terminal只适合用于初始化安装default,后续管理docker建议还是用powershell
docker-machine 常用操作
#链接到default docker
docker-machine ssh default