9.1 微服務架構
Docker 成為現代開發中不可缺少的工具。它有助於在隔離的容器中創建、運行和部署應用程式,讓它們更加方便、穩定且易於操作。在這堂課中,我們會看看一些例子,說明 Docker 是如何大大簡化開發者與管理員的生活。
問題
開發單體應用程式經常會遇到維護和擴展的困難。當其中某部分進行改動時可能會影響其他部分,導致更新和測試變得複雜。
Docker 的解決方案
Docker 允許你採用微服務架構,把每個服務包裝進獨立的容器內。這樣可確保微服務之間的獨立性與隔離性。
範例
比方說,你有一個應用程式包含三個微服務:使用者、訂單和付款。透過 Docker 可以建立三個容器:
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 可以自動化構建、測試和部署過程:
構建鏡像:
docker build -t my-app .
運行測試:
docker run my-app ./run-tests.sh
部署:
docker push my-app:latest
ssh user@production-server "docker pull my-app:latest && docker run -d my-app"
9.3 可攜性與一致性
問題
常常應用程式能在一台機器上運作,但在另一台機器上卻無法啟動,原因是設定或依賴版本不同。
使用 Docker 的解決方案
Docker 可以將應用程式及其所有依賴打包進一個容器,保證可以在任何環境中運作。
範例
使用 Dockerfile 可以描述依賴以及啟動應用程式的命令:
FROM node:14
WORKDIR /app
COPY package.json .
RUN npm install
COPY . .
CMD ["npm", "start"]
現在應用程式可以穩定地運作於本地機器、伺服器或雲端。
9.4 確保安全性
問題
部署應用程式可能會有漏洞,特別是當使用第三方庫和工具的時候。
Docker 的解決方案
Docker 提供容器隔離功能,降低風險。容器獨立運行,限制對系統的影響。
範例
使用參數限制資源並提升安全性:
docker run -d --name secure-app --memory="512m" --cpus="1" --security-opt=no-new-privileges my-secure-app
9.5 測試與自動化
問題
在不同配置中測試需要時間,並且可能會影響主要環境。
使用 Docker 的解決方案
Docker 可以建立隔離的測試環境,不會影響到主要的系統。
範例
在測試環境中啟動資料庫和應用程式的範例:
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 檔案的例子。現在可能有點難以理解,但隨著時間的推移,我們會弄清楚這一切。
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
GO TO FULL VERSION