
Docker Desktop是最為流行的開發者工具,Docker公司在 8/31 宣布對Docker Desktop的使用者協定進行了變更,對個人開發者繼續免費,但是對商業開發者采取了收費政策。最近很多同學來咨詢我相關的問題,我也就此做一個說明
解決方案
- 關于為 Docker Desktop 付費流程,我們已經和集團采購團隊進行溝通,但是Docker公司的License授權有些複雜,如果是采購Pro版本,需要每個開發者自己付費,不支援批量采購。而Business版本,支援批量采購,但是咱們也不需要。還在跟進其他可行性,我們會持續和大家溝通。
- 如果您隻是需要運作K8s環境,用阿裡雲容器服務ACK是最推薦的方案,沒有之一 :-)
- 如果您需要一個免費的本地開發環境,也有較好的動手能力,可以參考本文内容
Minikube 簡介
Minikube是社群一個流行的開源Kubernetes開發環境。為了幫助國内的同學可以更加高效和無障礙地使用minikube進行日常開發,Minikube可以支援阿裡雲作為容器鏡像的mirror site。進一步,在v1.24.0的官方 Minikube 中,已經合并了由阿裡雲團隊送出的一個
方案,可以完美支援 Minikube 豐富的 addon 元件!
Minikube可以借助不同的 driver 實作,在MacOS/Windows/Linux環境中建立Kubernetes運作環境。
本文将借助 hyperkit驅動來在MacOS上建立一個虛拟機來配置Minikube環境。
首先解除安裝 Docker Desktop
打開 Preference -> TroubleShoot 頁面,點選 Uninstall
安裝配置 Minikube以及相應 Docker 環境
安裝 hyperkit, Minikube,以及 Docker 指令行工具 (注:不包含運作時環境)
$ brew install hyperkit
$ brew install minikube
$ brew install docker
體驗 Minikube 下面的 Kubernetes
建立Kubernetes環境最簡單的方案是使用如下指令
minikube start --image-mirror-country='cn'
minikube start
指令提供了非常多的配置參數,
常用配置參數如下
-
: 為minikube虛拟機配置設定CPU核數--cpus=2
-
: 為minikube虛拟機配置設定記憶體數--memory=2048mb
-
: 為了提升拉取Docker Hub鏡像的穩定性,可以為 Docker daemon 配置鏡像加速,參考 阿裡雲鏡像服務 相關加速器配置--registry-mirror=***
-
: minikube 虛拟機将使用的 kubernetes 版本。比如,建立 minikube 環境并且調整預設資源配置--kubernetes-version=***
建立 minikube 運作環境
$ minikube start --image-mirror-country='cn'
Darwin 11.6 上的 minikube v1.24.0
✨ 自動選擇 hyperkit 驅動
✅ 正在使用鏡像存儲庫 registry.cn-hangzhou.aliyuncs.com/google_containers
Starting control plane node minikube in cluster minikube
Creating hyperkit VM (CPUs=2, Memory=4000MB, Disk=20000MB) ...
正在 Docker 20.10.8 中準備 Kubernetes v1.22.3…
▪ Generating certificates and keys ...
▪ Booting up control plane ...
▪ Configuring RBAC rules ...
Verifying Kubernetes components...
▪ Using image registry.cn-hangzhou.aliyuncs.com/google_containers/storage-provisioner:v5
Enabled addons: storage-provisioner, default-storageclass
Done! kubectl is now configured to use "minikube" cluster and "default" namespace by default
開啟 Kubernetes 控制台
$ minikube dashboard
正在開啟 dashboard ...
▪ Using image registry.cn-hangzhou.aliyuncs.com/google_containers/metrics-scraper:v1.0.7
▪ Using image registry.cn-hangzhou.aliyuncs.com/google_containers/dashboard:v2.3.1
正在驗證 dashboard 運作情況 ...
Launching proxy ...
正在驗證 proxy 運作狀況 ...
Opening http://127.0.0.1:49996/api/v1/namespaces/kubernetes-dashboard/services/http:kubernetes-dashboard:/proxy/ in your default browser...
Minikube 也提供了豐富的 Addon 元件,比如我們開啟了 metrics-server 元件,就可以監控 Pod 的資源使用情況。
$ minikube addons enable metrics-server
▪ Using image registry.cn-hangzhou.aliyuncs.com/google_containers/metrics-server:v0.4.2
啟動 'metrics-server' 插件
如果大家需要使用 Ingress,可以參考
https://minikube.sigs.k8s.io/docs/handbook/addons/ingress-dns/來學習使用
更多關于 Minikube 的使用資訊可以參考
https://minikube.sigs.k8s.io/建立不運作 Kubernetes 的 Minikube
對不需要使用 Kubernetes的開發者,Minikube 在 v1.24 版本之後也提供對不運作 Kubernetes 的 Minikube 環境的支援。可以更加節省資源。
$ minikube start --no-kubernetes
Darwin 11.6 上的 minikube v1.24.0
▪ MINIKUBE_ACTIVE_DOCKERD=minikube
✨ 自動選擇 hyperkit 驅動
Starting minikube without Kubernetes minikube in cluster minikube
Creating hyperkit VM (CPUs=2, Memory=4000MB, Disk=20000MB) ...
Done! minikube is ready without Kubernetes!
Done! minikube is ready without Kubernetes!
╭───────────────────────────────────────────────────────────────────────────────────────╮
│ │
│ Things to try without Kubernetes ... │
│ │
│ - "minikube ssh" to SSH into minikube's node. │
│ - "minikube docker-env" to point your docker-cli to the docker inside minikube. │
│ - "minikube image" to build images without docker. │
│ │
╰───────────────────────────────────────────────────────────────────────────────────────╯
配置 Docker 環境
首先配置 Docker 指令行工具的環境變量
$ eval $(minikube docker-env)
然後就可以利用熟悉的Docker指令行工具快樂地玩耍了
$ docker ps
$ docker images
建立如下的一個Dockerfile
FROM nginx
RUN echo 'Hello World!' > /usr/share/nginx/html/index.html
建構并運作鏡像
$ docker build -t test .
$ docker run -d -p 8080:80 test
測試鏡像,
$ curl $(minikube ip):8080
Hello World!
注意: Docker暴露出的host端口是在Minikube虛拟機上,是以需要使用
minikube ip
獲得虛拟機所在的IP。Docker Desktop進一步優化了開發者體驗,讓暴露的端點可以直接映射到本地。
我們如何将本地檔案卷挂載到Docker容器中呢? 這個就是有點繞。首先,我們要知道Docker環境是運作在Virtual Machine的虛拟機上,我們需要首先将本地卷,挂載到 Minikube 虛拟機上。
$ mkdir test
$ echo 'Just for test!' > test/test.txt
$ minikube mount ./test:/test
然後,我們可以在Docker鏡像中挂載Minikube 虛拟機上的卷,并進行通路
$ docker run --rm -it -v /test:/inside busybox cat /inside/test.txt
Just for test!
注意:Docker Desktop在這個場景下也提供了良好的使用者體驗,讓使用者忽略底層實作的複雜性。
總結
對于動手能力比較強的開發者,抱着生命不息,折騰不止的态度,不借助 Docker Desktop,也可以進行本地的容器和Kubernetes開發。阿裡雲團隊也為國内開發者提供了良好的網絡通路體驗。如果大家有問題可以到
Github上提Issue.
但是對于普通開發者,Docker Desktop 在開發體驗上有很多的優化,每個月 Pro版本 5$ 的價格也就是一杯星巴克咖啡,可以節省一些折騰的時間。