今天我們將探討如何利用 Docker Desktop 來佈署容器化應用程式至Kubernetes。Docker Desktop 是一個方便且常見的工具,它讓我們在本機測試和開發 Kubernetes 應用,而不需要額外的雲端服務。對於想要在本機探索 Kubernetes 的開發者來說,這是一個非常好的起手方式。
Kubernetes (K8s) 是一個開源的平台,用來自動化應用程式的佈署、擴展和管理。它提供了容器化(containerized)應用程式的功能,能夠管理應用程式的可擴展性和容錯能力,讓你的應用程式更具延展性,能快速響應變化。Kubernetes 的核心功能包括:
若要使用本機環境進行 Kubernetes 的操作,Docker Desktop 是一個非常方便的工具,內建支援 Kubernetes。以下是安裝 Docker Desktop 並啟用 Kubernetes 的步驟:
安裝與啟用完成後,開啟命令提示字元 (CMD) 或 PowerShell,輸入以下命令來檢查 Kubernetes 是否已正確啟動:
kubectl version --client
如果看到 Kubernetes 的客戶端版本資訊,表示 Kubernetes 已成功啟用。
以下是如何使用 Docker Desktop 的 Kubernetes 來佈署應用程式的步驟:
首先,確保你已經在本機編寫好 Dockerfile
並能成功構建 Docker 映像。
Dockerfile
# 使用 Python 3.9 的官方映像作為基礎映像
FROM python:3.9-slim
# 設定工作目錄
WORKDIR /app
# 將當前目錄的內容複製到容器中的 /app 目錄
COPY . /app
# 安裝應用程式依賴
RUN pip install --no-cache-dir -r requirements.txt
# 暴露應用程式運行的連接埠
EXPOSE 5000
# 定義容器啟動時執行的命令
CMD ["python", "app.py"]
FROM python:3.9-slim
:
使用 Python 3.9 的官方映像作為基礎映像。這是比較輕量級的 slim 版本,適合運行應用程式而非完整開發環境。
WORKDIR /app
:
設定容器的工作目錄為 /app,應用程式的所有操作將在此目錄中進行。
COPY . /app
:
將當前目錄中的所有文件複製到容器的 /app 目錄中,這包括應用程式的所有檔案。
RUN pip install --no-cache-dir -r requirements.txt
:
使用 pip 安裝應用程式所需的依賴項,這些依賴項會在 requirements.txt 中指定。--no-cache-dir 參數是為了減少 Docker 映像的大小,避免緩存安裝包。
EXPOSE 5000
:
告訴 Docker 容器應用程式將使用連接埠 5000,這在 Kubernetes 或其他容器管理系統中設定服務時很有用。
CMD ["python", "app.py"]
:
定義容器啟動時要執行的命令,這裡是執行 Python 應用程式 app.py。
使用以下命令來構建 Docker 映像:
docker build -t myapp:v1 .
這會構建一個名稱為 myapp
且版本為 v1
的映像。
接著,我們需要撰寫 Kubernetes 的佈署配置檔,這個文件會告訴 Kubernetes 如何佈署應用程式。
deployment.yaml:
apiVersion: apps/v1 # 指定 API 版本為 apps/v1,這是用來定義 Deployment 資源的 API 版本
kind: Deployment # 資源的類型,這裡是 Deployment,表示應用的佈署
metadata:
name: myapp-deployment # 佈署的名稱,用來識別這個 Deployment 資源
spec: # 定義佈署的具體配置
replicas: 2 # 指定應用程式運行的副本數量,也就是要啟動兩個容器實例
selector: # 用來選擇哪個 Pod 會與這個佈署匹配,根據標籤匹配
matchLabels:
app: myapp # 與 Pod 中的 labels 相匹配,選擇 app: myapp 的 Pod
template: # 定義 Pod 的樣板,告訴 Kubernetes 如何創建 Pod
metadata:
labels:
app: myapp # 定義 Pod 的標籤,標籤用來與 selector 進行匹配
spec: # 定義 Pod 的具體配置
containers: # 容器定義,這裡定義了在 Pod 中運行的容器
- name: myapp # 容器的名稱,這裡是 myapp
image: myapp:v1 # 使用的 Docker 映像名稱,這裡使用本地或映像庫中的 myapp:v1
ports:
- containerPort: 5000 # 暴露容器的 5000 連接埠,應用程式在這個連接埠上運行
這個檔案定義了一個應用佈署,指定使用本機的 myapp:v1
映像,主要用來告訴 Kubernetes 如何管理應用程式的 Pod 副本,並確保應用程式能夠正常運行。透過指定 Docker 映像與配置,Kubernetes 將自動化應用的佈署過程,並在需要時調整副本數量。
apiVersion: apps/v1
:
指定 Kubernetes API 版本。apps/v1
是用來處理 Deployment 資源的標準 API 版本。
kind: Deployment
:
表示這個資源的類型是 Deployment,Kubernetes 會依照這個佈署應用程式,並管理應用程式的生命周期和擴展。
metadata.name: myapp-deployment
:
定義佈署的名稱 myapp-deployment
。這個名稱在 Kubernetes 叢集中是唯一的,可以用來查詢或管理這個 Deployment。
spec.replicas: 2
:
指定運行這個應用程式的實例數量,這裡設定為 2,表示 Kubernetes 會啟動兩個副本,分別運行應用程式的兩個容器。
spec.selector.matchLabels
:
用來選擇符合條件的 Pod,這裡匹配標籤 app: myapp
,用來確保 Kubernetes 管理的 Pod 與這個 Deployment 是一致的。
template
:
用來定義 Pod 的樣板,告訴 Kubernetes 如何為這個 Deployment 創建 Pod。
template.metadata.labels
:
定義 Pod 的標籤,這裡的標籤是 app: myapp
,這個標籤將會用來與 Deployment 的 selector 進行匹配。
template.spec.containers
:
定義 Pod 中要運行的容器。這裡只有一個名為 myapp
的容器,並使用 myapp:v1
映像來啟動應用程式。
containerPort: 5000
:
指定容器運行的應用程式連接埠為 5000,這告訴 Kubernetes 這個應用程式的服務將在這個連接埠上進行通訊。
運行以下命令將 deployment.yaml
佈署到 Docker Desktop 的 Kubernetes 叢集上:
kubectl apply -f deployment.yaml
使用以下命令來檢查應用是否成功佈署:
kubectl get pods
你應該能夠看到應用的兩個pod正在運行。
今天我們學習了如何安裝 Docker Desktop 並啟用其內建的 Kubernetes,接著展示了如何將本機的容器化應用程式佈署到 Kubernetes 叢集中。這樣的流程讓我們能夠在本機測試 Kubernetes 佈署,為日後的雲端佈署打下基礎~
明天我們會試著把容器佈署至 Azure Kubernetes Service (AKS) 上,敬請期待!