推荐工具组合: - GitLab CI/CD - Jenkins - GitHub Actions - CircleCI
实现步骤:
FROM node:14-alpine
WORKDIR /app
COPY package*.json ./
RUN npm install
COPY . .
RUN npm run build
EXPOSE 3000
CMD ["npm", "start"]
version: '3.8'
services:
web:
build: .
ports:
- "3000:3000"
restart: always
stages:
- build
- deploy
build_image:
stage: build
script:
- docker-compose build
- docker tag myapp:latest myregistry.com/myapp:${CI_COMMIT_SHORT_SHA}
- docker push myregistry.com/myapp:${CI_COMMIT_SHORT_SHA}
deploy_prod:
stage: deploy
script:
- ssh user@server "docker pull myregistry.com/myapp:${CI_COMMIT_SHORT_SHA}"
- ssh user@server "docker-compose -f /path/to/docker-compose.yml up -d"
when: manual
only:
- master
对于更复杂的场景,推荐使用Kubernetes:
apiVersion: apps/v1
kind: Deployment
metadata:
name: myapp
spec:
replicas: 3
selector:
matchLabels:
app: myapp
template:
metadata:
labels:
app: myapp
spec:
containers:
- name: myapp
image: myregistry.com/myapp:${IMAGE_TAG}
ports:
- containerPort: 3000
# 回滚到上一个版本
docker service update --image myapp:previous-tag myapp_service
# 拉取旧版本镜像
docker pull myregistry.com/myapp:old-version-tag
# 更新服务
docker-compose -f docker-compose.yml up -d
# 查看部署历史
kubectl rollout history deployment/myapp
# 回滚到特定版本
kubectl rollout undo deployment/myapp --to-revision=2
镜像版本控制:
latest
标签在生产环境健康检查:
HEALTHCHECK --interval=30s --timeout=3s \
CMD curl -f http://localhost:3000/health || exit 1
蓝绿部署/金丝雀发布:
监控与日志:
基础设施即代码:
通过以上方案,您可以实现Docker容器的全自动化部署和快速回滚,提高部署效率并降低风险。