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

docker搭建java运行环境(java或者springboot)

目录

  • 1. 创建测试代码
  • 2. 编译打包
  • 3. 代码环境运行
    • 使用普通运行方式
    • 使用docker挂载项目(长期运行)
      • 1. 创建 Dockerfile
      • 2. 构建并后台运行
    • 使用docker swram实现零停机更新(推荐)
      • 1. 初始化swarm
      • 2. 创建 Dockerfile
      • 3. 使用Dockerfile 构建 Docker 镜像
      • 4. 首次部署服务
      • 5. 更新 JAR 并发布新版本
      • 6. 回滚(如果需要)
      • 8. 停止/删除 Swarm 服务
      • 7. docker wram架构流程图

1. 创建测试代码

vim HelloWorldHttp.java
// HelloWorld.java
import java.io.IOException;
import java.io.OutputStream;
import java.net.InetSocketAddress;
import com.sun.net.httpserver.HttpServer;public class HelloWorldHttp {public static void main(String[] args) throws IOException {HttpServer server = HttpServer.create(new InetSocketAddress(8080), 0);server.createContext("/hello", exchange -> {String response = "Hello, World!";exchange.sendResponseHeaders(200, response.length());OutputStream os = exchange.getResponseBody();os.write(response.getBytes());os.close();});server.start();System.out.println("Server running on http://localhost:8080/hello");}
}

2. 编译打包

  1. 代码 确保 Java 代码包含 HTTP 服务器(如 HttpServer 或 Spring Boot)
  2. 编译
 javac HelloWorldHttp.java
  1. 打包
jar cvfe HelloWorldHttp.jar HelloWorldHttp HelloWorldHttp.class

3. 代码环境运行

使用普通运行方式

java -jar HelloWorldHttp.jar

访问 浏览器打开 http://localhost:8080/hello

使用docker挂载项目(长期运行)

这种方式的缺点是 每次更新jar包就要删除原容器 重新构建一个容器,中间服务会有中断

1. 创建 Dockerfile

vim Dockerfile

Dockerfile配置文件内容

FROM openjdk:17
COPY HelloWorldHttp.jar /app.jar
CMD [“java”, “-jar”, “/app.jar”]

2. 构建并后台运行

docker build -t hello-server .
docker run -d -p 8080:8080 --name my-server hello-server

使用docker swram实现零停机更新(推荐)

1. 初始化swarm

docker swarm init

2. 创建 Dockerfile

vim Dockerfile

Dockerfile配置文件内容

FROM openjdk:17
COPY HelloWorldHttp.jar /app.jar
CMD [“java”, “-jar”, “/app.jar”]

3. 使用Dockerfile 构建 Docker 镜像

docker build -t hello-server:v1.0 .

4. 首次部署服务

docker service create --name my-java-app --replicas 2 --publish 8080:8080 --update-parallelism 1 --update-delay 10s --restart-condition any hello-server:v1.0

docker service create
–name my-java-app \ # 服务名称
–replicas 2 \ # 启动2个副本(确保高可用)
–publish 8080:8080 \ # 暴露端口
–update-parallelism 1 \ # 每次更新1个副本
–update-delay 10s \ # 批次间隔10秒
–restart-condition any \ # 容器异常时自动重启
hello-server:v1.0 # 初始镜像版本

docker service ps my-java-app  # 查看副本状态
curl http://localhost:8080/hello  # 测试请求

5. 更新 JAR 并发布新版本

# 1. 替换新的 HelloWorldHttp.jar
# 2. 构建 v2.0 镜像
docker build -t hello-server:v2.0 .
# 强制更新(不检查摘要)
docker service update --image hello-server:v2.0 --force my-java-app

单机情况下,使用–force忽略版本不同步问题

关键配置说明
参数 作用
–replicas 2 多副本是零停机的基础(至少2个)
–update-parallelism 控制每次更新的副本数(1表示逐个替换)
–update-delay 批次间隔时间(避免同时更新所有副本)
–restart-condition 自动重启异常容器
–detach 非阻塞执行更新
–force # 强制更新,即使配置未变化

6. 回滚(如果需要)

# 回滚到上一个版本
docker service rollback my-java-app# 或指定历史版本
docker service update --image hello-server:v1.0 my-java-app

8. 停止/删除 Swarm 服务

在 Docker Swarm 中,直接使用 docker stop 停止由 service 管理的容器是无效的,因为 Swarm 会监控服务状态并自动重启容器以维持指定的副本数(–replicas 2)。以下是正确管理 Swarm 服务的命令:

停止并删除服务

# 停止并删除服务(彻底移除)
docker service rm my-java-app

仅暂停服务(不删除)

# 将副本数设为 0(暂停服务但保留配置)
docker service scale my-java-app=0#恢复服务
docker service scale my-java-app=2

7. docker wram架构流程图

在这里插入图片描述

http://www.dtcms.com/a/329172.html

相关文章:

  • 项目五算:估算、概算、预算、结算、决算
  • 解决:nginx: [emerg] the “ssl“ parameter requires ngx_http_ssl_module
  • 《张朝阳的物理课》,呼应当下物理学习的“思维转向”
  • react与vue的对比,来实现标签内部类似v-for循环,v-if等功能
  • Avalon-MM协议
  • python之---递归选择文件并生成新文件保持目录结构
  • 《工程封装》(Python)
  • 一键式商品信息获取:京东API返回值深度挖掘
  • Dynamsoft Capture Vision Crack
  • AWS Bedrock Claude模型费用深度分析:企业AI成本优化指南
  • 卫星轨道基础知识
  • ICCV 2025 | 4相机干掉480机位?CMU MonoFusion高斯泼溅重构4D人体!
  • LaTeX(排版系统)Texlive(环境)Vscode(编辑器)环境配置与安装
  • Pytest项目_day14(参数化、数据驱动)
  • duiLib 利用布局文件显示一个窗口并响应事件
  • C语言零基础第15讲:字符函数和字符串函数
  • ThinkPHP+Mysql 灵活用工小程序-技术深度解析与实践指南
  • 对线面试官之幂等和去重
  • 数据结构:用数组实现队列(Implementing Queue Using Array)
  • vue修改element的css属性
  • Docker端口映射完全指南:打通容器内外通信的关键技术
  • 如何把ubuntu 22.04下安装的mysql 8 的 数据目录迁移到另一个磁盘目录
  • 从“存得对”到“存得准”:MySQL 数据类型与约束全景指南
  • MySQL中的缓存机制
  • 浅谈TLS 混合密钥交换:后量子迁移过渡方案
  • openMVG---安装openMVG
  • C++主流string的使用
  • Linux内核的递归熵与异步系统守护进程的耦合解
  • 【类与对象(下)】探秘C++构造函数初始化列表
  • ROS机器人云实践案例设计