使用 Docker 的示例部署工作流



设置项目

为应用程序中的每个服务定义 Dockerfile(例如,Web 应用程序、数据库)。

如果您正在处理需要一起管理的多个服务,请编写 Docker Compose 文件(例如,“docker-compose.yml”)。

Spring Boot 应用程序的 Dockerfile 示例

# Start with an official Java runtime as the base image
FROM openjdk:17-jdk-alpine

# Set the working directory
WORKDIR /app

# Copy the application jar file into the image
COPY target/myapp.jar myapp.jar

# Expose the port the app will run on
EXPOSE 8080

# Run the application
ENTRYPOINT ["java", "-jar", "myapp.jar"]

构建 Docker 镜像

docker build -t myapp:latest .

正确标记镜像以管理注册表中的不同版本(例如,“myapp:v1.0”)。

在容器中运行本地测试

使用 Docker Compose 或单个 Docker 容器在隔离环境中运行测试。

docker-compose up -d
docker-compose exec webapp ./run-tests.sh

确保所有服务都正在运行并通过其测试。

将镜像推送到 Docker 注册表

将您的 Docker 镜像推送到容器注册表(例如,Docker Hub、Amazon ECR 或私有注册表),以便部署环境可以访问它们。

登录并推送镜像 -

docker login -u username -p password
docker tag myapp:latest username/myapp:v1.0
docker push username/myapp:v1.0

部署到暂存环境

拉取镜像到暂存服务器 -

docker pull username/myapp:v1.0

根据暂存环境设置使用 Docker Compose 或 Kubernetes 部署。

在暂存环境中运行任何其他集成或验收测试。

监控日志和指标

使用 Docker 命令检查日志和应用程序运行状况。

docker logs -f container_name

如果使用监控工具(例如,Grafana、Prometheus),请确认应用程序指标在可接受的阈值内。

批准并部署到生产环境

一旦暂存环境中的测试通过,请通过从注册表中拉取镜像将其部署到生产环境。

运行 Docker Compose 或 Kubernetes 命令以在生产环境中启动服务 -

docker pull username/myapp:v1.0
docker run -d -p 8080:8080 username/myapp:v1.0

实施回滚机制

确保您已存储先前版本的镜像。如果出现问题,请重新部署最后一个稳定版本 -

docker pull username/myapp:v0.9
docker run -d -p 8080:8080 username/myapp:v0.9

使用 CI/CD 管道自动化工作流

设置一个 CI/CD 管道(例如,GitHub Actions、GitLab CI、Jenkins),它可以自动化此工作流,包括构建、测试、推送和部署阶段。

CI/CD 管道脚本示例(GitHub Actions) -

name: Docker CI/CD

on:
  push:
    branches:
      - main

jobs:
  build-and-deploy:
    runs-on: ubuntu-latest
    steps:
      - name: Checkout code
        uses: actions/checkout@v2
      
      - name: Build Docker image
        run: docker build -t username/myapp:${{ github.sha }} .
      
      - name: Log in to Docker Hub
        run: echo "${{ secrets.DOCKER_PASSWORD }}" | docker login -u ${{ secrets.DOCKER_USERNAME }} --password-stdin

总结

此工作流自动化了 Docker 化应用程序的构建、测试和部署阶段,提供了本地和远程测试、回滚策略以及自动化的 CI/CD 管道以简化流程。

广告