在Windows上学习Docker和Kubernetes,开始的时候会让你觉得无从下手。最起码安装好这些软件都不是一件容易的事情。实际上,你应该对Docker和Kubernetes相当熟悉了才知道如何选择安装时启用哪些参数选项。

但是不要担心!

这篇文章就是为在Winodws上刚刚入门容器和Kubernetes的同学而准备的。

你将会学习到如何做出正确的选择来搭建Windows上的容器开发环境。

让我们从Docker说起。

你正在使用Windows 10 Home版?你将无法运行Docker for Windows

当Docker的开发者们决定在Winodows上实现Docker时,他们选择了Hyper-V作为虚拟化技术。这个优点十分明显:优秀的性能和原生的hypvervisor。

不幸的是并不是所有的Windows版本带Hyper-V支持。

如果你正在使用Windows 10 home版或者Student版,那么你就中招了。你将无法安装和运行Docker for Windows。

但是先别失望。

你有许多基于Docker Machine的替代品可用,例如Docker toolbox或者minikube。

Docker Machine的工作方式很简单:有一个VM装好了Linux和Docker给你。你可以从你的主机连到虚拟机上的Docker deamon。

Minikube可以说是基于Docker Machine的最有趣的VM之一——你可以在里面运行Kubernetes集群。

事实上,minikube是一个运行Docker和Kubernetes的VM。它通常是用来单独运行Kubernetes的,但是你也可以用它来跑Docker容器。

你可能不会拥有Docker for Windows那样的速度,但是毕竟你不需要Hyper-V就能够构建和运行容器了。

有了Windows 10 Pro,Docker for Windows是最佳选择(除了特殊情况)

你有最新的Win 10 Pro,你可以安装Docker for Windows。 你拥有了优秀的性能和开发者体验,一切都搞定了,是吗?

答案是不一定!

Docker for Windows使用的hypvervisor是相当强大的——它属于Type-1 hypervisor。 它确实很强大但是它却无法与Virtualbox这样的Type-2 hypervisor一起工作。

你不能在同一台机器上同时运行Type 1和Type 2的hypervisor。换句话说,如果你运行Docker for Windows,那你就无法启动VirtualBox里面的VM了。

这跟你的设置相关,影响可大可小。

如果你已经完全使用容器化了,你就不需要担心VM——过时的东西。

但是如果你仍然要使用VM,以及类似Vagrant这样的工具,那你可能就有麻烦了。

你可以随意的启用或者关闭Hyper-V hypervisor,但是你要重启机器。

如果你频繁的要从容器切换到VM,那可能使用minikube更方便。当你从容器切换到VM的时候就不用重启电脑了。 缺点就是你没办法得到更高性能和更好体验。

最后,如果你要运行Windows容器——base镜像是来自于Windows的容器——Docker for Windows是唯一选择。 你只能使用Windows 10 Pro或者Enterprise版。

运行一个本地的Kubernetes集群

如果你想要跑一个本地的Kubernetes,那你应该考虑minikube。

Minikube是一个预装有嵌入式Linux(Buildroot)和Docker daemon的VM。

它是一个最小完整的Kubernetes环境。

Minikube的VM可以通过VirtualBox或者Hyper-V来运行(当然也有其他选择)。如果你已经有Hyper-V也要用它来跑Docker和minikube的话就会很方便。

当然如果你不能跑Hyper-V也没关系,你可以用VirtualBox实现同样的功能。

有很多的选择和权衡,下图列出了一些:

前提

你可以从官网上下载安装Docker for Windows、Docker Toolbox、VirtualBox、kubectl、Docker CLI等,但是相当麻烦。

你要去到官网找到正确的下载地址,选择正确的版本,下载安装,最后加到你的path里面去。

这当然可行,但是我敢肯定你更愿意把时间花在编码而不是从网站上下载安装软件包上。

使用Chocolatey

Chocolatey是一个Widnows的包管理器。你告诉它想要安装的包,它会为你装好。你把软件安装的活外包给它了。

安装Chocolatey很简单,你可以在它的官方网站找到步骤。简单来说,就这么几步:

1、以管理员启动cmd.exe

2、执行下面这个命令:

@"%SystemRoot%\System32\WindowsPowerShell\v1.0\powershell.exe" -NoProfile -InputFormat None -ExecutionPolicy Bypass -Command "iex ((New-Object System.Net.WebClient).DownloadString('https://chocolatey.org/install.ps1'))" && SET "PATH=%PATH%;%ALLUSERSPROFILE%\chocolatey\bin"

3、重新加载cmd.exe

如果安装成功,那么你可以搜索软件包:

choco search docker

我们来试一把,安装Cmder——一个Windows上的时尚shell:

choco install cmder -y

Chocolatey会安装到C:\tools下。如果你要用Cinder做如下的练习,您可以以管理员启动它:

看起来不错!

1. 在Windows 10 Pro上安装Docker和Kubernetes

安装Docker

安装Docker for Windows:

choco install docker-for-windows -y

重启你的电脑。Docker会问你是否要启用Hyper-V。

选择Yes。

你需要知道Docker需要启用VT-X/AMD-v的硬件虚拟化扩展来运行容器。你需要在重启电脑时在BIOS里面配置它。

你可以用systeminfo命令来检查VT-x/AMD-v是否打开。

如果你不确定VT-x/AMD-v是否打开,也不用担心。因为你没有的话,Docker会报错:

Hardware assisted virtualization and data execution protection must be enabled in the BIOS.

另一个常见问题是Hyper-V没有启用,这样你会见到如下错误:

你应该启用Hyper-V。以管理员打开新的命令提示符,敲入:

bcdedit /set hypervisorlaunchtype auto

你重启电脑之后Docker就应该可以启动了。

但如何知道Docker已经跑起来了呢?

打开命令提示符:

docker ps

如果一切正常,那么你会看见输出一个空的列表(正在运行的容器列表)。

如果Docker deamon没有运行的话,你可能就会遇到如下错误:

上面的错误表示你的Docker安装不正常,Docker无法启动。

你应该先启动Docker daemon,然后再连接它。

在Hyper-V上安装Minikube

安装minikube:

choco install minikube -y

在启动集群之前,你应该先创建一个外部的网络交换机。

第一步,你应该先查看你电脑的网络适配器。

你应该忽略掉虚拟网卡,而关注在真实活跃的物理网卡上,比如Ethernet或者WiFi。

选择好物理网卡让它与虚拟交换机共享网络连接。

要查看你当前的网络适配器,你可以在PowerShell里面使用Get-NetAdapter cmdlet。

点击左下角的Windows图标,输入PowerShell来打开它:

输入如下命令来列出所有的适配器:

Get-NetAdapter

如果你还是不知道该选哪个,那么就选择Up状态的那个。

一旦你选择好了适配器,你就可以开始创建外部虚拟交换机了:

New-Switch -Name "minikube" -AllowManagement $TRUE -NetAdapternmae "INSERT_HERE_ADAPTER"
别忘了填入之前选择的适配器名字。 也可以在图形界面创建这个外部虚拟交换机:Hyper-v 管理器 里面,打开机器菜单,有创建外部虚拟交换机

如果你没有创建好网络交换机,那么启动minikube的时候会报如下错误:

E0427 09:06:16.000298 3252 start.go:159] Error starting host: Error creating host: Error executing step: Running precreate checks. no External vswitch found. A valid vswitch must be available for this command to run. Check https://docs.docker.com/machine/drivers/hyper-v/.

你可以运行以下命令来测试minikube安装是否成功:需要用管理员权限运行

minikube start  --vm-driver=hyperv --hyperv-virtual-switch=minikube  --memory=4096  --v=7 --alsologtostderr
minikube start --vm-driver=hyperv --hyperv-virtual-switch=minikube  --memory=4096 
在中国用户,需要用阿里下载的修改过的minikube替换掉放在 的。
直接用阿里修改的http://kubernetes.oss-cn-hangzhou.aliyuncs.com/minikube/releases/v0.28.0/minikube-windows-amd64.exe?spm=a2c4e.11153940.blogcont221687.28.4ffc7733NjbciY&file=minikube-windows-amd64.exe
minikube start --hyperv-virtual-switch=minikube 
---------------------
作者:maggie_up
来源:CSDN
原文:https://blog.csdn.net/Maggie_up/article/details/80738331

请注意:--vm-driver=hyperv --hyperv-virtual-switch=minikube 只在第一次启动时需要。如果你希望更改driver或者内存,那么你需要执行minkube destroy然后用新的配置重新创建。

如果minikube启动失败,那么你可以通过以下命令调试:

minikube delete 

(如果minikube处乱,完全清除下载的虚拟机:
C:\Users\Ben\.minikube C:\Users\Ben\.kube
有时这个目录被锁,需要在Hyper-v 管理器 里面,关掉minikube虚拟机,释放目录。或者需要重启) 

minikube start  --vm-driver=hyperv --hyperv-virtual-switch=minikube --v=7 --alsologtostderr

更多的输出日志可以帮助你快速排错。我遇到过如下的问题:

E0427 09:19:10.114873 10012 start.go:159] Error starting host: Error starting stopped host: exit status 1.

这看不出来啥。我就打开详细的日志输出,错误就变得明显了:

+ Hyper-V\Start-VM minikube 
+ + ~~~~~~~~~~~~~~~~~~~~~~~~~    
+ + CategoryInfo : FromStdErr: (:) [Start-VM], VirtualizationException    
+ + FullyQualifiedErrorId : OutOfMemory,Microsoft.HyperV.PowerShell.Commands.StartVM

内存不够了!

这时可以看看安装成功了没。在命令提示符输入:

kubectl get nodes

你会看到Kubernetes里面有一个node显示出来。

 

在virtualbox里面运行虚拟机

因为你已经在设备上启用了Hyper-V,你就无法再通过virtualbox跑VM了。如果你强行要启用vm的话,会遇到如下错误:

如果你想用VirtualBox这种Type-2 的hypervisor, 你先要停掉Hyper-V然后重启电脑。

以管理员打开命令提示符:

bcdedit /set hypervisorlaunchtype off

当机器重启之后,你就可以正常使用VirtualBox了。

如果你又想要用Docker和minkube了,你要重新打开Hyper-V然后重启机器。

以管理员打开命令行,输入:

bcdedit /set hypervsiorlaunchtype auto

重启, 这样你就可以将容器部署到Kubernetes中了。

请跳到测试你的Docker 安装

2. 在Win 10 Home版本上安装Docker和Kubernetes

如果你正使用Windows 10的Home版或者Student版,你可能不需要安装Docker Machine 工具(比如Docker Toolbox)。

你应该使用minikube作为远程的Docker deamon和本地的Kubernetes集群。

你可以下载安装minikube:

choco install minikube

在装完了以后,你可以启动:

minikube start

这个命令会下载一个VirtualBox要用到的ISO,然后启动VM。启动之后你就可以查看集群状态:

kubectl get nodes

看见一个node列出来。

要连接到远程的Docker deamon,你应该安装Docker客户端:

choco install docker -y

你可以连到minkube上远程的Docker daemon:

@FOR /f "tokens=*" %i IN ('minikube docker-env') DO @%i

注意:每次你打开一个新的命令行窗口,你都需要以上命令。一种提醒你自己的简单方式是敲一下minikube docker-env

如果连接成功,你可以列出当前正在运行的容器:

docker ps

你会看到很多容器正在运行。大部分属于Kubernetes。

你已经一切准备就绪!


但是在你继续之前,你需要清楚使用minikube作为你远程Docker daemon的一些限制。

Docker被设计为两个部分:

  • Docker daemon ——你可以将它理解为一个API server。你把命令发给它的API,Docker接收然后执行命令。
  • Docker CLI —— 将命令发送给Daemon API的可执行文件。

大部分时间你都只会跟Docker CLI 交互,你不会看到Docker daemon。

那么为什么要有客户端和服务器?为什么不用一个文件?

这都是为了灵活性。

当你运行Docker for Windows时,Docker CLI连接的是本地的Docker daemon。

但是有时候你本地没有daemon。

可能你需要在一台远端的机器上构建Docker容器。

可能你没有Hyper-V环境,你的Docker daemon是安装到VirtualBox里面的VM中的。

特别是你正在运行minikube。

你的Docker CLI会连接到远程的部署在minikube虚拟机里面的Docker Daemon上。


当你的容器运行在远程的Docker daemon上的时候,你需要调整端口绑定。

在Docker for Windows,你可以将容器端口绑定到8080:

docker run -ti -p 8080:80 nginx

注意:容器本身暴露的是80,你把它映射到了8080。

然后你可以访问http://localhost:8080然后看见Nginx的欢迎页面。

如果你在远程的Docker daemon上运行此命令然后访问这个URL时,你会发现什么也没有,URL不可达。

所以有什么不同?

Docker deamon负责运行容器和端口转发。

Docker for Windows的daemon是在本地运行的——你自己的本机。

所以你可以访问本机上的容器。


Minikube则不同,它的Docker daemon是运行在VM里面的。

它是远程的deamon。

如果你想要看见你运行的容器你需要访问Docker daemon所在的机器。 你可以用以下命令找到IP:

minikube ip

你可以通过http://your_minikube_ip:8080来访问,看到Nignx的欢迎页面。


测试你的Docker安装

你已经安装好了Docker,那你如何知道它是否工作正常呢?

进入到终端,输入:

docker run -ti -p 8080:80 wordpress

一旦Docker下载完所有的包,你可以通过http://localhost:8080来访问。

注意:如果你在使用远程的minikube上的Docker daemon时,你应该使用http://your_minikube_ip:8080来访问。

你应该可以看到Wordpress的安装向导了。

万岁!恭喜你!

Wordress就在一个容器里面对外服务了。

注意:你还不能完成那个Wordpress的安装因为你还有数据库。

测试你的Kubernetes集群安装

是时候测试你的本地的Kubernetes集群了。在这一部分,你将会部署Smashing.io面板

部署Smashing到Kubernetes里面

你可以用如下命令部署:

kubectl run smashing --image=/visibilityspots/smashing --port=3030

一旦Kubernetes完成了容器的安装,你可以查看运行状态:

kubectl get pods

暴露面板

你可以将你部署的服务器暴露出来:

kubectl expose deployment smashing --type=NodePort

你可以通过浏览器打开面板:

minikube service smashing

这样你就可以从Kubernetes里面访问面板了! 万岁!

鸟瞰Kubernetes

Minikube本身自带了一些好东西。

你可以访问官方自带的面板

minikube dashboard

从这里,你可以查看你的集群详细信息和部署应用。

总结

现在你已经了解了在Windows上安装Docker和Kubernetes的所有选项。

如果你遇到了文章没提到的错误,请通过@learnk8s或者slack告诉我们。

接下来,你可以在你的环境里面部署更多应用了。请看文档

原文链接:Get started with Docker and Kubernetes on Windows 10(翻译:姚洪)

如何在Windows 10上运行Docker和Kubernetes?的更多相关文章

  1. 如何在 Windows 10 上安装 WSL 2

    翻译自 Joey Sneddon 2020年10月30日的文章<How to Install WSL 2 on Windows 10> [1] 如果您想在最新的 Windows 版本中尝试 ...

  2. 非Unicode编码的软件如何在Windows系统上运行

    我们常常会遇到这样一种情况:点开某些日文软件(我不会说就是galgame( ╯□╰ ))会出现乱码或者直接无法运行. 出现乱码的原因很简单:编码与译码的方式不一致!!!!!!!!!!! 首先大家需要知 ...

  3. 如何在windows 7 上使用docker

    在window7上面本来是支持使用docker的, 但是我们可以通过安装docker toolbox来实现在windows7上使用docker. 参考网址: https://docs.docker.c ...

  4. 如何在Windows 10上访问NFS的share

    大致过程是: 1. 开启名为"Services for NFS"的Windows Feature. 2. 如果需要拥有写权限,需要修改注册表. 3. Mount即可. 具体步骤详见 ...

  5. Windows 10 上,Edge 浏览器不支持插件,因此将不运行 Java

    在 Windows 10 上,Edge 浏览器不支持插件,因此将不运行 Java.微软想干嘛?

  6. DB 查询分析器 6.04 在 Windows 10 上的安装与运行展示

    DB查询分析器 6.04 在 Windows 10 上的安装与运行展示 中国本土程序员马根峰(CSDN专访马根峰:海量数据处理与分析大师的中国本土程序员 http://www.csdn.net/art ...

  7. 如何在windows10家庭版上搭建docker

    如何在windows10家庭版上搭建docker 建议先跳到最后一条,看完之后再决定是否安装. 0X00搭建原因 首先搭docker的想法是我在复现漏洞时候,发现大佬们的复现环境都是基于docker的 ...

  8. Redis进阶实践之三如何在Windows系统上安装安装Redis(转载)

    Redis进阶实践之三如何在Windows系统上安装安装Redis 一.Redis的简介 Redis是一个key-value存储系统.和Memcached类似,它支持存储的value类型相对更多,包括 ...

  9. 如何在 Windows 10 中搭建 Node.js 环境?

    [编者按]本文作者为 Szabolcs Kurdi,主要通过生动的实例介绍如何在 Windows 10 中搭建 Node.js 环境.文章系国内 ITOM 管理平台 OneAPM 编译呈现. 在本文中 ...

随机推荐

  1. laravel中migration 数据迁移

    简介 数据库迁移就像是数据库的版本控制,可以让你的团队轻松修改并共享应用程序的数据库结构.迁移通常与 Laravel 的数据库结构生成器配合使用,让你轻松地构建数据库结构.如果你曾经试过让同事手动在数 ...

  2. spark、standalone集群 (2)集群zookeeper 热备

     测试 cmd     spark-examples-1.6.0-hadoop2.6.0.jar   spark 2.0以后  就没有这个 jar.需要下载 ./bin/spark-submit -- ...

  3. 同一个机器 安装多个版本Chrome浏览器的方法

    1. Chrome 现在安装直接没有任何提示 就直接安装了 而且自动式 高版本覆盖低版本安装 不给你任何选择版本的机会. 2. 但是chrome 的安装是基于用户的 所以 同一个机器 使用不同的用户 ...

  4. [转帖]oracle改版sql server问题点汇总

    https://www.cnblogs.com/zhangdk/p/oracle_sqlserver.html 只记得 最开始的时候看过 没有具体的了解里面的特点 原作者总结的很好 留下来 以后说不定 ...

  5. HTML5经典实例——1基础语法和语义

    1指定DOCTYPE 在页面的最开始处指定HTML5 DOCTYPE DOCTYPE是不区分大小写的.可以任意的使用大小写. <!DOCTYPE html> <html lang=& ...

  6. 使用Elasticsearch 出现的拒绝连接

    pom 文件 spring: elasticsearch: jest: uris: http://192.168.124.142:9201 # data: # elasticsearch: # clu ...

  7. java.lang.Comparable 接口 详解

    参考https://blog.csdn.net/itm_hadf/article/details/7432782 http://www.blogjava.net/jjshcc/archive/2011 ...

  8. 【转】 Golang输入输出格式化Printf Springf Fprintf..

    // Go 在传统的`printf` 中对字符串格式化提供了优异的支持. // 这里是一些基本的字符串格式化的人物的例子. package main import "fmt" im ...

  9. k8s调度器、预选策略及调度方式

    一.k8s调度流程 1.(预选)先排除完全不符合pod运行要求的节点2.(优先)根据一系列算法,算出node的得分,最高没有相同的,就直接选择3.上一步有相同的话,就随机选一个 二.调度方式 1.no ...

  10. 浅谈WPF的VisualBrush

    首先看看VisualBrush的解释,msdn上面的解释是使用 Visual 绘制区域,那么我们再来看看什么是Visual呢?官方的解释是:获取或设置画笔的内容,Visual 是直接继承自Depend ...