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. centos6.7安装系统后看不到网卡无法配置IP的解决办法

    新安装centos6.7后发现/etc/sysconfig/network-scripts目录下没有eth0的网卡配置,通过ifconfig可以看到eth0的硬件地址 于是新建网卡输入一下内容 # c ...

  2. Oracle数据库操作基本语法

    创建表 SQL>create table classes(        classId number(2),        cname varchar2(40),        birthda ...

  3. Day4--------------对文件的权限管理

    一.文件权限 ls -l         显示当前文件详细信息 例: -rw-r--rwx.1 root root 1415 11月 9 20:21 anaconda-ks.cfg 依次顺序为:权限信 ...

  4. iOS 中的Certificate,Provisioning Profile 的一些注意 (不断完善中)

    注册apple id 有1年多了,这些概念还是模模糊糊的,决定在这里总结一下. 请参阅官方文档 App Distribution Guide code singing的作用如下: Code signi ...

  5. 如何从现有版本升级到element UI2.0?使用npm-check-updates

    转:https://blog.csdn.net/wojiaomaxiaoqi/article/details/78428738 登录element UI官网时提示2.0已经正式发布了,Element ...

  6. python易错题之作用域

    name = "lzl" def f1(): print(name) def f2(): name = "eric" f1() f2() //结果为 lzl 记 ...

  7. python 全栈开发,Day130(多玩具端的遥控功能, 简单的双向聊天,聊天记录存放数据库,消息提醒,玩具主动发起消息,玩具主动发起点播)

    先下载github代码,下面的操作,都是基于这个版本来的! https://github.com/987334176/Intelligent_toy/archive/v1.3.zip 注意:由于涉及到 ...

  8. python 全栈开发,Day51(常用内置对象,函数,伪数组 arguments,关于DOM的事件操作,DOM介绍)

    昨日内容回顾 1.三种引入方式 1.行内js <div onclick = 'add(3,4)'></div> //声明一个函数 function add(a,b){ } 2. ...

  9. canvas绘制简易动画

    在canvas画布中制作动画相对来说很简单,实际上就是不断变化的坐标.擦除.重绘的过程 1.使用setInterval方法设置动画的间隔时间. setInterval(code,millisec) s ...

  10. Spring之对象依赖关系(依赖注入Dependency Injection)

    承接上篇: Spring中,如何给对象的属性赋值: 1:通过构造函数,如下所示: <!-- 1:构造函数赋初始值 --><bean id="user1" clas ...