- 取得連結
- X
- 電子郵件
- 其他應用程式
1. 介紹與基礎概念
Docker 是什麼?
Docker 是一個開源的容器化平台,能夠幫助開發者將應用程式及其所有依賴打包成一個標準化的單位,確保應用程式在不同環境中能夠一致運行。容器技術讓開發者能夠更輕鬆地管理應用程式的部署、擴展和運行,從而提升開發和運維效率。
容器化的優勢與應用場景
相比傳統的虛擬機(VM),Docker 容器具有更輕量化、啟動速度快、資源佔用少的優勢,適用於微服務架構、雲端運算、持續整合與持續部署(CI/CD)等場景。
Docker 的核心組件
-
映像檔(Image):應用程式的執行環境及依賴包。
-
容器(Container):根據映像檔啟動的運行實例。
-
倉庫(Registry):儲存與分發 Docker 映像檔的服務,如 Docker Hub。
Docker 的安裝與基本配置
Docker 支援 Windows、macOS 和 Linux,可從官方網站下載並安裝。
2. Docker 基本操作
使用 Docker Hub 查找與下載映像檔
docker search nginx # 查找官方的 Nginx 映像檔
docker pull nginx # 下載 Nginx 映像檔
建立與運行 Docker 容器
docker run -d -p 8080:80 nginx # 啟動 Nginx 容器,映射到本機的 8080 端口
管理容器
docker ps # 查看運行中的容器
docker stop <container_id> # 停止容器
docker rm <container_id> # 刪除容器
進入容器環境與查看日誌
docker exec -it <container_id> /bin/bash # 進入容器內部
docker logs <container_id> # 查看容器日誌
3. 建立與管理 Docker 映像檔
編寫 Dockerfile 並建立自訂映像檔
FROM python:3.9
WORKDIR /app
COPY . .
RUN pip install -r requirements.txt
CMD ["python", "app.py"]
docker build -t my-python-app .
docker run -d -p 5000:5000 my-python-app
推送映像檔到 Docker Hub
docker tag my-python-app username/my-python-app
docker push username/my-python-app
4. Docker 網路與數據管理
Docker 的網路模式
-
Bridge(橋接網路):適用於單機內部網絡通訊。
-
Host(主機網路):容器直接使用主機網路。
-
自訂網路:可手動配置子網、IP 位址。
Docker Volume 與 Bind Mount
docker volume create mydata # 創建數據卷
docker run -v mydata:/app/data my-python-app # 掛載數據卷
5. 在本地與雲端部署應用
使用 Docker Compose 管理多容器應用
version: '3'
services:
web:
image: nginx
ports:
- "8080:80"
app:
image: my-python-app
depends_on:
- db
db:
image: mysql
environment:
MYSQL_ROOT_PASSWORD: example
docker-compose up -d # 啟動多容器應用
雲端部署
Docker 可與 AWS ECS、Google Cloud Run、Azure 容器服務整合,實現高效的雲端部署。
6. 持續集成與持續部署(CI/CD)
使用 GitHub Actions 自動化部署
jobs:
build:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v2
- name: Build Docker Image
run: docker build -t my-app .
- name: Push to Docker Hub
run: docker push my-app
7. 容器監控與安全性
使用 Prometheus、Grafana 監控容器
services:
prometheus:
image: prom/prometheus
ports:
- "9090:9090"
grafana:
image: grafana/grafana
ports:
- "3000:3000"
安全最佳實踐
-
使用 最小權限原則,避免以 root 身份運行容器。
-
啟用 映像檔掃描 來檢測潛在漏洞。
-
使用 資源隔離(如 cgroups、Seccomp) 保護系統安全。
8. 實戰範例與最佳實踐
範例 1:使用 Nginx 反向代理應用
server {
listen 80;
location / {
proxy_pass http://app:5000;
}
}
範例 2:部署 MySQL 容器並持久化數據
docker run -d -p 3306:3306 --name mysql -e MYSQL_ROOT_PASSWORD=example -v mysql_data:/var/lib/mysql mysql
9. 結論與未來趨勢
Docker 改變了開發與部署的方式,使得應用程式能夠在不同環境中輕鬆運行。隨著雲原生技術的發展,Kubernetes、Serverless 和 WebAssembly 也成為重要的趨勢,建議開發者持續關注並學習。
!
留言
發佈留言