在Windows7中Docker Toolbox的坑

最近在数据持久化,因此从Docker入手,下面总结下在Windows7下Docker遇到的问题。mysql

Docker自己在Windows下有两个软件,一个就是Docker,另外一个是Docker Toolbox。这里我选择的是Docker Toolbox,为何呢?参见官方文档:redis

https://blog.docker.com/2015/08/docker-toolbox/sql

首先咱们从官网下载最新版的Windows Docker Toolbox。安装后会安装一个VirtualBox虚拟机,一个Kitematic,这是GUI管理Docker的工具,没有发布正式版,不推荐使用,另外还有就是咱们在命令行下用到的docker-machine和docker命令了。docker

基本使用 安装完成Toolbox后会有一个Docker Quickstart Terminal的快捷方式,双击运行若是报错,那多是由于你已经安装了Hyper-v,因此VirtualBox没法用64位的虚拟机。须要卸载Hyper-v。express

运行后会在Virtualbox中建立一个叫作default的虚拟机,而后颇有可能会卡在waiting for an IP的命令下,而后就死活不动了。个人作法是完全放弃Docker Quickstart Terminal,根本不用这玩意儿,关掉,咱们用PowerShell进行虚拟机的管理。windows

打开PowerShell,输入:服务器

docker-machine lsssh

咱们能够看到咱们当前的Docker虚拟机的状态。若是什么都没有的话,那么咱们可使用如下命令建立一个Docker虚拟机。工具

docker-machine create --driver=virtualbox defaultui

建立完毕后,咱们在用docker-machine ls确认咱们的Docker虚拟机在运行中。

而后使用如下命令得到虚拟机的环境变量:

docker-machine env default

HJIV9ITYQI8S$2OLZIZS)U0.png

按提示来操做。

T916990YNS%4E%{71Y@%@@7.png(每一个机器可能不同,这句操做重要)

这样咱们就把当前的PowerShell和虚拟机里面的Docker Linux创建的链接,接下来就能够在PowerShell中使用docker命令了。

建立docker-compose.yml 文件

version: '3.1'  
services:  
 mongo:  
 image: mongo  
 restart: always  
 ports:  
 - 27017:27017  
 mongo-express:  
 image: mongo-express  
 restart: always  
 ports:  
 - 8081:8081  
 mysql:  
 image: mysql  
 command: --default-authentication-plugin=mysql\_native\_password  
 restart: always  
 environment:  
 MYSQL\_ROOT\_PASSWORD: example  
 ports:  
 - 3306:3306  
 adminer:  
 image: adminer  
 restart: always  
 ports:  
 - 8080:8080  
 redis:  
 image: redis  
 ports:  
 - "6379:6379"

运行docker-compose up。

F_F2$V)9)]DD@ROMPSQIYIO.png

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文件去了。

image

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配置国内的加速地址。我看了一下,DaoCloud和阿里云的镜像加速还不错,另外还有网易的蜂巢。选一个就好了。以DaoClound为例,注册帐号,而后在https://www.daocloud.io/mirror 就能够看到DaoClound提供给您的镜像加速的URL。而后到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访问】

相关文章
相关标签/搜索