热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

如何在Windows10上运行Docker和Kubernetes?

如何在Windows10上运行Docker和Kubernetes?如何在Windows10上运行Docker和Kubernetes?在Windows上学习Docker和Ku

如何在Windows 10上运行Docker和Kubernetes?

在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实现同样的功能。

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

前提

你可以从官网上下载安装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做如下的练习,您可以以管理员启动它:
2.png

看起来不错!

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

安装Docker

安装Docker for Windows:
choco install docker-for-windows -y

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

选择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.
4.png

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

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

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

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

打开命令提示符:
docker ps


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

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

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

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

在Hyper-V上安装Minikube

安装minikube:
choco install minikube -y

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

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

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

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

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

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

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

7.png

如果你还是不知道该选哪个,那么就选择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的话,会遇到如下错误:
8.png

如果你想用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。
9.png

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

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

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

特别是你正在运行minikube。

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

当你的容器运行在远程的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面板。
11.png

部署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

12.png

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

总结

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

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

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

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

推荐阅读
  • 微服务优雅上下线的最佳实践
    本文介绍了微服务上下线的正确姿势,避免使用 kill -9 等粗暴手段,确保服务的稳定性和可靠性。 ... [详细]
  • 深入解析Unity3D游戏开发中的音频播放技术
    在游戏开发中,音频播放是提升玩家沉浸感的关键因素之一。本文将探讨如何在Unity3D中高效地管理和播放不同类型的游戏音频,包括背景音乐和效果音效,并介绍实现这些功能的具体步骤。 ... [详细]
  • 如何将955万数据表的17秒SQL查询优化至300毫秒
    本文详细介绍了通过优化SQL查询策略,成功将一张包含955万条记录的财务流水表的查询时间从17秒缩短至300毫秒的方法。文章不仅提供了具体的SQL优化技巧,还深入探讨了背后的数据库原理。 ... [详细]
  • 从理想主义者的内心深处萌发的技术信仰,推动了云原生技术在全球范围内的快速发展。本文将带你深入了解阿里巴巴在开源领域的贡献与成就。 ... [详细]
  • 探讨低代码行业发展现状,分析其未能催生大型企业的原因,包括市场需求、技术局限及商业模型等方面。 ... [详细]
  • 本文旨在探讨设计模式在Visual FoxPro (VFP) 中的应用可能性。虽然VFP作为一种支持面向对象编程(xbase语言)的工具,其OO特性相对简明,缺乏高级语言如Java、C++等提供的复杂特性,但设计模式作为一种通用的解决方案框架,是否能有效应用于VFP,值得深入研究。 ... [详细]
  • Flutter 核心技术与混合开发模式深入解析
    本文深入探讨了 Flutter 的核心技术,特别是其混合开发模式,包括统一管理模式和三端分离模式,以及混合栈原理。通过对比不同模式的优缺点,帮助开发者选择最适合项目的混合开发策略。 ... [详细]
  • Django与Python及其他Web框架的对比
    本文详细介绍了Django与其他Python Web框架(如Flask和Tornado)的区别,并探讨了Django的基本使用方法及与其他语言(如PHP)的比较。 ... [详细]
  • 深入解析Dubbo:使用与源码分析
    本文详细介绍了Dubbo的使用方法和源码分析,涵盖其架构设计、核心特性和调用流程。 ... [详细]
  • ABP框架是ASP.NET Boilerplate的简称,它不仅是一个开源且文档丰富的应用程序框架,还提供了一套基于领域驱动设计(DDD)的最佳实践架构模型。本文将详细介绍ABP框架的特点、项目结构及其在Web API优先架构中的应用。 ... [详细]
  • Docker 环境下 MySQL 双主同步配置指南
    本文介绍了如何在 Docker 环境中配置 MySQL 的双主同步,包括目录结构的创建、配置文件的编写、容器的创建与设置以及最终的验证步骤。 ... [详细]
  • 提升 Kubernetes 集群管理效率的七大专业工具
    Kubernetes 在云原生环境中的应用日益广泛,然而集群管理的复杂性也随之增加。为了提高管理效率,本文推荐了七款专业工具,这些工具不仅能够简化日常操作,还能提升系统的稳定性和安全性。从自动化部署到监控和故障排查,这些工具覆盖了集群管理的各个方面,帮助管理员更好地应对挑战。 ... [详细]
  • 本文介绍了如何在 Windows 系统上利用 Docker 构建一个包含 NGINX、PHP、MySQL、Redis 和 Elasticsearch 的集成开发环境。通过详细的步骤说明,帮助开发者快速搭建和配置这一复杂的技术栈,提升开发效率和环境一致性。 ... [详细]
  • Vagrant虚拟化工具的安装和使用教程
    本文介绍了Vagrant虚拟化工具的安装和使用教程。首先介绍了安装virtualBox和Vagrant的步骤。然后详细说明了Vagrant的安装和使用方法,包括如何检查安装是否成功。最后介绍了下载虚拟机镜像的步骤,以及Vagrant镜像网站的相关信息。 ... [详细]
  • go语言能做什么?很多朋友可能知道Go语言的优势在哪,却不知道Go语言适合用于哪些地方。1、Go语言作为服务器编程语言,很适合处理日志、数据打包、虚拟机处理、文件系统、分布式系统、 ... [详细]
author-avatar
手机用户2502897401
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有