一、准备docker swarm的集群环境

ip 是否主节点  
192.168.91.13  
192.168.91.43  

二、准备微服务

①eureka服务 application.yml配置

  1. server:
  2. port:
  3.  
  4. eureka:
  5. client:
  6. register-with-eureka: false
  7. fetch-registry: false
  8. service-url:
  9. defaultZone: http://localhost:8761/eureka
  10. instance:
  11. hostname: localhost

java代码略...

②microserviceone服务 application.yml配置

  1. spring:
  2. application:
  3. name: serviceone
  4. resources:
  5. static-locations: file:/home/front
  6. profiles:
  7. active: pro
  8.  
  9. server:
  10. port:
  11.  
  12. ribbon:
  13. eureka:
  14. enabled: true
  15.  
  16. ---
  17. spring:
  18. profiles: dev
  19. eureka:
  20. client:
  21. service-url:
  22. defaultZone: http://localhost:8761/eureka
  23. fetch-registry: true
  24. instance:
  25. prefer-ip-address: true
  26.  
  27. ---
    # docker 环境下使用此配置
  28. spring:
  29. profiles: pro
  30. cloud:
  31. inetutils:
  32. preferred-networks: 10.0. #正则匹配10..0开头的网卡ip
  33. eureka:
  34. client:
  35. service-url:
  36. defaultZone: http://discovery:8761/eureka
  37. fetch-registry: true
  38. instance:
  39. prefer-ip-address: true

java代码略...

③microservicetwo服务 application.yml配置

  1. server:
  2. port:
  3.  
  4. spring:
  5. application:
  6. name: servicetwo
  7. profiles:
  8. active: pro
  9.  
  10. ribbon:
  11. eureka:
  12. enabled: true
  13.  
  14. ---
  15. spring:
  16. profiles: dev
  17. eureka:
  18. client:
  19. service-url:
  20. defaultZone: http://localhost:8761/eureka
  21. fetch-registry: true
  22. instance:
  23. prefer-ip-address: true
  24.  
  25. ---
  1. # docker 环境下使用此配置
  1. spring:
  2. profiles: pro
  3. cloud:
  4. inetutils:
  5. preferred-networks: 10.0. #正则匹配10..0开头的网卡ip
  6. eureka:
  7. client:
  8. service-url:
  9. defaultZone: http://discovery:8761/eureka
  10. fetch-registry: true
  11. instance:
  12. 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的接口

  1. // Feign接口
  2. @FeignClient("servicetwo")
  3. public interface DemoFeignService {
  4.  
  5. @RequestMapping(method= RequestMethod.GET,value = "/userlist")
  6. @ResponseBody List getUserList();
  7. }
  8.  
  9. ---------------------------------------分割线----------------------------------------
  10.  
  11. //microserviceone中的controller方法
  12. @Autowired
  13. private DemoFeignService demoFeignService;
  14.  
  15. @RequestMapping(method = RequestMethod.GET,value = "invocation")
  16. public String testInvoke(){
  17. List list = demoFeignService.getUserList();
  18. String result = JSONObject.toJSONString(list);
  19. return "SUCCESS: " + result;
  20. }

三、编写docker-compose配置文件

deploy.yml

  1. version: "3"
  2. services:
  3. discovery: # 其他微服务可以通过服务名访问此服务,如服务注册http://discovery:8761/eureka
  4. image: registry.cn-hangzhou.aliyuncs.com/study1990/discovery:1.0
  5. deploy:
  6. replicas: 1 #定义 replicated 模式的服务的复本数量
  7. update_config:
  8. parallelism: 1 #每次更新复本数量
  9. delay: 2s #每次更新间隔
  10. restart_policy:
  11. condition: on-failure #定义服务的重启条件
  12. networks:
  13. - eureka-net
  14. ports:
  15. - "8761:8761"
  16. # environment:
  17. # - spring.profiles.active=peer1
  18. serviceone: # 微服务1
  19. image: registry.cn-hangzhou.aliyuncs.com/study1990/simple-microserviceone:1.0
  20. deploy:
  21. replicas: 1 #定义 replicated 模式的服务的复本数量
  22. update_config:
  23. parallelism: 1 #每次更新复本数量
  24. delay: 2s #每次更新间隔
  25. restart_policy:
  26. condition: on-failure #定义服务的重启条件
  27. networks:
  28. - eureka-net
  29. ports:
  30. - "8080:8080"
  31. environment:
  32. - spring.profiles.active=pro
  33. depends_on:
  34. - discovery #依赖服务
  35. servicetwo:
  36. image: registry.cn-hangzhou.aliyuncs.com/study1990/simple-microservicetwo:1.0
  37. deploy:
  38. replicas: 1 #定义 replicated 模式的服务的复本数量
  39. update_config:
  40. parallelism: 1 #每次更新复本数量
  41. delay: 2s #每次更新间隔
  42. restart_policy:
  43. condition: on-failure #定义服务的重启条件
  44. networks:
  45. - eureka-net
  46. ports:
  47. - "8081:8081"
  48. environment:
  49. - spring.profiles.active=pro
  50. depends_on:
  51. - discovery
  52. networks:
  53. eureka-net: # 创建网络
  54. 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

  1. version: "3"
  2. services:
  3. mysql:
  4. image: mysql:5.7
  5. deploy:
  6. replicas: 1
  7. update_config:
  8. parallelism: 1 #每次更新复本数量
  9. delay: 2s #每次更新间隔
  10. restart_policy:
  11. condition: on-failure #定义服务的重启条件
  12. networks:
  13. - eureka-net
  14. ports:
  15. - "3306:3306"
  16. environment:
  17. MYSQL_ROOT_PASSWORD: "111111"
  18. volumes:
  19. - "/root/docker/app/mysql/config:/etc/mysql/conf.d" #配置文件位置 my.cnf
  20. - "/root/docker/app/mysql/data:/var/lib/mysql" #数据文件位置
  21.  
  22. networks:
  23. eureka-net: # 创建网络
  24. driver: overlay

  

nginx

  1. version: "3"
  2. services:
  3. nginx:
  4. image: nginx:1.12
  5. deploy:
  6. replicas: 1
  7. update_config:
  8. parallelism: 1 #每次更新复本数量
  9. delay: 2s #每次更新间隔
  10. restart_policy:
  11. condition: on-failure #定义服务的重启条件
  12. networks:
  13. - eureka-net
  14. ports:
  15. - "80:80"
  16. volumes:
  17. - "/root/docker/app/nginx/html:/usr/share/nginx/html" #挂载宿主机的html目录覆盖容器的html目录
  18. - "/root/docker/app/nginx/config/nginx.conf:/etc/nginx/nginx.conf" #挂载宿主机的nginx.conf覆盖容器中的nginx.conf
  19. - "/root/docker/app/nginx/logs:/var/log/nginx"
  20.  
  21. networks:
  22. eureka-net: # 创建网络
  23. driver: overlay

  

其他

1、查看docker swarm错误日志

docker service ps --no-trunc {service_name}

2、镜像下载加速

  1. sudo mkdir -p /etc/docker
  2. sudo tee /etc/docker/daemon.json <<-'EOF'
  3. {
  4. "registry-mirrors": ["https://1rght005.mirror.aliyuncs.com"]
  5. }
  6. EOF
  7. sudo systemctl daemon-reload
  8. sudo systemctl restart docker

  

docker swarm部署spring cloud服务的更多相关文章

  1. 【spring cloud】【docker】使用docker在centOS上部署spring cloud微服务架构服务

    项目GitHub地址 ================================================================================== 部署过程: ...

  2. 【docker】docker部署spring boot服务,但是docker logs查看容器输出控制台日志,没有日志打印,日志未打印,docker logs不打印容器日志

    如题: docker部署spring boot服务,但是docker logs查看容器输出控制台日志,没有日志打印,日志未打印,docker logs不打印容器日志 场景再现: docker部署并启动 ...

  3. Docker下的Spring Cloud三部曲之一:极速体验

    版权声明:欢迎转载,请注明出处,谢谢. http://blog.csdn.net/boling_cavalry/article/details/79177930   目录(?)[+]   从本章开始, ...

  4. kubernetes部署spring cloud注册中心 Eureka

    系统环境 java JDK 1.8 Docker 18.09.6 kubernetes 1.16 创建Eureka Server 1.Maven引入相应的jar 引入 SpringBoot 做基础框架 ...

  5. Spring Cloud服务注册中心交付至kubernetes

    前言 服务发现原则: 各个微服务在启动时,会将自己的网络地址等信息注册到服务发现组件中,服务发现组件会存储这些信息 服务消费者可以从服务发现组件中查询到服务提供者的网络地址,并使用该地址来远程调用服务 ...

  6. 【Azure Spring Cloud】Azure Spring Cloud服务,如何获取应用程序日志文件呢?

    问题描述 在使用Azure Spring Cloud服务时,如果要收集应用程序的日志.有控制台输出(实时流日志),也可以配置Log Analytics服务. 日志流式处理 可以通过以下命令在 Azur ...

  7. Spring Cloud 服务端注册与客户端调用

    Spring Cloud 服务端注册与客户端调用 上一篇中,我们已经把Spring Cloud的服务注册中心Eureka搭建起来了,这一章,我们讲解如何将服务注册到Eureka,以及客户端如何调用服务 ...

  8. 【spring cloud】在spring cloud服务中,打包ms-core失败,报错Failed to execute goal org.springframework.boot:spring-boot-maven-plugin:2.0.4.RELEASE:repackage (default) on project

    在spring cloud服务中,有一个ms-code项目,只为所有的微服务提供核心依赖和工具类,没有业务意义,作为核心依赖使用.所以没有main方法,没有启动类. 在spring cloud整体打包 ...

  9. Spring Cloud 服务网关Zuul

    Spring Cloud 服务网关Zuul 服务网关是分布式架构中不可缺少的组成部分,是外部网络和内部服务之间的屏障,例如权限控制之类的逻辑应该在这里实现,而不是放在每个服务单元. Spring Cl ...

随机推荐

  1. spring mvc controller中的异常封装

    http://abc08010051.iteye.com/blog/2031992 一直以来都在用spring mvc做mvc框架,我使用的不是基于注解的,还是使用的基于xml的,在controlle ...

  2. springMVC 前后台日期格式传值解决方式之二(共二) @InitBinder的使用

    关于springmvc日期问题的解决方式 除了本博客的[springMVC 前后台日期格式传值解决方式之 @DateTimeFormat的使用和配置]一文, 还有如下这种方式: 在Controller ...

  3. Effective C++ Item 25 考虑写出一个不抛异常的swap函数

    本文为senlie原创,转载请保留此地址:http://blog.csdn.net/zhengsenlie 经验:当std::swap对你的类型效率不高时,提供一个swap成员函数,并确定这个函数不抛 ...

  4. Eclipse.ini参数设置

    最近Eclipse不知道是由于项目过多还是其他原因导致Eclipse进程容易卡死,一卡死Workspace保存出错,项目就全都不见了,又得重新导入...鉴于此原因,自己也上网查询了相关资料,现整理如下 ...

  5. handlebars.js基础学习笔记

    最近在帮学校做个课程网站,就有人推荐用jquery+ajax+handlebars做网站前端,刚接触发现挺高大上的,于是就把一些基础学习笔记记录下来啦. 1.引用文件: jquery.js文件下载:h ...

  6. 对象序列和反序列化Xml

    1. XmlArray和XmlArrayItem XmlArray和XmlArrayItem是不同的,XmlArray是指这个数组叫什么,XmlArrayItem 值数组的每个元素叫什么. <X ...

  7. Spring Framework简单介绍

    Spring Framework        学习java编程不知不觉已经三年时间了,開始的时候,总是喜欢看着视频,然后按部就班的敲打着键盘,每当系统正常执行后.心里乐开了花.最開始的时候,所有的代 ...

  8. Android加入新的视频格式--媒体库扫描

    需求:在mediaprovider数据库中加入.mov后缀格式的视频文件 能够使用工具MediaInfo_GUI_0.7.67_Windows.3243836749.exe 查看mov文件编码格式类型 ...

  9. 匿名函数块级作用域以及在JQuery中的应用

    最近经常回在群里面看到有些朋友问如下这样的js写法该如何理解的的问题,虽然可能对匿名函数有些理解,但是有时候看到JQuery源码或者其他JS库中同样的写法时,就有点不理解了,今天再次分享下这方面的知识 ...

  10. do{}while(0)与CC_BREAK_IF的绝妙搭配

    从一開始认为没有必要,到认为很好用.我经历了大概两个月的时间,以下来总结一下什么情况下使用这样的结构吧. 第一种情况:当载入文件的时候,假设载入文件失败,须要报错的时候. 当前,能够用try{}cat ...