工作环境

操作系统:Windows 10 Pro x64

Hyper-V:已卸载。

VMware:已安装。

Virtual Box:无安装。

前言

鉴于Hyper-V在Windows桌面系统下的"弱鸡"表现,包括不仅限于"网络"方面都很"辣鸡",各种不兼容的原因。

我决定(禁用/卸载)Hyper-V,却又不想用其默认的Virtual Box,于是改成最为喜爱的VMware Workstation,作为Docker machine的driver。

以上对于三个虚拟机的好与坏,只是个人亲身使用后的感受,或许没有全面了解过它们的优良之处,请勿喷,可以指教,谢谢。

然而Docker官方并不支持VMware Workstation驱动,不过我从Docker官方指导文档中找到第三方支持:https://docs.docker.com/machine/drivers

正文

访问该驱动的第三方支持,https://github.com/pecigonzalo/docker-machine-vmwareworkstation/releases/latest

下载二进制文件 -- docker-machine-driver-vmwareworkstation.exe,复制到docker-machine.exe的同级目录下,注意:如果你是

1.通过InstallDocker.msi安装的,复制到C:\Program Files\Docker\Docker\resources\bin下。

2.通过DockerToolbox.exe安装的,复制到C:\Program Files\Docker Toolbox下。

2.1.如果是通过DockerToolbox.exe安装的,还需要修改C:\Program Files\Docker Toolbox\start.sh脚本文件内容为:

#!/bin/bash

export PATH="$PATH:/c/Program Files (x86)/VMware/VMware Workstation"

trap '[ "$?" -eq 0 ] || read -p "Looks like something went wrong in step ´$STEP´... Press any key to continue..."' EXIT

VM=${DOCKER_MACHINE_NAME-default}
DOCKER_MACHINE=./docker-machine.exe BLUE='\033[1;34m'
GREEN='\033[0;32m'
NC='\033[0m' if [ ! -f "${DOCKER_MACHINE}" ]; then
echo "Docker Machine is not installed. Please re-run the Toolbox Installer and try again."
exit
fi vmrun.exe list | grep "${VM}" &> /dev/null
VM_EXISTS_CODE=$? set -e STEP="Checking if machine $VM exists"
if [ $VM_EXISTS_CODE -eq ]; then
"${DOCKER_MACHINE}" rm -f "${VM}" &> /dev/null || :
rm -rf ~/.docker/machine/machines/"${VM}"
#set proxy variables if they exists
if [ -n ${HTTP_PROXY+x} ]; then
PROXY_ENV="$PROXY_ENV --engine-env HTTP_PROXY=$HTTP_PROXY"
fi
if [ -n ${HTTPS_PROXY+x} ]; then
PROXY_ENV="$PROXY_ENV --engine-env HTTPS_PROXY=$HTTPS_PROXY"
fi
if [ -n ${NO_PROXY+x} ]; then
PROXY_ENV="$PROXY_ENV --engine-env NO_PROXY=$NO_PROXY"
fi
"${DOCKER_MACHINE}" create -d vmwareworkstation $PROXY_ENV "${VM}"
fi STEP="Checking status on $VM"
VM_STATUS="$(${DOCKER_MACHINE} status ${VM} 2>&1)"
if [ "${VM_STATUS}" != "Running" ]; then
"${DOCKER_MACHINE}" start "${VM}"
yes | "${DOCKER_MACHINE}" regenerate-certs "${VM}"
fi STEP="Setting env"
eval "$(${DOCKER_MACHINE} env --shell=bash ${VM})" STEP="Finalize"
clear
cat << EOF ## .
## ## ## ==
## ## ## ## ## ===
/"""""""""""""""""\___/ ===
~~~ {~~ ~~~~ ~~~ ~~~~ ~~~ ~ / ===- ~~~
\______ o __/
\ \ __/
\____\_______/ EOF
echo -e "${BLUE}docker${NC} is configured to use the ${GREEN}${VM}${NC} machine with IP ${GREEN}$(${DOCKER_MACHINE} ip ${VM})${NC}"
echo "For help getting started, check out the docs at https://docs.docker.com"
echo
cd docker () {
MSYS_NO_PATHCONV= docker.exe "$@"
}
export -f docker if [ $# -eq ]; then
echo "Start interactive shell"
exec "$BASH" --login -i
else
echo "Start shell with command"
exec "$BASH" -c "$*"
fi

3.打开git-bash,输入以下命令:

3.1.docker-machine ls

检查是否有machine实例,如果有,请自行考虑是否卸载它。

3.2.docker-machine stop dev && docker-machine rm dev

暂停并且卸载NAME为dev的machine实例。此处的dev每个人都不同,可能是default或其它,具体看docker-machine ls命令列出来的数据。

3.2.1.docker-machine create --driver=vmwareworkstation dev

创建一个名称为dev的machine实例。

3.2.2.当然了,如果你做了2.1步骤的动作,你也可以不做3.2.1步骤的动作。

而是直接在你的桌面上找到一个名为"Docker Quickstart Terminal"的蓝色Docker命令行图标

,并且双击运行它。

首次运行它时,会检查你是否有创建一个名为"default"的实例,如果有,则直接启动命令操作界面,如果没有,则帮你创建并且初始化一个名为"default"的实例,并且active为默认实例。

当有一个默认的machine实例后,你通过docker命令所做的操作,都是对默认实例的操作。

3.3.docker-machine ls

查看实例列表信息,在这里你可以看到实例的状态信息,包括版本,IP,名称等。

3.4.eval "$(docker-machine env dev)" && docker-machine active

此处两个命令在同一个shell窗口分开执行,或一并执行都可以。

eval "$(docker-machine env dev)"这句话的意思是加载名为"dev"的machine实例的环境变量到当前的shell窗口。

docker-machine active的作用是,从上一句话加载进来的环境变量中获取到要激活的machine实例名称,并且激活它。

激活指定的machine实例为默认实例。一个docker只能有一个被激活的默认实例。

3.5.docker-machine ssh dev

连接到machine实例之后,你可以使用docker命令进行任何受支持的操作...

例如docker push,pull等等....

PS:此处,如果你进行了3.2.2或3.4步骤的操作,可以不需要进行3.5步骤的操作。

直接使用docker命令就可以正常使用docker开发了。

2017.09.20:更新了start.sh的错误

2019.09.01:windows10下,powershell执行不了`eval "$(docker-machine env dev)" && docker-machine active`

可以换个写法:`docker-machine env -shell=powershell dev | Invoke-Expression | docker-machine active`

参考资料

https://docs.docker.com/machine/get-started

https://github.com/pecigonzalo/docker-machine-vmwareworkstation

http://www.cnblogs.com/yjmyzz/p/docker-machine-using-vmware.html

下载资源汇总

InstallDocker.msi下载地址:

https://download.docker.com/win/stable/InstallDocker.msi

https://download.docker.com/win/stable/Docker for Windows Installer.exe

https://download.docker.com/win/edge/Docker for Windows Installer.exe

DockerToolbox.exe下载地址:https://download.docker.com/win/stable/DockerToolbox.exe

https://github.com/docker/toolbox/releases/latest

boot2docker.iso下载地址:https://github.com/boot2docker/boot2docker/releases/latest

docker-machine-driver-vmwareworkstation.exe下载地址:https://github.com/pecigonzalo/docker-machine-vmwareworkstation/releases/latest

Docker for windows on VMware的更多相关文章

  1. Docker for Windows 使用 VMware WorkStation

    一.前言 Docker for Windows 不同于 Docker Toolbox.Docker for Windows 对系统的要求至少为Windows 10专业版,因为它需要Hyper-V的支持 ...

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

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

  3. Windows 10 安装 Docker for Windows

    Docker for Windows是Docker社区版(CE)应用程序. Docker for Windows安装包包括在Windows系统上运行Docker所需的一切. 本主题介绍了预安装注意事项 ...

  4. 使用WSL连接Docker for Windows

    在Windows下安装Docker for Windows Cotana搜索功能,打开Windows的Hype-v功能(注:会影响Virtualbox和Vmware的使用)并重启电脑. 从Docker ...

  5. 使用Docker for Windows初体验

    https://www.baidu.com/link?url=61Kwadwh6h__2Vmjf7lAKVo1RjhsULAqERcMXYnYzkLKrRVpygwBJVnjultH8zbq& ...

  6. 使用WSL连接Docker Server(Windows/Linux)

    在Windows下安装Docker for Windows Cotana搜索功能,打开Windows的Hype-v功能(注:会影响Virtualbox和Vmware的使用)并重启电脑. 从Docker ...

  7. Docker for Windows(一)下载与安装

    一.下载Docker for Windows 下载地址:Docker for Windows 下载完是一个安装程序,双击运行即可.注:如果您的系统不符合运行Docker for Windows的要求, ...

  8. win10下安装使用Docker:Docker for Windows

    一.下载win10下安装docker和桌面管理的工具: 下载地址:Docker for Windows 安装软件学习地址:https://www.runoob.com/docker/docker-tu ...

  9. Docker for Windows使用简介

    在上一篇文章中,通过演练指导的方式,介绍了在Docker中运行ASP.NET Core Web API应用程序的过程.本文将介绍Docker for Windows的使用. 先决条件 前两周时间,Do ...

随机推荐

  1. LeetCode之“数学”:Reverse Integer && Reverse Bits

    1. Reverse Integer 题目链接 题目要求: Reverse digits of an integer. Example1: x = 123, return 321 Example2:  ...

  2. Linux - gcc 的简易用法 (编译、参数与链结)

    # 仅将原始码编译成为目标档,并不制作连结等功能: [root@www ~]# gcc -c hello.c # 会自动的产生 hello.o 这个文件,但是并不会产生 binary 运行档. # 在 ...

  3. 【编程练习】kmp算法代码

    代码来自: http://blog.csdn.net/v_JULY_v #include "StdAfx.h" #include <iostream> using na ...

  4. how tomcat works 总结 三

    第七章 日志记录器 第 7 章包括日志,该组件是用来记录错误信息和其他信息的. 这一章比较简单,类图如下: 根据名字我想大家都能猜出来三个实现类都是做什么的,一个按常规输出到控制台,一个按错误模式输出 ...

  5. 基于event 实现的线程安全的优先队列(python实现)

    event 事件是个很不错的线程同步,以及线程通信的机制,在python的许多源代码中都基于event实现了很多的线程安全,支持并发,线程通信的库 对于优先队列的堆实现,请看<python下实现 ...

  6. jQuery如何停止元素的animate动画,还有怎样判断是否处于动画状态

    jquery的animation会自动进入队列,就出现了一个问题,这些动画会一一执行完成,而我们实际的本意是当鼠标移开的时候动画即终止. 停止元素的动画方法:stop()语法结构:stop([clea ...

  7. 关于jasperreport对应java打印机的解决方案

    对于jasperreport打印这个功能,遇到了一大堆问题,也只能一点一点解决我: 1.现在我用的是jasperreport.jar是4.6版本. (1).因为网上查到:6.0以上版本已经不再支持ja ...

  8. Python list 两个不等长列表交叉合并

    遇到一个需求,需要对两个长度不一定相等的列表进行交叉合并.像拉拉链一样(两边的拉链不一定相等). 如: a = [1, 3, 5] b = [2, 4, 6, 8] 需将a, b 合并为 c c = ...

  9. 【.Net架构】BIM软件架构03:Web管控平台MVC架构

    一.前言        上一篇讲述的是将BIM平台后台架构CoreService.sln,该解决方案主要作用是对管控平台的核心业务进行封装,然后让前端的ApiController去调用该解决方案中的对 ...

  10. 【CloverETL培训】题目

    具体要求: 导入: 1.在CRM中,创建相应物理表,存储Follow/Binding记录.openid作为逻辑主键 2.Follow/Binding导入相互不影响,一个失败另外一个继续执行 3.Fol ...