🔧 阿川の電商水電行
Shopify 顧問、維護與客製化
💡
小任務 / 單次支援方案
單次處理 Shopify 修正/微調
⭐️
維護方案
每月 Shopify 技術支援 + 小修改 + 諮詢
🚀
專案建置
Shopify 功能導入、培訓 + 分階段交付

在現代軟體開發中,Docker 和 Kubernetes 經常被同時提及,但它們解決的問題卻截然不同。 Docker 可以輕鬆地將應用程式打包到容器中。 Kubernetes 則負責將這些容器在多台伺服器上大規模執行,確保可靠性和自動化

雖然我之前關於 Docker 和 Kubernetes 的文章只是作業的一部分,但它引發了我對 DevOps 領域以及 Docker 和 Kubernetes 的思考和好奇。由於之前使用過 Docker,這次研究確實拓寬了我的理解。


在本教程中,我們將:

  1. 使用 Docker 建立一個簡單的應用程式。

  2. 將容器映像推送到 Docker Hub(一個註冊表)。

  3. 在 Kubernetes 上部署應用程式。

  4. 擴大規模並探索 Kubernetes 如何管理它。

在這個過程中,我會解釋每個步驟,這樣您不僅可以複製命令,還可以真正了解正在發生的事情(這是我從與客戶合作時得到的反饋,客戶說我的文章缺乏技術深度,只是充滿了複製<=>貼上程式碼)。


先決條件

在開始之前,請確保您已安裝以下內容:

   node -v

要驗證,請執行:

     docker --version

要驗證,請執行:

     kubectl version --client

執行 kubernetes 的 docker 桌面

我喜歡將 Docker Hub 視為容器映像的 GitHub。


將您的應用程式從本地擴展到雲端

建立一個簡單的 Node.js 應用程式

我們將建立一個返回簡單訊息的 Node.js 應用程式。

建立專案資料夾:

   mkdir docker-k8s-demo
   cd docker-k8s-demo

在資料夾中,建立一個名為app.js的檔案:

   const http = require('http');
   const port = 3000;

   const requestHandler = (req, res) => {
     res.end('Hello from Docker and Kubernetes!');
   };

   const server = http.createServer(requestHandler);

   server.listen(port, () => {
     console.log(`Server running on port ${port}`);
   });

建立package.json檔案:

   {
     "name": "docker-k8s-demo",
     "version": "1.0.0",
     "main": "app.js",
     "dependencies": {}
   }

此時,我們有一個簡單的 Node.js 應用程式。


編寫 Dockerfile 文件

編寫 Dockerfile

docker 建置工作流程

Dockerfile只是一個純文字檔案(沒有副檔名,通常名為Dockerfile ),用來告訴 Docker 如何建構映像。它位於專案的根目錄中。

建立一個名為Dockerfile的檔案:

# Start from the Node.js base image
FROM node:18-alpine

# Set working directory inside container
WORKDIR /usr/src/app

# Copy project files into container
COPY package*.json ./
COPY app.js ./

# Install dependencies
RUN npm install

# Expose the app’s port
EXPOSE 3000

# Start the app
CMD ["node", "app.js"]

建構圖像:

docker build -t myapp:1.0 .
  • -t myapp:1.0 → 將映像命名為myapp ,版本為1.0

  • .表示「使用此目錄中的 Dockerfile」。

成功建置 Docker 映像

如果執行正確且成功,您應該在終端上看到這樣的成功訊息。

執行 Docker 容器

執行docker容器:

docker run -p 3000:3000 myapp:1.0

連接埠開放成功

請造訪http://localhost:3000 。你應該看到:

Hello from Docker and Kubernetes!

來自 docker 和 kubernetes 的問候


如何將映像推送到 Docker Hub

將映像推送到 Docker Hub

Kubernetes 不會知道您的本地映像——它需要從註冊表中提取它。

登入 Docker Hub:

   docker login

成功訊息

您的終端上應該會看到這樣的成功訊息

使用您的 Docker Hub 使用者名稱標記您的映像:

   docker tag myapp:1.0 your-username/myapp:1.0

推一下:

   docker push your-username/myapp:1.0

現在您的映像已在 Docker Hub 中公開,可供 Kubernetes 使用。

上傳到 Kubernetes

您在此螢幕截圖中看到“圖層已存在”,因為我之前曾執行過此命令,但由於網路延遲而執行失敗。


在 Kubernetes 上部署 Docker 容器

docker 到 kubernetes 的工作流程

Kubernetes 部署需要一個 YAML 檔案來描述要執行的內容。

建立deployment.yaml檔:

apiVersion: apps/v1
kind: Deployment
metadata:
  name: myapp-deployment
spec:
  replicas: 3
  selector:
    matchLabels:
      app: myapp
  template:
    metadata:
      labels:
        app: myapp
    spec:
      containers:
      - name: myapp
        image: your-username/myapp:1.0
        ports:
        - containerPort: 3000
---
apiVersion: v1
kind: Service
metadata:
  name: myapp-service
spec:
  selector:
    app: myapp
  ports:
  - protocol: TCP
    port: 80
    targetPort: 3000
  type: LoadBalancer

應用它(在您的終端上執行):

kubectl apply -f deployment.yaml

檢查 pod:

kubectl get pods

此範例腳本建立了三個副本。在上一篇文章中,我解釋了什麼是副本以及它們與擴展問題的關係。

執行後,您應該會在終端機視窗中看到三個正在執行的 pod。

三個 Kubernetes Pod 正在執行

在您的終端機上,您應該會看到三個處於活動狀態並正在執行的 pod。

檢查服務:

kubectl get service myapp-service
  • 如果使用 Docker Desktop 或雲端 Kubernetes,您將獲得一個外部 IP。

kubernetes 外部 IP

  • 如果使用 Minikube:
  minikube service myapp-service

這將在您的瀏覽器中打開該應用程式。


使用 Kubernetes 擴充應用程式

使用 Kubernetes 擴充應用程式

在上面的範例中,我們擴展到了三個副本。隨著系統或應用程式的成長,需要更多的副本或實例才能有效地滿足需求。

透過執行此命令並輸入每次所需的副本數量,可以輕鬆完成此操作。

kubectl scale deployment myapp-deployment --replicas=5

Kubernetes 將自動啟動另外兩個 pod。


這個工作流程——使用 Docker 建置,使用 Kubernetes 部署——是雲端原生應用程式的基礎。 Docker 確保跨環境的一致性,而 Kubernetes 則確保生產環境中的可靠性。


💡喜歡這篇文章嗎?快來留言交流吧!

我很想聽聽您的想法和回饋。

我也願意就技術文章、文件或白皮書進行合作! 🚀


原文出處:https://dev.to/dumebii/from-docker-to-kubernetes-how-containers-go-from-local-to-cloud-37m1


精選技術文章翻譯,幫助開發者持續吸收新知。

共有 0 則留言


精選技術文章翻譯,幫助開發者持續吸收新知。
🏆 本月排行榜
🥇
站長阿川
📝27   💬6   ❤️8
682
🥈
我愛JS
📝2   💬13   ❤️4
188
🥉
御魂
💬1  
4
#4
2
評分標準:發文×10 + 留言×3 + 獲讚×5 + 點讚×1 + 瀏覽數÷10
本數據每小時更新一次
🔧 阿川の電商水電行
Shopify 顧問、維護與客製化
💡
小任務 / 單次支援方案
單次處理 Shopify 修正/微調
⭐️
維護方案
每月 Shopify 技術支援 + 小修改 + 諮詢
🚀
專案建置
Shopify 功能導入、培訓 + 分階段交付