基于DockerFile+docker-compose+docker swarm部署springboot项目

吴书松
吴书松
发布于 2025-08-29 / 18 阅读
0
0

基于DockerFile+docker-compose+docker swarm部署springboot项目

代码:https://gitee.com/wushusong/wss-demo.git / dev-swarm

环境:两台服务器:192.168.1.111(主节点)、192.168.1.240(从节点)

详见前一章节:Docker集群管理-swarm

1、制作镜像

1、编写DockerFile

# 基础镜像:jdk8的镜像,需要提前拉取jdk8的镜像,也可以使用其他地方已经做好的jdk8的docker镜像,放到本机在安装
FROM 9f04bbc44406
# 指定工作目录
VOLUME /usr/local/java/wss-demo
# 复制主机jar包至镜像内,复制的目录需放置在 Dockerfile 文件同级目录下
ADD ./target/wss-demo-0.0.1-SNAPSHOT.jar app.jar

# 安装时区数据包
RUN apt-get update && apt-get install -y tzdata

ENV TZ=Asia/Shanghai TIME_ZONE="Asia/Shanghai"

# 容器启动执行命令
ENTRYPOINT ["java","-Dfile.encoding=utf-8","-Xms512m","-Xmx1024m","-jar", "app.jar" , "--server.port=31012"]

# 对外暴露的端口号
EXPOSE  31022

FROM :这里需要指定jdk8的镜像

2、上传服务器

这里使用idea通过ssh连接服务器192.168.1.111

点击运行DockerFile

到111上查看镜像情况

2、镜像上传远程镜像库,这里使用阿里云镜像仓库,也可以自己搭建docker镜像仓库(Harbor)

前提是登录了阿里云

 docker login --username=roronoazoro1995 registry.cn-hongkong.aliyuncs.com

1、镜像打包:

docker tag 1d2203659903 registry.cn-hongkong.aliyuncs.com/wushusong/jm-cloud:wss-demo

2、镜像推送

docker push registry.cn-hongkong.aliyuncs.com/wushusong/jm-cloud:wss-demo

3、编写docker-compose

这里创建一个网络,给该服务单独使用

docker network create --driver bridge --subnet 172.20.0.0/16 --gateway 172.20.0.1 --attachable --scope=swarm cloud_net_swarm

注意,这里要指定--scope=swarm

创建一个文件夹名称,跟项目名称相同,名创建文件docker-compose-swarm.yml

指定刚刚创建的网络:cloud_net_swarm

内容如下

version: '3'
services:
  wss-demo:
    image: registry.cn-hongkong.aliyuncs.com/wushusong/jm-cloud:wss-demo
    restart: always
    ports:
      - 31022:31012
    #volumes:
    #  - /usr/local/java/cloud/logs/:/script/logs/
    environment:
      - TZ=Asia/Shanghai

    networks:  # 设置网络模式为 host(使用宿主机网络)
      - cloud_net_swarm # 下面配置的网络名称

    entrypoint:
      - "java"
      - "-Dfile.encoding=utf-8"
      - "-Xms512m"
      - "-Xmx1024m"
      - "-jar"
      - "app.jar"
      - "--server.port=31012"
    deploy:
      mode: replicated
      replicas: 2 # 两个副本
     # placement:
     #   constraints: [node.role != manager]
      restart_policy:
        condition: on-failure
        delay: 5s
        max_attempts: 3
      update_config:
        parallelism: 1
        delay: 10s
networks:
  cloud_net_swarm: # 网络名称
#    driver: bridge
    external: true # 使用现有网络
#    name: cloud_net_default


启动

docker stack deploy -c docker-compose-swarm.yml --with-registry-auth wss

--with-registry-auth:一定要要, 会自动把manage节点的远程仓库认证信息,带到其他子节点中

在192.168.1..240上面查看服务部署情况

postman测试


评论