在Windows环境下使用docker

Widows下的Docker工具有两个:Docker Toolbox,和Docker Desktop,其中后者是在win10下才能使用的,提供了更强大的功能。由于我个人的电脑是win7环境,用的就是docker toolbox。

Windows的docker的原理是:利用虚拟机虚拟一个linux,win7下是virtualbox, win10下是hyperv,然后在这个虚拟机中跑docker。其实在linux上也有这种方式,具体可以参考docker-machine,工作模式如下。

  1. 将docker分为docker client和docker server两部分
  2. docker client通过docker-machine命令在docker server中创建docker虚拟机
  3. docker client将docker命令关联到docker虚拟机上,此时docker命令就是直接下发到相应的docker虚拟机了

对于docker toolbox来说,docker client对应的是本机,而docker server对应的则是虚拟机了。不过docker machine本身是一个比较灵活的管理方式,可docker server可以是虚拟机,可以是实体机,也可以是云服务器。

PS:现在windows也有原生可以跑win32程序的docker了,具体可以参考这篇文章:BUILD AND RUN YOUR FIRST DOCKER WINDOWS SERVER CONTAINER

创建虚拟机

创建虚拟机最简单的命令形式为

  docker-machine create myvm

创建完成后,就在VirtualBox中增加了一个虚拟机。它会使用一个Boot2Docker的镜像,这是一个专门优化的linux版本,体积较小,方便发布。不过第一次创建的时候貌似会远程下载该镜像,虽然不大,但最好还是使用相应不可说的工具。  

除了这个最基础的命令外,也可以在创建的时候指定一些其它参数,如内存、磁盘空间、cpu个数等。具体请参看docker-machine命令行。对于已经创建好的虚拟机,如果要修改其参数,也可以直接在VirtualBox中修改。(一个比较常见的操作就是移动虚拟磁盘的存储位置)

查看虚拟机

常见好虚拟机后,可以通过docker-machine env命令查看虚拟机基本环境信息。

    > docker-machine env myvm
    SET DOCKER_TLS_VERIFY=1
    SET DOCKER_HOST=tcp://192.168.99.100:2376
    SET DOCKER_CERT_PATH=C:\Users\XXX\.docker\machine\machines\myvm
    SET DOCKER_MACHINE_NAME=myvm
    SET COMPOSE_CONVERT_WINDOWS_PATHS=true
    REM Run this command to configure your shell:
    REM @FOR /f "tokens=*" %i IN ('docker-machine env myvm') DO @%i

 

关联虚拟机

常见好虚拟机后,docker命令就直接关联到虚拟机中了。一个问题是,如何知道docker命令关联到那个虚拟机的。我们可以通过docker-machine ls命令查看当前docker虚拟机状态。

    > docker-machine ls
    NAME ACTIVE DRIVER STATE URL SWARM DOCKER ERRORS
    default * virtualbox Running tcp://192.168.99.102:2376 v18.09.2
    myvm - virtualbox Running tcp://192.168.99.100:2376 v18.09.2

可以看出,当前活跃的是名为default的虚拟机。

那么,我们如何修改活跃的虚拟机呢,实际上docker-toolbox会在系统中设置一堆环境变量:

    DOCKER_HOST=tcp://192.168.99.102:2376
    DOCKER_MACHINE_NAME=default
    DOCKER_TLS_VERIFY=1
    DOCKER_TOOLBOX_INSTALL_PATH=C:\Program Files\Docker Toolbox

docker工具是通过这些环境变量判断当前活跃的虚拟机的。也就是说,只要修改该环境变量参数即可切换虚拟机。敏锐的人可能会发现这个和docker-machine env中的输出非常类似,并且docker-machine env中最后还告诉你了如何应用这些环境变量。

    REM Run this command to configure your shell:
    REM @FOR /f "tokens=*" %i IN ('docker-machine env myvm') DO @%i

根据其提示,直接使用@FOR /f "tokens=*" %i IN ('docker-machine env myvm') DO @%i命令即可。

关联好虚拟机后,剩下的使用方式就和本地docker使用一样了。

 

虚拟机命令行

创建好虚拟机后,也可以通过docker-machine ssh myvm命令进入其虚拟机命令行,从而进行虚拟机相关操作。

不过这个命令行只有zsh,有的终端下会出现乱码(默认的控制台就有乱码),此时可以通过使用cmder等终端来解决。

 

设置国内镜像源

设置国内镜像源相信是广大国内用户必不可少的一步,对于Boot2Docker这个linux的设置方式如下:

    docker-machine ssh default
    sudo sed -i "s|EXTRA_ARGS='|EXTRA_ARGS='--registry-mirror=https://registry.docker-cn.com |g" /var/lib/boot2docker/profile
    exit
    docker-machine restart default

 

设置共享文件夹

很多时候,我们想让docker的数据文件夹写入本地windows的文件系统。解决方案比较简单:由于dock server是在virtualbox的虚拟机,只需要首先挂在一个共享文件夹,然后启动docker的时候,将其写入那个共享文件夹在虚拟机中的路径即可。

其实docker toolbox本身也想到了这一点,默认就将C:\Users给共享给virtualbox了,映射成了文件夹/c/Users。不过这种方式往往不符合我们的使用习惯,这个时候需要自己在virtualbox中建文件夹了。(估计virtualbox也有建共享文件夹的api,如果能用命令行的话就方便些,后期找到了再补充)

 

修改默认docker虚拟机的位置

docker虚拟机默认创建在c盘,有的有洁癖的人还是不是很习惯的,想自定义其存储位置。docker toolbox 没有提供手动设置的方式,但我们可以通过修改配置项的方式来实现我们的目的。

  1. 在Windows的系统环境添加MACHINE_STORAGE_PATH ,指向自定义虚拟机的位置,如D:\VM\machines
  2. 复制boot2docker.iso到虚拟机的位置同级目录cache上(D:\VM\cache),如果不是最新的话需要下载最新。
  3. 停止现有的所有虚拟机,移动至新位置,重新启动虚拟机

 

参考文章

 

猜你喜欢

转载自www.cnblogs.com/TianFang/p/10391371.html