CodeGym /Adesua ahorow /Docker SELF /使用 Docker 的原因

使用 Docker 的原因

Docker SELF
等級 10 , 課堂 3
開放

9.1 微服務架構

Docker 成為現代開發中不可缺少的工具。它有助於在隔離的容器中創建、運行和部署應用程式,讓它們更加方便、穩定且易於操作。在這堂課中,我們會看看一些例子,說明 Docker 是如何大大簡化開發者與管理員的生活。

問題

開發單體應用程式經常會遇到維護和擴展的困難。當其中某部分進行改動時可能會影響其他部分,導致更新和測試變得複雜。

Docker 的解決方案

Docker 允許你採用微服務架構,把每個服務包裝進獨立的容器內。這樣可確保微服務之間的獨立性與隔離性。

範例

比方說,你有一個應用程式包含三個微服務:使用者、訂單和付款。透過 Docker 可以建立三個容器:

Terminal

docker run -d --name users-service users-image
docker run -d --name orders-service orders-image
docker run -d --name payment-service payment-image 

9.2 持續整合與交付 (CI/CD)

問題

開發、測試和部署常常需要花費很多時間,尤其是環境之間存在差異的時候。

Docker 的解決方案

Docker 幫助創建相同的環境來涵蓋開發的所有階段。這保證了應用程序無論在哪裡都能以相同的方式運行 —— 從開發到生產環境。

示例

使用 Docker 配置 CI/CD 可以自動化構建、測試和部署過程:

構建鏡像:

Terminal


docker build -t my-app .

運行測試:

Terminal


docker run my-app ./run-tests.sh

部署:

Terminal


docker push my-app:latest
ssh user@production-server "docker pull my-app:latest && docker run -d my-app"

9.3 可攜性與一致性

問題

常常應用程式能在一台機器上運作,但在另一台機器上卻無法啟動,原因是設定或依賴版本不同。

使用 Docker 的解決方案

Docker 可以將應用程式及其所有依賴打包進一個容器,保證可以在任何環境中運作。

範例

使用 Dockerfile 可以描述依賴以及啟動應用程式的命令:

dockerfile

FROM node:14
WORKDIR /app
COPY package.json .
RUN npm install
COPY . .
CMD ["npm", "start"]

現在應用程式可以穩定地運作於本地機器、伺服器或雲端。

9.4 確保安全性

問題

部署應用程式可能會有漏洞,特別是當使用第三方庫和工具的時候。

Docker 的解決方案

Docker 提供容器隔離功能,降低風險。容器獨立運行,限制對系統的影響。

範例

使用參數限制資源並提升安全性:

Terminal


docker run -d --name secure-app --memory="512m" --cpus="1" --security-opt=no-new-privileges my-secure-app

9.5 測試與自動化

問題

在不同配置中測試需要時間,並且可能會影響主要環境。

使用 Docker 的解決方案

Docker 可以建立隔離的測試環境,不會影響到主要的系統。

範例

在測試環境中啟動資料庫和應用程式的範例:

Terminal


docker run -d --name test-db -e POSTGRES_PASSWORD=mysecretpassword postgres
docker run -d --name test-app --link test-db:db my-app 

9.6 雲端運算與擴展

問題

在雲端中擴展應用程式可能很困難而且昂貴。

使用 Docker 的解決方案

Docker 通過與像 AWS、Azure 和 Google Cloud 等雲端平台集成,簡化了擴展的過程。

例子

使用 Docker 和 Kubernetes,可以輕鬆地設置擴展。以下是 yaml 檔案的例子。現在可能有點難以理解,但隨著時間的推移,我們會弄清楚這一切。

yaml

apiVersion: apps/v1
kind: Deployment
metadata:
  name: my-app
spec:
  replicas: 3
  selector:
    matchLabels:
      app: my-app
  template:
    metadata:
      labels:
        app: my-app
    spec:
      containers:
        - name: my-app
          image: my-app:latest
          ports:
            - containerPort: 80
1
Опрос
Docker 的基本指令,  10 уровень,  3 лекция
недоступен
Docker 的基本指令
Docker 的基本指令
留言
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION