Docker for windows on VMware
工作环境
操作系统: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的更多相关文章
- Docker for Windows 使用 VMware WorkStation
一.前言 Docker for Windows 不同于 Docker Toolbox.Docker for Windows 对系统的要求至少为Windows 10专业版,因为它需要Hyper-V的支持 ...
- 关于docker在windows环境下运行的第一次体验
关于docker在windows环境下执行的原理 1.1. 首先是Docker Quickstart启动,如果在虚拟机Oracle VM VirtualBox不存在default虚 ...
- Windows 10 安装 Docker for Windows
Docker for Windows是Docker社区版(CE)应用程序. Docker for Windows安装包包括在Windows系统上运行Docker所需的一切. 本主题介绍了预安装注意事项 ...
- 使用WSL连接Docker for Windows
在Windows下安装Docker for Windows Cotana搜索功能,打开Windows的Hype-v功能(注:会影响Virtualbox和Vmware的使用)并重启电脑. 从Docker ...
- 使用Docker for Windows初体验
https://www.baidu.com/link?url=61Kwadwh6h__2Vmjf7lAKVo1RjhsULAqERcMXYnYzkLKrRVpygwBJVnjultH8zbq& ...
- 使用WSL连接Docker Server(Windows/Linux)
在Windows下安装Docker for Windows Cotana搜索功能,打开Windows的Hype-v功能(注:会影响Virtualbox和Vmware的使用)并重启电脑. 从Docker ...
- Docker for Windows(一)下载与安装
一.下载Docker for Windows 下载地址:Docker for Windows 下载完是一个安装程序,双击运行即可.注:如果您的系统不符合运行Docker for Windows的要求, ...
- win10下安装使用Docker:Docker for Windows
一.下载win10下安装docker和桌面管理的工具: 下载地址:Docker for Windows 安装软件学习地址:https://www.runoob.com/docker/docker-tu ...
- Docker for Windows使用简介
在上一篇文章中,通过演练指导的方式,介绍了在Docker中运行ASP.NET Core Web API应用程序的过程.本文将介绍Docker for Windows的使用. 先决条件 前两周时间,Do ...
随机推荐
- Unity 数据Json格式的转换
把对象转换为字节序列的过程称为对象的序列化. 把字节序列化恢复为对象过程称为对象的反序列化. JSON格式的转换,是一大神给我说的,让我拿来存储数据库时对一些数据的处理,感觉特别好用.但是我并没有深入 ...
- OpenCV OpenGL手写字符识别
另外一篇文章地址:这个比较详细,但是程序略显简单,现在这个程序是比较复杂的 http://blog.csdn.net/wangyaninglm/article/details/17091901 整个项 ...
- obj-c利用dispatch库并发示例
我们首先写一个纯C的程序,代码的功能为显示指定范围整数中素数的个数: #include <stdio.h> #include <stdlib.h> #include <s ...
- Mina源码阅读笔记(二)- IoBuffer的封装
在阅读IoBuffer源码之前,我们先看Mina对IoBuffer的描述:A byte buffer used by MINA applications. This is a replacement ...
- nasm中的表达式
nasm表达式支持2个特殊的记号 $和$$;前者标识其所在源码行的开始处地址,所以你可以这样写死循环: jmp $ 而后者标识当前段开始处的地址,你可以通过: $-$$ 找出当前代码在段内的偏移. n ...
- obj-c编程15[Cocoa实例04]:基于Core Data的多文档程序示例[未完待续]
上一个例子我们使用的模式数据实际上是基于一个Person数组,现在我们看一下如何使用Cocoa中的Core Data框架支持,几乎不用写一行代码,完成模式数据的建立. 我们这里模式的元素使用的是Car ...
- css左侧固定宽度右侧自适应
左侧固定宽,右侧自适应屏幕宽: 左右两列,等高布局: 左右两列要求有最小高度,例如:200px;(当内容超出200时,会自动以等高的方式增高) 要求不用JS或CSS行为实现: 仔细分析试题要求,要达到 ...
- angularjs指令中的compile与link函数详解
这篇文章主要介绍了angularjs指令中的compile与link函数详解,本文同时诉大家complie,pre-link,post-link的用法与区别等内容,需要的朋友可以参考下 通常大家在 ...
- Xshell 链接 Could not connect to '192.168.80.129' (port 22): Connection failed
在使用Xshell链接虚拟机VM里面的Linux的时候.链接失败,报 Could not connect to ): Connection failed 解决步骤: 1.重启VM.Linux.Xshe ...
- 听《津津乐道》ThinkPad专题节目有感
自2011年使用Mac以来,就没怎么想过要再换一个windows使用,可是前几天听了<津津乐道>播客节目,主播朱峰讲了ThinkPad的使用经历,这个倒是让我回想起第一次见到IBM电脑时的 ...