当前位置: 首页 > news >正文

Java 应用 DevOps 全流程(CICD)闭环 - docker-compose版

🧩 一、项目结构

一个典型的 Java + Docker Compose 项目可以这样组织:

my-app/├── src/├── pom.xml├── Dockerfile├── docker-compose.yml└── Jenkinsfile

🏗️ 二、1️⃣ 打包:Maven 构建

Spring Boot 项目使用标准 Maven 命令即可:

mvn clean package -DskipTests

生成文件:

target/my-app-1.0.0.jar

🐳 三、2️⃣ 构建镜像:Dockerfile

Dockerfile 内容如下(推荐生产级配置):

FROM openjdk:17-jdk-slimWORKDIR /appCOPY target/my-app-1.0.0.jar app.jarEXPOSE 8080ENTRYPOINT ["java","-jar","app.jar"]

🧱 四、3️⃣ 定义 docker-compose.yml

docker-compose.yml

version: '3'
services:my-app:image: registry.cn-hangzhou.aliyuncs.com/myrepo/my-app:latestcontainer_name: my-appports:- "8080:8080"restart: alwaysenvironment:- TZ=Asia/Shanghai

💡说明:
你可以在 Jenkins 中动态替换 ${BUILD_NUMBER} 来控制镜像版本(例如 1.0.23)。


⚙️ 五、4️⃣ Jenkins 流水线(Jenkinsfile)

这个 Jenkinsfile 会自动执行以下步骤:

  1. 拉取代码
  2. 构建 jar
  3. 构建并推送 Docker 镜像
  4. SSH 到部署机上执行 docker-compose up -d 重启容器

✅ Jenkinsfile 示例(完整可用)

pipeline {agent anyenvironment {IMAGE_NAME = "registry.cn-hangzhou.aliyuncs.com/myrepo/my-app"VERSION = "1.0.${BUILD_NUMBER}"DEPLOY_HOST = "your.server.ip"DEPLOY_USER = "root"DEPLOY_PATH = "/opt/my-app"}stages {stage('Checkout') {steps {git branch: 'main', url: 'https://github.com/yourname/my-app.git'}}stage('Build Jar') {steps {sh 'mvn clean package -DskipTests'}}stage('Build Image') {steps {sh "docker build -t ${IMAGE_NAME}:${VERSION} ."}}stage('Push Image') {steps {withCredentials([usernamePassword(credentialsId: 'aliyun_docker', usernameVariable: 'USERNAME', passwordVariable: 'PASSWORD')]) {sh "docker login -u ${USERNAME} -p ${PASSWORD} registry.cn-hangzhou.aliyuncs.com"sh "docker push ${IMAGE_NAME}:${VERSION}"}}}stage('Deploy to Server') {steps {sshagent(['server_ssh_key']) {sh """ssh -o StrictHostKeyChecking=no ${DEPLOY_USER}@${DEPLOY_HOST} 'cd ${DEPLOY_PATH} &&sed -i "s#image: .*\$#image: ${IMAGE_NAME}:${VERSION}#g" docker-compose.yml &&docker-compose pull &&docker-compose up -d'"""}}}}post {success {echo "✅ 部署成功: ${IMAGE_NAME}:${VERSION}"}failure {echo "❌ 构建失败,请检查日志。"}}
}

🧰 六、5️⃣ 服务器部署目录结构

在目标服务器(比如一台运行 Docker 的 Linux 服务器)上放置:

/opt/my-app/├── docker-compose.yml└── env  (可选环境变量)

Jenkins 通过 SSH 登录服务器,执行:

docker-compose pull && docker-compose up -d

从仓库拉取最新镜像并重启容器。


📈 七、6️⃣ 闭环管理

功能 工具 说明
代码仓库 GitLab/GitHub 提交触发构建
构建系统 Jenkins 自动化打包、推镜像、部署
镜像仓库 Harbor/阿里云 存储 Docker 镜像
部署环境 Docker Compose 管理容器运行
日志 docker logs my-app 或 ELK 查看运行日志
监控 Prometheus + Grafana 监控容器健康、性能
回滚 手动 docker-compose up -d 使用旧版本镜像 快速回滚

🔄 八、完整闭环流程图

开发提交代码↓Jenkins 自动触发↓Maven 打包 Jar↓Docker 构建镜像↓推送至镜像仓库↓SSH 部署服务器↓Docker Compose 启动容器↓监控/日志反馈 Jenkins↓闭环

💡可选增强点

场景 建议方案
镜像清理 Jenkins 定期执行 docker image prune -a -f
多环境部署 使用不同 Compose 文件:docker-compose-dev.ymldocker-compose-prod.yml
自动触发 配合 GitLab webhook 或 Jenkins SCM Polling
零停机更新 使用 Compose 的 --scale 或 Nginx 代理
http://www.gsyq.cn/news/41938.html

相关文章:

  • 高精度板子
  • 2025年上海展览特装制作公司权威推荐榜单:标摊设计/标摊装修/展厅设计及施工源头公司家精选
  • doris命令show proc /current_queries;
  • 护航“苏超”票务稳健运行!这朵云,靠谱!
  • 2025年青岛城阳注册个体户服务权威推荐:青岛城阳公司变更服务/青岛城阳变更营业执照机构/青岛城阳公司减资服务机构精选
  • 使用 NIFI监控数据库表
  • 利用Libevent在CentOS 7上打造异步网络应用
  • 2025年广东菲律宾家具集运服务权威推荐:广东家具拼柜菲律宾公司/广东家具集装箱菲律宾平台/广东食品海运菲律宾渠道精选
  • 告别文件混乱!Adobe Bridge 2026 全媒体可视化管理,让设计流程更顺畅
  • kernel pwn入门 强网杯2018 - core
  • 2025 年 11 月河南制砂机,郑州制砂机,鹅卵石制砂机厂家最新推荐,聚焦资质、案例、售后的五家家机构深度解读!
  • 2025东北拉弯加工厂家推荐白皮书,赢鑫拉弯加工厂家介绍
  • 2025 年蒸发器源头厂家最新推荐排行榜:聚焦优质企业,助力工业废水高效处理设备选购热泵刮板蒸发器/多效蒸发器/蒸汽刮板蒸发器公司推荐
  • 097_尚硅谷_经典案例打印字塔
  • 2025年粪便干湿分离机源头厂家权威推荐榜单:牛粪干湿分离机厂家/鸡粪干湿分离机/猪粪便干湿分离机源头厂家精选
  • CentOS7服务器部署GitLab
  • CentOS7.9升级gcc
  • raft 读请求源码走读
  • 2025年工业冷水机品牌供应商/加工厂/批量定制新推荐排行榜白皮书
  • 详细介绍:【MongoDB的RLE压缩数据存储】
  • 模拟赛日志
  • 2025年工作服定制哪家工艺精湛?专业工作服定制生产厂推荐
  • 2025年安全检测检验公司排行榜:十大权威机构深度解析
  • 算法社Python基础入门面试题库(新手版含答案) - 指南
  • 深入解析:一键把本地项目推到 GitHub:通用脚本 + 小白友好指南
  • Java的多态和重载
  • 2025 年分离机源头厂家最新推荐排行榜:聚焦国内优质品牌,助力企业精准选型碟片式分离机/离心分离机/全自动分离机公司推荐
  • 维修厂家推荐排行榜单2025:权威评测
  • 2025年色谱仪品牌新推荐排行榜白皮书,赛智液相色谱仪怎么样
  • GESP202309 五级 巧夺大奖题解