工作环境

操作系统: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. adb shell后出现error解决方案

    解决办法: 解决办法: 1.adb kill-server 2.adb start-server 3.adb remount 4.adb shell 一般情况下都可以在此启动adb相关

  2. Android Hal层简要分析

    Android Hal层简要分析 Android Hal层(即 Hardware Abstraction Layer)是Google开发的Android系统里上层应用对底层硬件操作屏蔽的一个软件层次, ...

  3. Treemap 有序的hashmap。用于排序

    TreeMap:有固定顺序的hashmap.在需要排序的Map时候才用TreeMap. Map.在数组中我们是通过数组下标来对其内容索引的,键值对. HashMap HashMap 用哈希码快速定位一 ...

  4. Java Class Version 研究

    一:要解决的问题 我们在尝鲜 JDK1.5 的时候,相信不少人遇到过 Unsupported major.minor version 49.0 错误,当时定会茫然不知所措.因为刚开始那会儿,网上与此相 ...

  5. Ajax 模糊查询的简单实现

    类似于百度的搜索引擎模糊查询功能,不过百度的模糊查询功能更强大,这里简单实现下. 要实现模糊查询,首先要做的就是把SQL写好.话不多少,直接贴代码了! JSP页面: <%@ page langu ...

  6. 存储引擎-Buffered tree

    Buffered-tree 也称为COLA,即cache-oblivious,可以不需要知道具体内存大小和一个块的大小,使用一套逻辑进行处理,因此内存大小可知,内存可能被临时占用去做其它事情. Buf ...

  7. Java Socket:Java-NIO-ServerSocketChannel

    ServerSocketChannel 让我们从最简单的ServerSocketChannel来开始对socket通道类的讨论 ServerSocketChannel是一个基于通道的socket监听器 ...

  8. 演进之美,越来越美:三分钟看尽 iOS 1 ~ iOS 8 的进化史

    演进之美,越来越美:三分钟看尽 iOS 1 ~ iOS 8 的进化史 原文出处: 少数派 9 月 18 日苹果就将推出 iOS 8 正式版了,从 2007 年发布第一代 iPhone 时搭载在 iPh ...

  9. Java 8 Stream

    1.关于Java8部分新特性介绍 Java8的新特性很多,在此就不一一介绍了,这里只说一下我自己在工作用用得比较多的几点: 1.1.Lambda表达式 Lambda允许把函数作为一个方法的参数(函数作 ...

  10. Day2_元组_字典_集合_字符编码_文件处理

    元组: 作用:存多个值,元组不可变,主要用来读 age=(11,22,33,44,55) print(age[2]) #取出元组内的值 print(age[1:4]) #取出元组内的某些值 print ...