解决基于Docker部署PowerJob跨服务器的网络连接问题

方式一、主从服务器分配配置

前提:docker、docker-compose


主服务器的 docker-compose.yml 的配置
解决基于Docker部署PowerJob跨服务器的网络连接问题_第1张图片
从服务器的 docker-compose.yml 的配置
解决基于Docker部署PowerJob跨服务器的网络连接问题_第2张图片

解决思路:使用 host 网络模式,而且给powerjob指定网络,避免它自动获取,否则将会失败

– 缺点就是每个服务器都要去配置

方式二、基于docker swarm 部署

前提:docker、docker-compose、docker-swarm

解决思路:使用 docker swarm 保证跨服务器后容器间相互访问

什么?没有用过 docker swarm?那自己自行百度学习去,学习完再回来接下去看。还有,docker compose 没有用过的话也要先看看


创建docker-compose的配置文件
解决基于Docker部署PowerJob跨服务器的网络连接问题_第3张图片
具体内容

version: '3'
services:
  server:
    image: powerjob/powerjob-server:latest
    hostname: powerjob-server
    restart: always
    environment:
      PARAMS: "--oms.mongodb.enable=false --spring.datasource.core.jdbc-url=jdbc:mysql://powerjob-mysql:3306/powerjob-daily?useUnicode=true&characterEncoding=UTF-8&serverTimezone=Asia/Shanghai"
      JVMOPTIONS: "-Dpowerjob.network.local.address=powerjob-server"
    ports:
      - "7700:7700"
      - "10086:10086"
      - "10010:10010"
    networks: 
      - overlay
    volumes:
      - ./powerjob-data/powerjob-server:/root/powerjob/server/
    deploy:
      placement:
        constraints: [node.role == manager]

  worker:
    image: powerjob/powerjob-worker-samples:latest
    hostname: powerjob-worker
    restart: always
    depends_on:
      - server
    environment:
      PARAMS: "--powerjob.worker.server-address=powerjob-server:7700"
      JVMOPTIONS: "-Dpowerjob.network.local.address=powerjob-worker"
    ports:
      - "8081:8081"
      - "27777:27777"
    networks: 
      - overlay
    volumes:
      - ./powerjob-data/powerjob-worker-samples:/root/powerjob/worker
    deploy:
      placement:
        constraints: [node.role == worker]

networks:
  overlay:

然后启动

# 启动服务, [powerjob]是服务的名称
docker stack deploy -c docker-compose.yml powerjob
# 移除服务,[powerjob]是服务的名称
docker stack rm powerjob

# 查看启动日志 serviceName= [服务的名称]_[docker-compose容器名]
docker service ps --no-trunc [serviceName]
例子:docker service ps --no-trunc powerjob_server

可能碰到一些问题

  1. 找不到数据卷
    解决方法:可以安装使用 NFS 服务,解决跨服务器的文件访问问题
  2. 自建的镜像在swarm的worker下无法拉取
    解决方法:
    方法一、只使用jdk公共镜像做基础镜像直接运行worker的jar包
    方法二、在DockerHub仓库注册自己的账号,推送自建的镜像到仓库。但这个有个缺陷就是需要能够访问外网,如果不能访问外网,也可以自己搭建一个私有hub仓库

你可能感兴趣的:(java,docker,PowerJob,docker,服务器,容器,PowerJob)