在Linux环境下使用Docker进行容器化部署时,版本管理和发布管理是关键环节。以下是系统化的解决方案:
镜像标签规范
v1.2.3
)-prod
/-staging
)build-8a3b2c1
)docker build -t myapp:v1.0.0-prod .
docker tag myapp:v1.0.0-prod registry.example.com/myapp:v1.0.0
私有镜像仓库
docker push registry.example.com/myapp:v1.0.0
版本控制实践
latest
标签生产环境bash
# 新版本启动
docker run -d --name myapp-v2 -p 8081:80 myapp:v2.0.0
nginx
upstream myapp {
server old_container:8080;
server new_container:8081 backup;
}
# 使用docker-compose v3+的滚动更新
version: '3.8'
services:
web:
image: myapp:v1.0.1
deploy:
replicas: 3
update_config:
parallelism: 1
delay: 10s
GitLab CI示例
stages:
- build
- deploy
build_image:
stage: build
script:
- docker build -t $CI_REGISTRY_IMAGE:$CI_COMMIT_SHA .
- docker push $CI_REGISTRY_IMAGE:$CI_COMMIT_SHA
deploy_prod:
stage: deploy
when: manual
script:
- docker stack deploy -c docker-compose.prod.yml myapp
版本回滚
# 快速回滚到上一版本
docker service update --image myapp:v1.0.0 myapp_web
工具类型 | 推荐方案 |
---|---|
镜像仓库 | Harbor/Amazon ECR |
编排工具 | Docker Swarm/Kubernetes |
配置管理 | Ansible/Terraform |
监控日志 | Prometheus/ELK |
bash
docker run -e APP_ENV=prod -v ./config:/config myapp:v1.0.0
bash
HEALTHCHECK --interval=30s CMD curl -f http://localhost/health || exit 1
通过以上方法可实现: - 可追溯的版本控制 - 零停机时间发布 - 快速回滚能力 - 标准化交付流程
实际实施时需根据团队规模选择合适方案,小型项目可从Docker Compose+Git Tag开始,复杂系统建议采用Kubernetes+Helm的组合方案。