在Windows上學習Docker和Kubernetes,開始的時候會讓你覺得無從下手。最起碼安裝好這些軟件都不是一件容易的事情。實際上,你應該對Docker和Kubernetes相當熟悉了才知道如何選擇安裝時啟用哪些參數選項。
但是不要擔心!
這篇文章就是為在Winodws上剛剛入門容器和Kubernetes的同學而准備的。
你將會學習到如何做出正確的選擇來搭建Windows上的容器開發環境。
讓我們從Docker說起。
不幸的是並不是所有的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就能夠構建和運行容器了。
答案是不一定!
Docker for Windows使用的hypvervisor是相當強大的——它屬於
你不能在同一台機器上同時運行Type 1和Type 2的hypervisor。換句話說,如果你運行Docker for Windows,那你就無法啟動VirtualBox里面的VM了。
這跟你的設置相關,影響可大可小。
如果你已經完全使用容器化了,你就不需要擔心VM——過時的東西。
但是如果你仍然要使用VM,以及類似Vagrant這樣的工具,那你可能就有麻煩了。
你可以隨意的啟用或者關閉Hyper-V hypervisor,但是你要重啟機器。
如果你頻繁的要從容器切換到VM,那可能使用minikube更方便。當你從容器切換到VM的時候就不用重啟電腦了。 缺點就是你沒辦法得到更高性能和更好體驗。
最后,如果你要運行Windows容器——
Minikube是一個預裝有嵌入式Linux(Buildroot)和Docker daemon的VM。
它是一個最小完整的Kubernetes環境。
Minikube的VM可以通過VirtualBox或者Hyper-V來運行( 當然也有其他選擇)。如果你已經有Hyper-V也要用它來跑Docker和minikube的話就會很方便。
當然如果你不能跑Hyper-V也沒關系,你可以用VirtualBox實現同樣的功能。
有很多的選擇和權衡,下圖列出了一些:
你要去到官網找到正確的下載地址,選擇正確的版本,下載安裝,最后加到你的path里面去。
這當然可行,但是我敢肯定你更願意把時間花在編碼而不是從網站上下載安裝軟件包上。
使用Chocolatey
Chocolatey是一個Widnows的包管理器。你告訴它想要安裝的包,它會為你裝好。你把軟件安裝的活外包給它了。
安裝Chocolatey很簡單,你可以在它的 官方網站找到步驟。簡單來說,就這么幾步:
1、以管理員啟動
2、執行下面這個命令:
3、重新加載
如果安裝成功,那么你可以搜索軟件包:
我們來試一把,安裝 Cmder——一個Windows上的時尚shell:
Chocolatey會安裝到
看起來不錯!
重啟你的電腦。Docker會問你是否要啟用Hyper-V。
選擇Yes。
你需要知道Docker需要啟用VT-X/AMD-v的硬件虛擬化擴展來運行容器。你需要在重啟電腦時在BIOS里面配置它。
你可以用systeminfo命令來檢查VT-x/AMD-v是否打開。
如果你不確定VT-x/AMD-v是否打開,也不用擔心。因為你沒有的話,Docker會報錯:
另一個常見問題是Hyper-V沒有啟用,這樣你會見到如下錯誤:
你應該啟用Hyper-V。以管理員打開新的命令提示符,敲入:
你重啟電腦之后Docker就應該可以啟動了。
但如何知道Docker已經跑起來了呢?
打開命令提示符:
如果一切正常,那么你會看見輸出一個空的列表(正在運行的容器列表)。
如果Docker deamon沒有運行的話,你可能就會遇到如下錯誤:
上面的錯誤表示你的Docker安裝不正常,Docker無法啟動。
你應該先啟動Docker daemon,然后再連接它。
在啟動集群之前,你應該先創建一個外部的網絡交換機。
第一步,你應該先查看你電腦的網絡適配器。
你應該忽略掉虛擬網卡,而關注在真實活躍的物理網卡上,比如Ethernet或者WiFi。
選擇好物理網卡讓它與虛擬交換機共享網絡連接。
要查看你當前的網絡適配器,你可以在PowerShell里面使用Get-NetAdapter cmdlet。
點擊左下角的Windows圖標,輸入PowerShell來打開它:
輸入如下命令來列出所有的適配器:
如果你還是不知道該選哪個,那么就選擇Up狀態的那個。
一旦你選擇好了適配器,你就可以開始創建外部虛擬交換機了:
如果你沒有創建好網絡交換機,那么啟動minikube的時候會報如下錯誤:
但是不要擔心!
這篇文章就是為在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:
注意:容器本身暴露的是80,你把它映射到了8080。
然后你可以訪問 http://localhost:8080然后看見Nginx的歡迎頁面。
如果你在遠程的Docker daemon上運行此命令然后訪問這個URL時,你會發現什么也沒有,URL不可達。
所以有什么不同?
Docker deamon負責運行容器和端口轉發。
Docker for Windows的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(翻譯:姚洪)












