在Windows环境下使用docker
Widows下的Docker工具有两个:Docker Toolbox,和Docker Desktop,其中后者是在win10下才能使用的,提供了更强大的功能。由于我个人的电脑是win7环境,用的就是docker toolbox。
Windows的docker的原理是:利用虚拟机虚拟一个linux,win7下是virtualbox, win10下是hyperv,然后在这个虚拟机中跑docker。其实在linux上也有这种方式,具体可以参考docker-machine,工作模式如下。
- 将docker分为docker client和docker server两部分
- docker client通过docker-machine命令在docker server中创建docker虚拟机
- 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 没有提供手动设置的方式,但我们可以通过修改配置项的方式来实现我们的目的。
- 在Windows的系统环境添加MACHINE_STORAGE_PATH ,指向自定义虚拟机的位置,如D:\VM\machines
- 复制boot2docker.iso到虚拟机的位置同级目录cache上(D:\VM\cache),如果不是最新的话需要下载最新。
- 停止现有的所有虚拟机,移动至新位置,重新启动虚拟机
参考文章
在Windows环境下使用docker的更多相关文章
- windows 环境下搭建docker私有仓库
windows 环境下搭建docker私有仓库 1.在公用仓库中pull仓库镜像 docker pull regitry 2.启动仓库镜像 //-d意思是后台运行,-p是做端口映射,这里是将本地的50 ...
- Windows 环境下 Docker 使用及配置
原文引用: https://www.cnblogs.com/moashen/p/8067612.html 我们可以使用以下两种方式在Windows环境下使用docker: 1. 直接安装: Docke ...
- docker在Windows环境下的安装
Windows环境下安装 docker有两种安装包 一.Docker for Windows(目前只能在 64 位的 Windows10 专业版.企业版.教育版下才能安装) 二.Docker Tool ...
- 【Docker】win10环境下安装Docker
一.进入Docker官网 首先先到Docker官网下载最新官方Docker for Windows:Docker下载 在官网内可以查看到Docker的开发文档. 根据官网提示,Windows环境下下载 ...
- 关于docker在windows环境下运行的第一次体验
关于docker在windows环境下执行的原理 1.1. 首先是Docker Quickstart启动,如果在虚拟机Oracle VM VirtualBox不存在default虚 ...
- Docker学习<一>--初体验Windows环境下安装
背景 今天想试用spring boot与jwt协议的实现,配套就需要使用redis,但redis似乎windows环境版本部署起来不是那么舒心,果断尝试使用docker. 下载 下载地址: 稳定版:h ...
- Windows环境下docker的安装与配置
Docker是一种容器技术,可以在操作系统中隔离出若干个独立的程序运行环境,这些环境既可以共享宿主机的资源,另一方面他们之间相互独立,互不影响,也不会对宿主机的环境产生影响.与虚拟化技术不同的是,Do ...
- Windows环境下写Linux sh脚本的一次挖坑和填坑
最近在研究Docker集群和安装的时候,需要准备若干台机器.所以我为节约时间,打算批量复制VM机器,然后用sh脚本命令执行机器名称和IP等基础配置信息的修改. 具体操作:我在windows环境下,用N ...
- 海纳百川无所不容,Win10环境下使用Docker容器式部署前后端分离项目Django+Vue.js
原文转载自「刘悦的技术博客」https://v3u.cn/a_id_179 随着现代化产品研发的不断推进,我们会发现,几乎每个产品线都会包含功能各异的服务,而且服务与服务之间存在也会存在着错综复杂的依 ...
随机推荐
- sipML5聊天功能实现
一.环境说明:在阅读sipML5的API文档时,发现它具有聊天的功能,于是在sipML5的源码中进行设定,实现了注册之后可以英文聊天(中文聊天需要在FreeSWITCh中进行设定). 二.具体配置: ...
- vue系列之项目打包
vue完成项目后,如何打包成静态文件,并且用Node调试 打包 1.修改config里面的index.js里面的productionSourceMap为false,默认情况是true(true代表打包 ...
- Java基础100 待续
1.待续 原创作者:DSHORE 作者主页:http://www.cnblogs.com/dshore123/ 原文出自:https://www.cnblogs.com/dshore123/p/107 ...
- mysql5.7安装教程图解
启动安装包: 左边是你电脑上可以连接到mysql的软件,比如Visual Studio,Eclipse,PyCharm等,中间是需求的版本或者额外组件,右边是状态. 选择一个选项,然后点击下面的che ...
- impress.js
介绍一下 impress.js是一个非常炫酷的幻灯片展示框架,依靠CSS3技术. impress.js使用起来非常简单,下面就来简单介绍一下其用法. Start 首先,当然要引入impress.js. ...
- python下图像读取方式以及效率对比
https://zhuanlan.zhihu.com/p/30383580 opencv速度最快,值得注意的是mxnet的采用多线程读取的方式,可大大加速
- 父窗口中获取iframe中的元素
js 在父窗口中获取iframe中的元素 1. 格式:window.frames["iframe的name值"].document.getElementById("ifr ...
- [翻译] 一个kubernetes网络简明教程[Part 1]
一个kubernetes网络简明教程[Part 1] 翻译: icebug 所有我学到的关于kubernetes网络的事情 你可能已经在kubernetes集群当中跑了一堆服务并且正在享受其带来的好处 ...
- hdu 2680 多起点一终点
注意这是一个有向图! 多起点,一终点 反过来,看成一个起点,多个终点,找最短路 因为是有向图 所以u->v 要也要反过来成为v->u Sample Input5 8 5 //结点数 边数 ...
- F 多重背包 判断能否刚好装满
Description 有n种不同大小的数字,每种各个.判断是否可以从这些数字之中选出若干使它们的和恰好为K. Input 首先是一个正整数T(1<=T<=100)接下来是T组数据每组数据 ...