1、安裝Docker Desktop
docker desktop官方下載鏈接,下載后一路點下來安裝就好了。
2、制作本地鏡像
跟著docker步驟制作鏡像,需要先配置docker 鏡像源,因為網絡問題
{"builder": {"gc": {"defaultKeepStorage": "20GB","enabled": true}},"debug": true,"dns": ["8.8.8.8","8.8.4.4"],"experimental": false,"features": {"buildkit": false},"insecure-registries": ["registry.docker-cn.com","docker.mirrors.ustc.edu.cn"],"registry-mirrors": ["https://docker.registry.cyou","https://docker-cf.registry.cyou","https://dockercf.jsdelivr.fyi","https://docker.jsdelivr.fyi","https://dockertest.jsdelivr.fyi","https://mirror.aliyuncs.com","https://dockerproxy.com","https://mirror.baidubce.com","https://docker.m.daocloud.io","https://docker.nju.edu.cn","https://docker.mirrors.sjtug.sjtu.edu.cn","https://docker.mirrors.ustc.edu.cn","https://mirror.iscas.ac.cn","https://docker.rainbond.cc","https://do.nark.eu.org","https://dc.j8.work","https://dockerproxy.com","https://gst6rzl9.mirror.aliyuncs.com","https://registry.docker-cn.com","http://hub-mirror.c.163.com","http://mirrors.ustc.edu.cn/","https://mirrors.tuna.tsinghua.edu.cn/","http://mirrors.sohu.com/"]
}
git clone https://github.com/docker/welcome-to-docker
cd welcome-to-docker
檢查dockerfile,并執行
docker build -t welcome-to-docker .
制作好之后,images列表就有了:
?
3、在docker desktop運行鏡像
?在Images列表,找到鏡像,點擊三角形run,指定端口,就可用運行。
例如名字是hello-docker,端口是8090,運行后,就會在Containers中出現,可查看日志、執行命令。
3、開啟Kubenetes
如果需要Kubenetes管理鏡像,可用在docker desktop開啟,因為網絡原因,要從阿里云鏡像源下載kubenetes的鏡像。
clone??k8s-for-docker-desktop?這個項目,找到?load_images.ps1
?這個 powershell 文件,直接運行,
在powershell中執行
./load_images.ps1?
如果沒有權限,可用先執行
Set-ExecutionPolicy RemoteSigned
images.properties
?文件中列到的鏡像可以看到kubenetes的版本,注意要與Docker Desktop的相同。
這樣就把kubenetes的鏡像拉下來了。
然后點擊設置,啟用Kubenetes
Apply&Restart之后,左下角就看見Kubenetes running了。
4、在Kubenetes運行鏡像
剛剛制作的鏡像要在kubenetes運行,就需要一個k8s.yaml
apiVersion: apps/v1
kind: Deployment
metadata:name: hello-docker-deployment # 部署的名稱namespace: defaultlabels:app: hello-docker # 給資源打標簽,便于篩選和管理
spec:replicas: 2 # 定義副本數量以確保高可用selector:matchLabels:app: hello-docker # 匹配 Pod 的標簽,確保服務與 Pod 綁定template:metadata:labels:app: hello-docker # Pod 的標簽,需與 selector 對應spec:containers:- name: hello-docker # 容器名稱imagePullPolicy: Neverimage: welcome-to-docker:latest # 使用構建的鏡像名稱和標簽,從遠程倉庫拉取鏡像ports:- containerPort: 3000 # 容器內部監聽的端口env:- name: FLASK_APPvalue: "app.py" # 設置 Flask 的主程序文件- name: FLASK_ENVvalue: "production" # 設置 Flask 的運行環境- name: PYTHONDONTWRITEBYTECODEvalue: "1" # 禁止生成 .pyc 文件- name: PYTHONUNBUFFEREDvalue: "1" # 設置 Python 日志為非緩沖模式resources: # 資源限制requests:memory: "128Mi" # 請求的最小內存cpu: "250m" # 請求的最小 CPUlimits:memory: "256Mi" # 最大允許使用的內存cpu: "500m" # 最大允許使用的 CPUlivenessProbe: # 存活探針,用于檢測服務是否存活httpGet:path: "/" # 檢測的路徑port: 3000 # 檢測的端口initialDelaySeconds: 5 # 初始延遲periodSeconds: 10 # 檢測間隔readinessProbe: # 就緒探針,用于檢測服務是否準備好接收流量httpGet:path: "/" # 檢測的路徑port: 3000 # 檢測的端口initialDelaySeconds: 5 # 初始延遲periodSeconds: 10 # 檢測間隔restartPolicy: Always # 容器策略:始終重啟
---
apiVersion: v1
kind: Service
metadata:name: hello-docker-service # 服務的名稱labels:app: hello-docker # 標簽與 Deployment 一致
spec:selector:app: hello-docker # 匹配 Deployment 的標簽ports:- protocol: TCPnodePort: 30008 # 可以省略,Kuberrnetes 會自動分配一個端口 范圍 30000-32767port: 3000 # 服務暴露的端口targetPort: 3000 # 轉發到容器的端口type: NodePort # 服務類型,NodePort 通過在每個 Node 上打開一個特定端口,將外部請求轉發到集群內部的Service,進而達到后端的Pod
然后執行命令即可(這里本地運行的關鍵是yaml的? imagePullPolicy: Never,不然就要將鏡像推送到docker倉庫才行)
kubectl create -f k8s.yaml
?因為k8s.yaml定義了30008端口映射3000,所以使用http://localhost:30008/訪問即可:
參考資料:在 Docker Desktop 中啟用 K8s 服務 - 墨墨墨墨小宇 - 博客園