共计 3326 个字符,预计需要花费 9 分钟才能阅读完成。
最近在研究虚拟化,容器和大数据,所以从 Docker 入手,下面介绍一下在 Windows 下怎么玩转 Docker。
Docker 本身在 Windows 下有两个软件,一个就是 Docker,另一个是 Docker Toolbox。这里我选择的是 Docker Toolbox,为什么呢?参见官方文档:
https://blog.docker.com/2015/08/docker-toolbox/
首先我们从官网下载最新版的 Windows Docker Toolbox。安装后会安装一个 VirtualBox 虚拟机,一个 Kitematic,这是 GUI 管理 Docker 的工具,没有发布正式版,不推荐使用,另外还有就是我们在命令行下用到的 docker-machine 和 docker 命令了。
基本使用
安装完成 Toolbox 后会有一个 Docker Quickstart Terminal 的快捷方式,双击运行如果报错,那可能是因为你已经安装了 Hyper-v,所以 VirtualBox 无法用 64 位的虚拟机。需要卸载 Hyper-v。
运行后会在 Virtualbox 中创建一个叫做 default 的虚拟机,然后很有可能会卡在 waiting for an IP 的命令下,然后就死活不动了。我的做法是彻底放弃 Docker Quickstart Terminal,根本不用这玩意儿,关掉,我们用 PowerShell 进行虚拟机的管理。
打开 PowerShell,输入:
docker-machine ls
我们可以看到我们当前的 Docker 虚拟机的状态。如果什么都没有的话,那么我们可以使用以下命令创建一个 Docker 虚拟机。
docker-machine create –driver=virtualbox default
创建完毕后,我们在用 docker-machine ls 确认我们的 Docker 虚拟机在运行中。
然后使用以下命令获得虚拟机的环境变量:
docker-machine env default
然后再输入:
docker-machine env default | Invoke-Expression
这样我们就把当前的 PowerShell 和虚拟机里面的 Docker Linux 建立的连接,接下来就可以在 PowerShell 中使用 docker 命令了。
比如我们要查看当前有哪些镜像:
docker images
当前有哪些容器:
docker ps –a
其他各种 docker 命令我就不在这里累述了。
Docker 虚拟机文件地址修改
默认情况下,docker-machine 创建的虚拟机文件,是保存在 C 盘的 C:\Users\ 用户名 \.docker\machine\machines\default 目录下的,如果下载和使用的镜像过多,那么必然导致该文件夹膨胀过大,如果 C 盘比较吃紧,那么我们就得考虑把该虚拟机移到另一个盘上。具体操作如下:
1. 使用 docker-machine stop default 停掉 Docker 的虚拟机。
2. 打开 VirtualBox,选择“管理”菜单下的“虚拟介质管理”,我们可以看到 Docker 虚拟机用的虚拟硬盘的文件 disk。
3. 选中“disk”,然后点击菜单中的“复制”命令,根据向导,把当前的 disk 复制到另一个盘上面去。
4. 回到 VirtualBox 主界面,右键“default”这个虚拟机,选择“设置”命令,在弹出的窗口中选择“存储”选项。
5. 把 disk 从“控制器 SATA”中删除,然后重新添加我们刚才复制到另外一个磁盘上的那个文件。
这是我设置好后的界面,可以看到我在步骤 3 复制的时候,复制到 E:\VirtualBox\default\dockerdisk.vdi 文件去了。
6. 确定,回到 PowerShell,我们使用 docker-machine start default 就可以启动新地址的 Docker 虚拟机了。确保新磁盘的虚拟机没有问题。就可以把 C 盘那个 disk 文件删除了。
【注意:不要在 Window 中直接去复制粘贴 disk 文件,这样会在步骤 5 的时候报错的,报错的内容如下,所以一定要在 VirtualBox 中去复制!】
Failed to open the hard disk file D:\Docker\boot2docker-vm\boot2docker-vm.vmdk. Cannot register the hard disk ‘D:\Docker\boot2docker-vm\boot2docker-vm.vmdk’ {9a4ed2ae-40f7-4445-8615-a59dccb2905c} because a hard disk C:\Users\ 用户名 \.docker\machine\machines\default\disk.vmdk’ with UUID {9a4ed2ae-40f7-4445-8615-a59dccb2905c} already exists. Result Code: E_INVALIDARG (0x80070057) Component: VirtualBox Interface: IVirtualBox {fafa4e17-1ee2-4905-a10e-fe7c18bf5554} Callee RC: VBOX_E_OBJECT_NOT_FOUND (0x80BB0001)
镜像加速
在国内使用 Docker Hub 的话就特别慢,为此,我们可以给 Docker 配置国内的加速地址。然后到 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 相关教程见以下内容:
Docker 安装应用(CentOS 6.5_x64) http://www.linuxidc.com/Linux/2014-07/104595.htm
Ubuntu 14.04 安装 Docker http://www.linuxidc.com/linux/2014-08/105656.htm
Ubuntu 使用 VNC 运行基于 Docker 的桌面系统 http://www.linuxidc.com/Linux/2015-08/121170.htm
阿里云 CentOS 6.5 模板上安装 Docker http://www.linuxidc.com/Linux/2014-11/109107.htm
Ubuntu 15.04 下安装 Docker http://www.linuxidc.com/Linux/2015-07/120444.htm
在 Ubuntu Trusty 14.04 (LTS) (64-bit)安装 Docker http://www.linuxidc.com/Linux/2014-10/108184.htm
在 Ubuntu 15.04 上如何安装 Docker 及基本用法 http://www.linuxidc.com/Linux/2015-09/122885.htm
Docker 的详细介绍:请点这里
Docker 的下载地址:请点这里
本文永久更新链接地址:http://www.linuxidc.com/Linux/2016-12/138565.htm