为了账号安全,请及时绑定邮箱和手机立即绑定

Windows 10上的Docker和Kubernetes入门

图片描述

本文是windows 10 docker和kubernetes安装使用入门,如果小伙伴们想进一步深入学习docker和kubernetes,可以关注慕课网关于这方面的免费课:《Kubernetes基础:开启云原生之门》和实战课:《Kubernetes实战:高可用集群搭建,配置,运维与应用》

当您不知道从哪里开始时,在Windows上使用DockerKubernetes入门可能会令人生畏。

而且,即便知道安装软件并不是在公园里散步也绝对没有帮助。

实际上,您应该已经是Docker和Kubernetes的专家,才能浏览有关如何安装它们的选项。

但是不用担心!

如果您只是刚开始使用Windows上的容器和Kubernetes,那么本文适合您。

您将学习在Windows上设置开发环境时如何做出正确的选择。

让我们从Docker开始。

使用Windows 10 Home?您将无法在Windows上运行Docker

当Docker的人们决定在Windows上实现Docker时,他们选择了Hyper-V作为其虚拟化技术。好处显而易见:出色的性能和本地管理程序。

不幸的是,并非所有Windows版本都随附Hyper-V。

而且,如果您使用的是Windows 10家庭版或学生版,那么您会很不幸。您将无法安装和运行适用于Windows的Docker。

但这还不是结束。

基于Docker Machine的替代品很多,例如Docker Toolbox或minikube。

Docker Machine的工作方式很简单:有一台运行Linux和Docker的虚拟机。然后,您从主机连接到该虚拟机中的远程Docker守护程序。

无论如何,Minikube是基于Docker Machine的最有趣的虚拟机之一-, 如果您打算运行Kubernetes集群。

实际上,minikube是运行Docker 和 Kubernetes 的虚拟机。它通常仅用于运行Kubernetes,但是您也可以使用它来运行Docker容器。

您不会达到与Windows Docker相同的速度,但是可以在没有Hyper-V的情况下构建和运行容器。

使用Windows 10 Pro,适用于Windows的Docker是最好的-直到不是

您拥有最新的Windows 10 Pro,并且可以安装Docker for Windows。

出色的性能和出色的开发人员经验。

Windows Docker使用的管理程序非常强大- 实际上,它被称为Type-1管理程序(hypervisor)。

它是如此强大,以至于不能与较弱的管理程序(例如VirtualBox中的管理程序或Type-2管理程序)很好地配合使用。

您不能在计算机上同时运行Type-1和Type-2虚拟机管理程序。换句话说,如果您运行Windows的Docker,将无法在VirtualBox上启动虚拟机。

根据您的设置,这可能是无关紧要的细节。

也许您完全致力于一个容器化的世界,而您却将虚拟机抛在了后面。

古老而遥远的记忆。

但是,如果您仍然依靠虚拟机和工具(例如Vagrant),也许您应该意识到烦恼。

您可以随意启用和禁用Hyper-V虚拟机管理程序,但是需要重新启动计算机。

如果您经常从容器切换到虚拟机,那么minikube也许是一个更方便的选择。从容器更改为虚拟机时,无需重新启动计算机。

但是您不会从额外的性能或改进的体验中受益。

最后,如果您对运行Windows容器(又称具有从Windows继承的基本镜像的容器)感兴趣,那么Docker for Windows是唯一的选择。

为此,您将需要Windows 10 Pro或Enterprise。

如果要在本地运行Kubernetes,则应考虑使用minikube。

Minikube是在嵌入式Linux发行版(Buildroot)上运行的虚拟机,并预先安装了Docker守护程序。

它是"自带电池(battery included)"的Kubernetes。

Minikube可以使用VirtualBox或Hyper-V运行虚拟机- 还有更多选项

如果您已经拥有Hyper-V,并希望为Docker和minikube使用相同的虚拟机管理程序,那么这是个好消息。

如果您不能运行Hyper-V,这同样是个好消息,因为您可以使用VirtualBox。

这是很多选择和折衷,所以这里是所讨论内容的摘要:

图片描述

您可以从官方网站下载并安装所有依赖项,例如适用于Windows的Docker,Docker工具箱,VirtualBox,kubectl,Docker CLI等,但这很辛苦。

您必须访问该网站,希望URL仍然有效,搜索下载页面,选择正确的版本,下载,安装,最后将其添加到您的路径中。

但下面这是可行的,我敢肯定,您宁愿花时间进行更多的编码,也不愿从网上追逐和安装可执行文件。

输入Chocolatey。

Chocolatey是Windows的程序包管理器(译注:类似mac上的brew,ubuntu上的apt或snap, centos上的yum)。您告诉它要安装哪些可执行文件,然后Chocolatey代表您安装它们。

您正在将调配软件的所有艰苦工作外包给其他人。

安装Chocolatey很容易。您可以在官方网站上找到完整的说明。概括地说,这是您必须要做的:

首先,cmd.exe以管理员身份开始

然后执行以下长命令:

@"%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"

最后,重新加载cmd.exe。

如果安装成功,您现在可以搜索要安装的应用程序:

choco search docker

既然您已经选择了这种方式,那么不妨试一试choco。您可以安装Cmder -Windows的现代外壳,其中包括:

choco install cmder -y

Chocolatey将二进制文件安装在中C:\tools。如果希望使用Cmder继续学习本教程,则应以管理员身份启动二进制文件。

图片描述

看起来不错!

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

安装Docker

您可以使用以下方法下载适用于Windows的Docker:

choco install docker-desktop -y

重新启动笔记本电脑。Docker会询问您是否要启用Hyper-V。

图片描述

选择"ok"。

您应该知道,Docker需要启用VT-X / AMD-v虚拟硬件扩展,然后才能运行任何容器。根据您的计算机,您可能需要重新启动并在BIOS中启用它。

您可以通过systeminfo从命令提示符处运行来检查是否启用了VT-X / AMD-v 。

如果不确定VT-X / AMD-v是否已启用,请不要担心。如果没有,Docker将向您显示以下错误消息:

必须在BIOS中启用硬件辅助的虚拟化和数据执行保护。

图片描述

另一个常见错误与未启用Hyper-V虚拟机管理程序有关。如果遇到此错误:

无法启动:正在运行的命令已停止,因为首选项变量“ ErrorActionPreference”或公共参数设置为Stop:'MobyLinuxVM’无法启动。无法启动虚拟机“ MobyLinuxVM”,因为其中一个Hyper-V组件未运行。

图片描述

您应该启用Hyper-V。以管理员身份打开新的命令提示符,然后键入以下内容:

bcdedit /set hypervisorlaunchtype auto

您应该重新启动计算机,并且Docker应该最终启动。

但是您如何知道Docker是否正常工作呢?

打开一个新的命令提示符,然后键入:

docker ps

如果一切正常,您应该会看到一个空的容器列表。

如果您的Docker守护程序未运行,则您可能会对这个错误感到震惊:

连接期间出错:获取http://%2F%2F.%2Fpipe%2Fdocker_engine/v1.37/containers/json:打开//.//pipe/docker_engine:系统找不到指定的文件。在Windows上的默认守护程序配置中,必须将docker客户端提升运行以进行连接。该错误也可能表明docker守护程序未运行。

图片描述

上面的错误表明您的Docker安装无法正常运行并且无法启动。

连接到它之前,您应该启动Docker守护程序。

在Hyper-V上安装Minikube

您可以通过以下方式下载minikube:

choco install minikube -y

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

首先,您需要确定计算机上装有哪些网络适配器。

您应该忽略虚拟接口,而应专注于真实,实时,物理的网络适配器,例如Ethernet或WiFi。

选择一个真正的适配器可以让您与虚拟交换机共享Internet连接。

要检查当前的网络适配器,可以使用Get-NetAdapter Powershell中的cmdlet。

单击左下角的Windows图标,然后开始键入“ PowerShell”以将其打开。

键入以下命令以列出所有适配器:

Get-NetAdapter

图片描述

如果发现很难选择适配器,请尝试选择“ 状态”列中具有“up”的适配器。

确定正确的适配器后,可以使用以下命令创建外部虚拟交换机:

New-VMSwitch –Name "minikube" –AllowManagement $True –NetAdapterName "INSERT_HERE_ADAPTER"

不要忘记插入先前选择的适配器。

如果无法创建网络交换机,则在启动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

请注意,–vm-driver=hyperv --hyperv-virtual-switch=minikube仅在第一次启动时才需要。如果要更改驱动程序或内存,则必须minikube destroy使用新设置重新创建VM。

如果由于任何原因minikube无法启动,则可以使用以下命令对其进行调试:


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

多余的日志记录应该可以帮助您解决问题。在我的特定情况下,minikube曾经因以下原因失败:

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中看到一个节点。

在VirtualBox上运行虚拟机

由于您在设备上启用了Hyper-V,因此您将无法在VirtualBox上启动任何虚拟机。

您仍然可以尝试启动虚拟机。

但是,您可能会遇到以下错误:

您的电脑出现问题,需要重新启动。我们只是收集一些错误信息,然后将为您重新启动它。

图片描述

如果您希望使用VirtualBox或任何其他使用Type-2虚拟机管理程序的可执行文件,则应禁用它并首先重新启动计算机。

以管理员身份打开新的命令提示符,然后键入以下内容:

bcdedit /set hypervisorlaunchtype off

重新启动设备后,您应该可以照常使用VirtualBox。

如果希望再次使用Docker和minikube,则应启用Hyper-V并重新启动计算机。

以管理员身份打开新的命令提示符,然后键入以下内容:

bcdedit /set hypervisorlaunchtype auto

重新启动,现在您可以运行容器并将其部署到Kubernetes了!

2. 在Windows 10 Home上安装Docker和Kubernetes

如果您打算使用Windows 10家庭版或学生版,则可以避免安装其他Docker Machine工具,例如Docker Toolbox。

您应该将minikube用作远程Docker守护程序以及本地Kubernetes集群。

您可以使用以下方法下载并安装minikube:

choco install minikube -y

在安装结束时,您可以使用以下命令启动minikube:

minikube start

该命令将下载VirtualBox的ISO并启动虚拟机。启动后,您应该能够使用以下命令查询Kubernetes集群:

kubectl get nodes

并看到一个节点。

要连接到远程Docker守护程序,您应该使用以下命令安装Docker客户端:

choco install docker -y

您可以使用以下命令连接到minikube远程Docker守护程序:

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

请注意,每次打开新终端时都应键入以上命令。提醒自己有关该命令的更简短方法是键入minikube docker-env。

如果连接成功,您应该能够使用以下命令列出所有正在运行的容器:

docker ps

您应该看到很多正在运行的容器。其中大多数属于Kubernetes。

您已经做到了:您已经准备好了。

但是在继续之前,您应该了解使用minikube作为远程Docker守护程序的一些限制。

Docker分为两个部分:

  • Docker守护程序 -您可以将其视为具有API的服务器。您可以将命令发送到API服务器,而Docker将代表您接收并执行命令。
  • Docker CLI —将命令发送到Docker守护程序API的可执行文件

大多数情况下,您正在与Docker CLI交互,而您却看不到Docker守护程序。

那为什么要有一个客户端和一个服务器呢?

为什么没有一个二进制文件?

一切都归结为灵活性。

当您运行Windows的Docker时,您的Docker CLI已连接到本地Docker守护程序。

图片描述

但是有时您没有Docker守护程序。

也许您想在远程计算机上构建容器。

也许您不能在计算机上运行Hyper-V,并且Docker守护程序已安装在VirtualBox的虚拟机中。

如果您正在运行minikube,则正是这种情况。

您的Docker CLI远程连接到位于minikube虚拟机内部的Docker守护程序。

图片描述

针对远程Docker守护程序运行容器时,需要调整端口绑定。

在适用于Windows的Docker中,您可以使用以下命令在端口8080上运行并绑定容器:

docker run -ti -p 8080:80 nginx

请注意容器是如何暴露端口80的,并且您已将该端口映射到8080。

您可以访问http://localhost:8080并看到“欢迎使用Nginx”页面。

如果使用远程Docker守护程序运行相同的命令并访问同一页面,则不会看到任何内容。

网址无法访问。

那么,有什么不同呢?

Docker守护程序负责运行容器和转发端口。

使用Windows的Docker,该守护程序可以在本地主机上运行。

因此,您可以访问localhost上正在运行的容器。

另一方面,Minikube在虚拟机内部运行Docker守护程序。

这是一个远程Docker守护程序。

如果您想查看正在运行的容器,则需要使用Docker守护程序访问机器。您可以通过以下方式找到IP地址:

minikube ip

您可以访问http://your_minikube_ip:8080并看到“欢迎使用Nginx”页面。

3. 测试您的Docker安装

您已经安装了Docker,但是您如何知道它是否真正起作用?

在您的终端中输入:

docker run -ti -p 8080:80 wordpress

Docker完成下载所有软件包后,您应该访问http://localhost:8080/。

请注意,如果您将minikube作为远程Docker守护程序运行,则应将其http://minikube_ip:8080用作URL。

您应该能够看到Wordpress安装向导。

欢呼!

WordPress正在从容器内提供流量!

请注意,由于没有数据库,您将无法完成Wordpress安装。

4. 测试您的Kubernetes集群安装

现在是时候测试您的本地Kubernetes集群了。在本部分中,您将部署Smashing.io仪表板

图片描述

将Smashing部署到Kubernetes

您可以使用以下方法将仪表板部署到Kubernetes:

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

Kubernetes完成下载容器后,您应该看到它正在运行:

kubectl get pods

暴露仪表板

您可以通过以下方式发布您的部署:

kubectl expose deployment smashing --type=NodePort

您可以使用以下方法在浏览器中打开仪表板:

minikube service smashing

您可以从Kubernetes访问仪表板!欢呼!

5. Kubernetes的鸟瞰图

您可以通过以下方式访问Kubernetes官方仪表板

minikube dashboard

图片描述

从那里,您可以浏览集群并部署应用程序。

就这样!

现在,您已经知道在Windows上安装Docker和Kubernetes的所有选项。

由于您拥有一个可以正常工作的环境,因此您可以将任意应用程序部署到Kubernetes上了。


点击查看更多内容
“小礼物走一走,来慕课关注我”
赞赏支持
Tony Bai 说 去围观
Tony Bai,智能网联汽车独角兽公司先行研发部负责人,Go语言专家,资深架构师,《Go语言精进之路》作者。
评论

作者其他优质文章

正在加载中
全栈工程师
手记
粉丝
7757
获赞与收藏
477

关注作者,订阅最新文章

阅读免费教程

感谢您的支持,我会继续努力的~
扫码打赏,你说多少就多少
赞赏金额会直接到老师账户
支付方式
打开微信扫一扫,即可进行扫码打赏哦
今天注册有机会得

100积分直接送

付费专栏免费学

大额优惠券免费领

立即参与 放弃机会
意见反馈 帮助中心 APP下载
官方微信

举报

0/150
提交
取消