Docker Compose 命令實現動態構建和部署
一、編寫支持動態版本號的 docker-compose.yml
version: '3.8'services:myapp:build: context: . # Dockerfile所在目錄args:APP_VERSION: ${TAG:-latest} # 從環境變量獲取版本號,默認latestimage: myapp:${TAG:-latest} # 鏡像名稱+動態標簽ports:- "8080:80"environment:- VERSION=${TAG}
關鍵配置說明:
-
版本注入機制
通過${TAG}
環境變量動態控制鏡像版本,可在.env
文件或命令行中定義該變量。 -
構建參數傳遞
build.args
將版本號傳遞到 Dockerfile 的構建階段(需在 Dockerfile 中聲明ARG APP_VERSION
)。 -
鏡像標簽策略
image: myapp:${TAG}
使得每次構建生成帶有唯一標簽的鏡像,避免覆蓋舊版本。
二、執行動態構建與部署的命令流程
1. 配置版本號
在項目根目錄創建 .env
文件(或通過命令行注入):
# .env 示例
TAG=v2.1.0
2. 構建并啟動容器
# 強制重建鏡像(即使Dockerfile未修改)
docker-compose up --build --force-recreate -d
3. 驗證版本更新
# 查看鏡像標簽
docker images | grep myapp# 查看容器環境變量中的版本
docker exec <container_id> env | grep VERSION
三、進階版本管理技巧
1. 多環境版本控制
通過不同環境文件切換版本:
# 開發環境
docker-compose -f docker-compose.yml --env-file .env.dev up# 生產環境
docker-compose -f docker-compose.yml --env-file .env.prod up
2. 并行構建加速
對于多服務場景,啟用并行構建:
docker-compose build --parallel # 利用多核CPU加速構建
3. 版本回滾操作
# 修改.env中的TAG為舊版本號后執行
docker-compose up -d --no-build # 直接使用舊鏡像啟動
四、配套 Dockerfile 示例
FROM nginx:alpineARG APP_VERSION # 接收構建參數
ENV VERSION=$APP_VERSION # 將版本注入容器環境COPY ./dist /usr/share/nginx/html
# 其他構建步驟...
五、注意事項
-
清理舊鏡像
定期運行docker image prune -a
清理無標簽鏡像,避免存儲膨脹。 -
版本變量穿透
若需在容器內使用版本號,需同時在environment
和build.args
中聲明。 -
Compose 文件兼容性
version: '3.8'
支持最新的 Docker API 特性,建議與 Docker Engine 版本匹配。
通過以上方案,每次修改 .env
中的 TAG
變量后執行 docker-compose up --build
,即可自動生成新版本鏡像并部署容器。此方法適用于 CI/CD 流水線中的版本化部署場景。