本文是windows 10 docker和kubernetes安装使用入门,如果小伙伴们想进一步深入学习docker和kubernetes,可以关注慕课网关于这方面的免费课:《Kubernetes基础:开启云原生之门》和实战课:《Kubernetes实战:高可用集群搭建,配置,运维与应用》。
当您不知道从哪里开始时,在Windows上使用Docker和Kubernetes入门可能会令人生畏。
而且,即便知道安装软件并不是在公园里散步也绝对没有帮助。
实际上,您应该已经是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上了。
讲师主页:tonybai_cn
讲师博客: Tony Bai
实战课:《Kubernetes实战:高可用集群搭建,配置,运维与应用》
免费课:《Kubernetes基础:开启云原生之门》