做美工好的网站,专做排版网站,订餐网站模板下载,做搜索网站挣钱目录1. 创建测试代码2. 编译打包3. 代码环境运行使用普通运行方式使用docker挂载项目#xff08;长期运行#xff09;1. 创建 Dockerfile2. 构建并后台运行使用docker swram实现零停机更新#xff08;推荐#xff09;1. 初始化swarm2. 创建 Dockerfile3. 使用Dockerfile 构…
目录1. 创建测试代码2. 编译打包3. 代码环境运行使用普通运行方式使用docker挂载项目长期运行1. 创建 Dockerfile2. 构建并后台运行使用docker swram实现零停机更新推荐1. 初始化swarm2. 创建 Dockerfile3. 使用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. 编译打包
代码 确保 Java 代码包含 HTTP 服务器如 HttpServer 或 Spring Boot编译 javac HelloWorldHttp.java打包
jar cvfe HelloWorldHttp.jar HelloWorldHttp HelloWorldHttp.class3. 代码环境运行
使用普通运行方式
java -jar HelloWorldHttp.jar访问 浏览器打开 http://localhost:8080/hello
使用docker挂载项目长期运行
这种方式的缺点是 每次更新jar包就要删除原容器 重新构建一个容器中间服务会有中断
1. 创建 Dockerfile
vim DockerfileDockerfile配置文件内容 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 init2. 创建 Dockerfile
vim DockerfileDockerfile配置文件内容 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.0docker 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-app8. 停止/删除 Swarm 服务
在 Docker Swarm 中直接使用 docker stop 停止由 service 管理的容器是无效的因为 Swarm 会监控服务状态并自动重启容器以维持指定的副本数–replicas 2。以下是正确管理 Swarm 服务的命令
停止并删除服务
# 停止并删除服务彻底移除
docker service rm my-java-app仅暂停服务不删除
# 将副本数设为 0暂停服务但保留配置
docker service scale my-java-app0#恢复服务
docker service scale my-java-app27. docker wram架构流程图