在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 二、执行下面这个命令:
@"%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"
复制代码@"%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 search docker
咱们来试一把,安装Cmder——一个Windows上的时尚shell:
choco install cmder -y
复制代码choco install cmder -y
Chocolatey会安装到C:\tools下。若是你要用Cinder作以下的练习,您能够以管理员启动它:
1. 在Windows 10 Pro上安装Docker和Kubernetes
choco install docker-for-windows -y
复制代码choco install docker-for-windows -y
重启你的电脑。Docker会问你是否要启用Hyper-V。node
bcdedit /set hypervisorlaunchtype auto
复制代码bcdedit /set hypervisorlaunchtype auto
你重启电脑以后Docker就应该能够启动了。 但如何知道Docker已经跑起来了呢? 打开命令提示符:
docker ps
复制代码docker ps
若是一切正常,那么你会看见输出一个空的列表(正在运行的容器列表)。 若是Docker deamon没有运行的话,你可能就会遇到以下错误:
在Hyper-V上安装Minikube
choco install minikube -y
复制代码choco install minikube -y
在启动集群以前,你应该先建立一个外部的网络交换机。 第一步,你应该先查看你电脑的网络适配器。 你应该忽略掉虚拟网卡,而关注在真实活跃的物理网卡上,好比Ethernet或者WiFi。 选择好物理网卡让它与虚拟交换机共享网络链接。 要查看你当前的网络适配器,你能够在PowerShell里面使用Get-NetAdapter cmdlet。 点击左下角的Windows图标,输入PowerShell来打开它: 输入以下命令来列出全部的适配器:
Get-NetAdapter
复制代码Get-NetAdapter
New-Switch -Name "minikube" -AllowManagement $TRUE -NetAdapternmae "INSERT_HERE_ADAPTER"
复制代码New-Switch -Name "minikube" -AllowManagement $TRUE -NetAdapternmae "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
复制代码minikube start --vm-driver=hyperv --hyperv-virtual-switch=minikube
请注意:--vm-driver=hyperv --hyperv-virtual-switch=minikube 只在第一次启动时须要。若是你但愿更改driver或者内存,那么你须要执行minkube destroy而后用新的配置从新建立。 若是minikube启动失败,那么你能够经过如下命令调试:
minikube deleteminikube start —vm-driver=hyperv —hyperv-virtual-switch=minikube —v=7 —alsologtostderr
复制代码minikube deleteminikube 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
复制代码+ Hyper-V\Start-VM minikube+ + ~~~~~~~~~~~~~~~~~~~~~~~~~+ + CategoryInfo : FromStdErr: (:) [Start-VM], VirtualizationException + + FullyQualifiedErrorId : OutOfMemory,Microsoft.HyperV.PowerShell.Commands.StartVM
内存不够了! 这时能够看看安装成功了没。在命令提示符输入:
kubectl get nodes
复制代码kubectl get nodes
你会看到Kubernetes里面有一个node显示出来。 在VirtualBox里面运行虚拟机 由于你已经在设备上启用了Hyper-V,你就没法再经过virtualbox跑VM了。若是你强行要启用vm的话,会遇到以下错误:
bcdedit /set hypervisorlaunchtype off
复制代码bcdedit /set hypervisorlaunchtype off
当机器重启以后,你就能够正常使用VirtualBox了。 若是你又想要用Docker和minkube了,你要从新打开Hyper-V而后重启机器。 以管理员打开命令行,输入:
bcdedit /set hypervsiorlaunchtype auto
复制代码bcdedit /set hypervsiorlaunchtype auto
重启, 这样你就能够将容器部署到Kubernetes中了。 请跳到测试你的Docker安装[2]。
2. 在Win 10 Home版本上安装Docker和Kubernetes
choco install minikube
复制代码choco install minikube
在装完了之后,你能够启动:
minikube start
复制代码minikube start
这个命令会下载一个VirtualBox要用到的ISO,而后启动VM。启动以后你就能够查看集群状态:
kubectl get nodes
复制代码kubectl get nodes
看见一个node列出来。 要链接到远程的Docker deamon,你应该安装Docker客户端:
choco install docker -y
复制代码choco install docker -y
你能够连到minkube上远程的Docker daemon:
@FOR /f "tokens=*" %i IN ('minikube docker-env') DO @%i
复制代码@FOR /f "tokens=*" %i IN ('minikube docker-env') DO @%i
注意:每次你打开一个新的命令行窗口,你都须要以上命令。一种提醒你本身的简单方式是敲一下minikube docker-env。 若是链接成功,你能够列出当前正在运行的容器:
docker ps
复制代码docker ps
你会看到不少容器正在运行。大部分属于Kubernetes。 你已经一切准备就绪! 可是在你继续以前,你须要清楚使用minikube做为你远程Docker daemon的一些限制。 Docker被设计为两个部分:
Docker daemon ——你能够将它理解为一个API server。你把命令发给它的API,Docker接收而后执行命令。nginx
Docker CLI —— 将命令发送给Daemon API的可执行文件。laravel
docker run -ti -p 8080:80 nginx
复制代码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
复制代码minikube ip
你能够经过http://your_minikube_ip:8080来访问,看到Nignx的欢迎页面。
测试你的Docker安装
你已经安装好了Docker,那你如何知道它是否工做正常呢? 进入到终端,输入:
docker run -ti -p 8080:80 wordpress
复制代码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面板。
kubectl run smashing --image=/visibilityspots/smashing --port=3030
复制代码kubectl run smashing --image=/visibilityspots/smashing --port=3030
一旦Kubernetes完成了容器的安装,你能够查看运行状态:
kubectl get pods
复制代码kubectl get pods
暴露面板
你能够将你部署的服务器暴露出来:
kubectl expose deployment smashing --type=NodePort
复制代码kubectl expose deployment smashing --type=NodePort
你能够经过浏览器打开面板:
minikube service smashing
复制代码minikube service smashing
这样你就能够从Kubernetes里面访问面板了! 万岁! 鸟瞰Kubernetes
Minikube自己自带了一些好东西。 你能够访问官方自带的面板:
minikube dashboard
复制代码minikube dashboard
总结
https://chocolatey.org/installdocker
https://learnk8s.io/blog/installing-docker-and-kubernetes-on-windows#testing-your-docker-installationshell
https://learnk8s.io/blog/deploying-laravel-to-kubernetes数据库