不借助 Docker Desktop 在Mac上開發(fā)容器應(yīng)用

file

鏡像下載、域名解析、時(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)境。

file

本文將借助 hyperkit驅(qū)動來在MacOS上創(chuàng)建一個(gè)虛擬機(jī)來配置Minikube環(huán)境。

首先卸載 Docker Desktop

打開 Preference -> TroubleShoot 頁面,點(diǎn)擊 Uninstall

file

安裝配置 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...
file

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' 插件
file

如果大家需要使用 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í)間。

原文來源:https://developer.aliyun.com/article/815063

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容