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. 停止现有的所有虚拟机,移动至新位置,重新启动虚拟机

参考文章

在Windows环境下使用docker的更多相关文章

  1. windows 环境下搭建docker私有仓库

    windows 环境下搭建docker私有仓库 1.在公用仓库中pull仓库镜像 docker pull regitry 2.启动仓库镜像 //-d意思是后台运行,-p是做端口映射,这里是将本地的50 ...

  2. Windows 环境下 Docker 使用及配置

    原文引用: https://www.cnblogs.com/moashen/p/8067612.html 我们可以使用以下两种方式在Windows环境下使用docker: 1. 直接安装: Docke ...

  3. docker在Windows环境下的安装

    Windows环境下安装 docker有两种安装包 一.Docker for Windows(目前只能在 64 位的 Windows10 专业版.企业版.教育版下才能安装) 二.Docker Tool ...

  4. 【Docker】win10环境下安装Docker

    一.进入Docker官网 首先先到Docker官网下载最新官方Docker for Windows:Docker下载 在官网内可以查看到Docker的开发文档. 根据官网提示,Windows环境下下载 ...

  5. 关于docker在windows环境下运行的第一次体验

    关于docker在windows环境下执行的原理 1.1.           首先是Docker Quickstart启动,如果在虚拟机Oracle VM VirtualBox不存在default虚 ...

  6. Docker学习<一>--初体验Windows环境下安装

    背景 今天想试用spring boot与jwt协议的实现,配套就需要使用redis,但redis似乎windows环境版本部署起来不是那么舒心,果断尝试使用docker. 下载 下载地址: 稳定版:h ...

  7. Windows环境下docker的安装与配置

    Docker是一种容器技术,可以在操作系统中隔离出若干个独立的程序运行环境,这些环境既可以共享宿主机的资源,另一方面他们之间相互独立,互不影响,也不会对宿主机的环境产生影响.与虚拟化技术不同的是,Do ...

  8. Windows环境下写Linux sh脚本的一次挖坑和填坑

    最近在研究Docker集群和安装的时候,需要准备若干台机器.所以我为节约时间,打算批量复制VM机器,然后用sh脚本命令执行机器名称和IP等基础配置信息的修改. 具体操作:我在windows环境下,用N ...

  9. 海纳百川无所不容,Win10环境下使用Docker容器式部署前后端分离项目Django+Vue.js

    原文转载自「刘悦的技术博客」https://v3u.cn/a_id_179 随着现代化产品研发的不断推进,我们会发现,几乎每个产品线都会包含功能各异的服务,而且服务与服务之间存在也会存在着错综复杂的依 ...

随机推荐

  1. 如何用jQuery获得select的值

    如何用jQuery获得select的值,在网上找了看了一下,下面将总结一下: 1.获取第一个option的值        $('#test option:first').val(); 2.最后一个o ...

  2. Android天气预报

    Android天气预报 1.指定 WebService 的命名空间和调用方法import org.ksoap2.serialization.SoapObject;private static fina ...

  3. TOMCAT服务器配置域名

    最近做了个网站,用的是web'服务器是tomcat,框架式SpringMVC,功能做好后,就准备上线使用了, 手上已经有域名以及一台服务器,已经绑定好ip了,剩下的也就是配置Tomcat了,比较简单, ...

  4. ubuntu预装的是vim tiny版本

    可以安装vim full版本,在full版本下键盘正常,安装好后同样使用vi命令.安装vim: ubuntu预装的是vim tiny版本,而需要的是vim full版本.执安装vim full版本:$ ...

  5. html----不常见标签

    控制文字滚动 <!-- direction="right up down left" --> <!-- behavior:滚动方式(包括3个值:scroll.sl ...

  6. (八)CXF添加自定义拦截器

    前面我们说到CXF添加内置的拦截器,今天的话,我们来讲下如何添加自定义拦截器: 我们的实例是客户端访问服务端webservice接口要加权限认证. 我们思路先说下.我们可以通过在SOAP消息的Head ...

  7. WebApi的调用-2.后台调用

    httpClient调用方式 namespace SOA.Common { //httpClient调用WebApi public class HttpClientHelper { public st ...

  8. [ZJOI2006]书架

    链接:https://www.luogu.org/problemnew/show/P2596 题解: 写了两天的平衡树终于大概弄好了所有模板(模板不熟写错debug真是要死) 对于放在头尾,只需要删除 ...

  9. ubuntu16.04通过apt-get方式安装MongoDB

    虽然Ubuntu本身也提供MongoDB安装包,但往往官网的安装包版本更新. hupeng@hupeng-vm:~$ apt-cache show mongodb-clients Package: m ...

  10. Enrolment API

    由于Moodle 2.0有一个用户注册的新概念,它们完全独立于角色和功能.能力通常与注册状态结合使用. 什么是注册? 登记的用户可以完全参加一门课程.活跃用户注册允许用户输入课程.只有注册的用户可能是 ...