
鏡像下載、域名解析、時(shí)間同步請點(diǎn)擊 阿里巴巴開源鏡像站
Docker Desktop是最為流行的開發(fā)者工具,Docker公司在 8/31 宣布對Docker Desktop的用戶協(xié)議進(jìn)行了變更,對個(gè)人開發(fā)者繼續(xù)免費(fèi),但是對商業(yè)開發(fā)者采取了收費(fèi)策略。最近很多同學(xué)來咨詢我相關(guān)的問題,我也就此做一個(gè)說明
解決方案
關(guān)于為 Docker Desktop 付費(fèi)流程,我們已經(jīng)和集團(tuán)采購團(tuán)隊(duì)進(jìn)行溝通,但是Docker公司的License授權(quán)有些復(fù)雜,如果是采購Pro版本,需要每個(gè)開發(fā)者自己付費(fèi),不支持批量采購。而Business版本,支持批量采購,但是咱們也不需要。還在跟進(jìn)其他可行性,我們會持續(xù)和大家溝通。
如果您只是需要運(yùn)行K8s環(huán)境,用阿里云容器服務(wù)ACK是最推薦的方案,沒有之一 :-)
如果您需要一個(gè)免費(fèi)的本地開發(fā)環(huán)境,也有較好的動手能力,可以參考本文內(nèi)容
Minikube 簡介
Minikube是社區(qū)一個(gè)流行的開源Kubernetes開發(fā)環(huán)境。為了幫助國內(nèi)的同學(xué)可以更加高效和無障礙地使用minikube進(jìn)行日常開發(fā),Minikube可以支持阿里云作為容器鏡像的mirror site。進(jìn)一步,在v1.24.0的官方 Minikube 中,已經(jīng)合并了由阿里云團(tuán)隊(duì)提交的一個(gè)方案,可以完美支持 Minikube 豐富的 addon 組件!
Minikube可以借助不同的 driver 實(shí)現(xiàn),在MacOS/Windows/Linux環(huán)境中創(chuàng)建Kubernetes運(yùn)行環(huán)境。

本文將借助 hyperkit驅(qū)動來在MacOS上創(chuàng)建一個(gè)虛擬機(jī)來配置Minikube環(huán)境。
首先卸載 Docker Desktop
打開 Preference -> TroubleShoot 頁面,點(diǎn)擊 Uninstall

安裝配置 Minikube以及相應(yīng) Docker 環(huán)境
安裝 hyperkit, Minikube,以及 Docker 命令行工具 (注:不包含運(yùn)行時(shí)環(huán)境)
$ brew install hyperkit
$ brew install minikube
$ brew install docker
體驗(yàn) Minikube 下面的 Kubernetes
創(chuàng)建Kubernetes環(huán)境最簡單的方案是使用如下命令
minikube start --image-mirror-country='cn'
minikube start 命令提供了非常多的配置參數(shù),
常用配置參數(shù)如下
-
--cpus=2: 為minikube虛擬機(jī)分配CPU核數(shù) -
--memory=2048mb: 為minikube虛擬機(jī)分配內(nèi)存數(shù) -
--registry-mirror=***: 為了提升拉取Docker Hub鏡像的穩(wěn)定性,可以為 Docker daemon 配置鏡像加速,參考阿里云鏡像服務(wù) 相關(guān)加速器配置 -
--kubernetes-version=***: minikube 虛擬機(jī)將使用的 kubernetes 版本。比如,創(chuàng)建 minikube 環(huán)境并且調(diào)整默認(rèn)資源配置
創(chuàng)建 minikube 運(yùn)行環(huán)境
$ minikube start --image-mirror-country='cn'
Darwin 11.6 上的 minikube v1.24.0
? 自動選擇 hyperkit 驅(qū)動
? 正在使用鏡像存儲庫 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 中準(zhǔn)備 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
正在驗(yàn)證 dashboard 運(yùn)行情況 ...
Launching proxy ...
正在驗(yàn)證 proxy 運(yùn)行狀況 ...
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 組件,就可以監(jiān)控 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/ 來學(xué)習(xí)使用
更多關(guān)于 Minikube 的使用信息可以參考 https://minikube.sigs.k8s.io/
創(chuàng)建不運(yùn)行 Kubernetes 的 Minikube
對不需要使用 Kubernetes的開發(fā)者,Minikube 在 v1.24 版本之后也提供對不運(yùn)行 Kubernetes 的 Minikube 環(huán)境的支持??梢愿庸?jié)省資源。
$ minikube start --no-kubernetes
Darwin 11.6 上的 minikube v1.24.0
? MINIKUBE_ACTIVE_DOCKERD=minikube
? 自動選擇 hyperkit 驅(qū)動
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 環(huán)境
首先配置 Docker 命令行工具的環(huán)境變量
$ eval $(minikube docker-env)
然后就可以利用熟悉的Docker命令行工具快樂地玩耍了
$ docker ps
$ docker images
創(chuàng)建如下的一個(gè)Dockerfile
FROM nginx
RUN echo 'Hello World!' > /usr/share/nginx/html/index.html
構(gòu)建并運(yùn)行鏡像
$ docker build -t test .
$ docker run -d -p 8080:80 test
測試鏡像,
$ curl $(minikube ip):8080
Hello World!
注意: Docker暴露出的host端口是在Minikube虛擬機(jī)上,所以需要使用minikube ip獲得虛擬機(jī)所在的IP。Docker Desktop進(jìn)一步優(yōu)化了開發(fā)者體驗(yàn),讓暴露的端點(diǎn)可以直接映射到本地。
我們?nèi)绾螌⒈镜匚募頀燧d到Docker容器中呢? 這個(gè)就是有點(diǎn)繞。首先,我們要知道Docker環(huán)境是運(yùn)行在Virtual Machine的虛擬機(jī)上,我們需要首先將本地卷,掛載到 Minikube 虛擬機(jī)上。
$ mkdir test
$ echo 'Just for test!' > test/test.txt
$ minikube mount ./test:/test
然后,我們可以在Docker鏡像中掛載Minikube 虛擬機(jī)上的卷,并進(jìn)行訪問
$ docker run --rm -it -v /test:/inside busybox cat /inside/test.txt
Just for test!
注意:Docker Desktop在這個(gè)場景下也提供了良好的用戶體驗(yàn),讓用戶忽略底層實(shí)現(xiàn)的復(fù)雜性。
總結(jié)
對于動手能力比較強(qiáng)的開發(fā)者,抱著生命不息,折騰不止的態(tài)度,不借助 Docker Desktop,也可以進(jìn)行本地的容器和Kubernetes開發(fā)。阿里云團(tuán)隊(duì)也為國內(nèi)開發(fā)者提供了良好的網(wǎng)絡(luò)訪問體驗(yàn)。如果大家有問題可以到Github上提Issue.
但是對于普通開發(fā)者,Docker Desktop 在開發(fā)體驗(yàn)上有很多的優(yōu)化,每個(gè)月 Pro版本 5$ 的價(jià)格也就是一杯星巴克咖啡,可以節(jié)省一些折騰的時(shí)間。