docker swarm部署spring cloud服务

一、准备docker swarm的集群环境

ip是否主节点 
192.168.91.13 
192.168.91.43 

二、准备微服务

①eureka服务 application.yml配置

server:
  port: 8761

eureka:
  client:
    register-with-eureka: false
    fetch-registry: false
    service-url:
      defaultZone: http://localhost:8761/eureka
  instance:
    hostname: localhost

java代码略...

②microserviceone服务 application.yml配置

spring:
  application:
    name: serviceone
  resources:
    static-locations: file:/home/front
  profiles:
    active: pro

server:
  port: 8080

ribbon:
  eureka:
    enabled: true

---
spring:
  profiles: dev
eureka:
  client:
    service-url:
      defaultZone: http://localhost:8761/eureka
    fetch-registry: true
  instance:
    prefer-ip-address: true


---
# docker 环境下使用此配置
spring: profiles: pro cloud: inetutils: preferred-networks: 10.0.0 #正则匹配10.0.0开头的网卡ip eureka: client: service-url: defaultZone: http://discovery:8761/eureka fetch-registry: true instance: prefer-ip-address: true

java代码略...

③microservicetwo服务 application.yml配置

server:
  port: 8081

spring:
  application:
    name: servicetwo
  profiles:
    active: pro

ribbon:
  eureka:
    enabled: true


---
spring:
  profiles: dev
eureka:
  client:
    service-url:
      defaultZone: http://localhost:8761/eureka
    fetch-registry: true
  instance:
    prefer-ip-address: true


---
# docker 环境下使用此配置
spring:
  profiles: pro
  cloud:
    inetutils:
      preferred-networks: 10.0.0 #正则匹配10.0.0开头的网卡ip
eureka:
  client:
    service-url:
      defaultZone: http://discovery:8761/eureka
    fetch-registry: true
  instance:
    prefer-ip-address: true

java代码略...

重点配置:

  preferred-networks: 指定向eureka注册时使用的网卡地址(需要能够被其他微服务访问的ip,微服务间不能访问很可能是注册的网卡ip不对

  defaultZone: 使用服务的方式指定eureka地址,这里的discovery服务是在deploy.yml配置文件中指定的服务名

  prefer-ip-address: eureka上使用ip地址注册

应用间关系:

  microserviceone、microservicetwo微服务向discovery服务进行注册

  microserviceone通过feign调用microservicetwo的接口

// Feign接口
@FeignClient("servicetwo")
public interface DemoFeignService {

    @RequestMapping(method= RequestMethod.GET,value = "/userlist")
    @ResponseBody List getUserList();
}

---------------------------------------分割线----------------------------------------

//microserviceone中的controller方法
@Autowired
    private DemoFeignService demoFeignService;

    @RequestMapping(method = RequestMethod.GET,value = "invocation")
    public String testInvoke(){
        List list = demoFeignService.getUserList();
        String result = JSONObject.toJSONString(list);
        return "SUCCESS: " + result;
    }

 三、编写docker-compose配置文件

deploy.yml

version: "3"
services:
  discovery:      # 其他微服务可以通过服务名访问此服务,如服务注册http://discovery:8761/eureka
    image: registry.cn-hangzhou.aliyuncs.com/study1990/discovery:1.0
    deploy:
      replicas: 1   #定义 replicated 模式的服务的复本数量
      update_config:
        parallelism: 1    #每次更新复本数量
        delay: 2s       #每次更新间隔
      restart_policy:
        condition: on-failure     #定义服务的重启条件
    networks:
      - eureka-net
    ports:
      - "8761:8761"
    # environment:
      # - spring.profiles.active=peer1
  serviceone: # 微服务1
    image: registry.cn-hangzhou.aliyuncs.com/study1990/simple-microserviceone:1.0
    deploy:
      replicas: 1   #定义 replicated 模式的服务的复本数量
      update_config:
        parallelism: 1    #每次更新复本数量
        delay: 2s       #每次更新间隔
      restart_policy:
        condition: on-failure     #定义服务的重启条件
    networks:
      - eureka-net
    ports:
      - "8080:8080"
    environment:
      - spring.profiles.active=pro
    depends_on:
      - discovery #依赖服务
  servicetwo:
    image: registry.cn-hangzhou.aliyuncs.com/study1990/simple-microservicetwo:1.0
    deploy:
      replicas: 1   #定义 replicated 模式的服务的复本数量
      update_config:
        parallelism: 1    #每次更新复本数量
        delay: 2s       #每次更新间隔
      restart_policy:
        condition: on-failure     #定义服务的重启条件
    networks:
      - eureka-net
    ports:
      - "8081:8081"
    environment:
      - spring.profiles.active=pro
    depends_on:
      - discovery
networks:
  eureka-net:            # 创建网络
    driver: overlay

 

四、部署

  1、在docker swarm主节点上执行 docker stack deploy -c deploy.yml microservice 创建名为microservice的stack服务

  2、docker stack ps microservice查看docker服务情况

  

  3、其他相关命令

      docker stack rm microservice  删除名为microservice的stack服务

      docker service ls 查看服务列表

 

五、常用中间件的容器部署

mysql

version: "3"
services:
  mysql:
    image: mysql:5.7
    deploy:
      replicas: 1
      update_config:
        parallelism: 1    #每次更新复本数量
        delay: 2s       #每次更新间隔
      restart_policy:
        condition: on-failure     #定义服务的重启条件
    networks:
      - eureka-net
    ports:
      - "3306:3306"
    environment:
      MYSQL_ROOT_PASSWORD: "111111"
    volumes:
      - "/root/docker/app/mysql/config:/etc/mysql/conf.d"       #配置文件位置 my.cnf
      - "/root/docker/app/mysql/data:/var/lib/mysql"  #数据文件位置

networks:
  eureka-net:            # 创建网络
    driver: overlay

  

nginx

version: "3"
services:
  nginx:
    image: nginx:1.12
    deploy:
      replicas: 1
      update_config:
        parallelism: 1    #每次更新复本数量
        delay: 2s       #每次更新间隔
      restart_policy:
        condition: on-failure     #定义服务的重启条件
    networks:
      - eureka-net
    ports:
      - "80:80"
    volumes:
     - "/root/docker/app/nginx/html:/usr/share/nginx/html"  #挂载宿主机的html目录覆盖容器的html目录
     - "/root/docker/app/nginx/config/nginx.conf:/etc/nginx/nginx.conf" #挂载宿主机的nginx.conf覆盖容器中的nginx.conf
     - "/root/docker/app/nginx/logs:/var/log/nginx" 

networks:
  eureka-net:            # 创建网络
    driver: overlay

  

 

转载于:https://www.cnblogs.com/half-two-feet/p/10907370.html

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Docker是一种强大的容器化技术,可以帮助开发人员更轻松地部署、管理和扩展应用程序。Spring Cloud是一套用于快速构建微服务架构的框架,其提供了一系列的组件,包括服务发现、负载均衡、断路器、配置中心等等。下面我们来介绍如何使用Docker部署Spring Cloud应用程序: 1. 创建Spring Cloud应用程序 首先我们需要创建一个Spring Cloud应用程序,可以使用Spring Initializr来快速创建。在创建项目时,需要选择使用的Spring Cloud组件,如Eureka、Zuul、Feign等等。 2. 构建Docker镜像 接下来,我们需要将Spring Cloud应用程序打包成Docker镜像。我们可以使用Dockerfile来定义镜像的构建流程。Dockerfile中包含了一系列指令,可以用来安装依赖、复制文件、执行命令等等。例如,下面是一个简单的Dockerfile示例: FROM openjdk:8-jdk-alpine VOLUME /tmp ARG JAR_FILE ADD ${JAR_FILE} app.jar ENTRYPOINT ["java","-jar","/app.jar"] 该Dockerfile使用了openjdk:8-jdk-alpine作为基础镜像,添加了一个卷和一个环境变量,将打包好的jar文件复制到镜像中,并设置了启动命令。 3. 启动Docker容器 构建好Docker镜像之后,我们需要将其启动为Docker容器。可以使用docker run命令来启动容器。例如: docker run -p 8080:8080 my-spring-cloud-app 该命令会启动一个名为my-spring-cloud-app的Docker容器,并将容器的8080端口映射到主机的8080端口。 4. 配置Docker Swarm 如果你需要在多个Docker主机上部署Spring Cloud应用程序,则可以使用Docker Swarm来管理容器集群。Docker Swarm是一个内置在Docker中的集群管理工具,可以帮助我们快速构建、部署和管理容器集群。 要启用Docker Swarm,我们需要在主机上运行以下命令: docker swarm init 该命令会初始化一个新的Swarm集群,并返回一个join token,用于将其他主机加入集群。 5. 部署Spring Cloud应用程序 使用Docker Swarm可以轻松地部署Spring Cloud应用程序。我们可以使用docker stack deploy命令来启动一个新的服务栈。例如: docker stack deploy -c docker-compose.yml my-spring-cloud-stack 该命令会启动一个名为my-spring-cloud-stack的服务栈,其中包含了多个Spring Cloud应用程序。docker-compose.yml文件包含了服务栈的配置信息,例如服务的名称、镜像名称、端口号等等。 总结 使用Docker部署Spring Cloud应用程序可以帮助我们更轻松地管理应用程序,提高了应用程序的可移植性和可伸缩性。希望本文能够帮助你快速上手DockerSpring Cloud的使用。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值