一、准备docker swarm的集群环境

ip 是否主节点  
192.168.91.13  
192.168.91.43  

二、准备微服务

①eureka服务 application.yml配置

server:
port: 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: 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. #正则匹配10..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: 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. #正则匹配10..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

  

其他

1、查看docker swarm错误日志

docker service ps --no-trunc {service_name}

2、镜像下载加速

sudo mkdir -p /etc/docker
sudo tee /etc/docker/daemon.json <<-'EOF'
{
"registry-mirrors": ["https://1rght005.mirror.aliyuncs.com"]
}
EOF
sudo systemctl daemon-reload
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. react native使用 mobx , can't find variable:Symbol

    原因是因为 mobx的版本用的最新版本..用到了 Symbol部分es6的api特性. 解决问题办法 1. 把mobx降版本到 4.3.1 . mobx-react降版本到 5.1.0 即可. 或者 ...

  2. jquery插件:aotocomplete

    aotocomplete.js http://blog.csdn.net/smeyou/article/details/7980273?_t_t_t=0.3565731019350138 $(func ...

  3. Javascript属性constructor/prototype的底层原理

    在Javascript语言中,constructor属性是专门为function而设计的,它存在于每个function的prototype属性中. 这个constructor保存了指向function ...

  4. DataUml Design 教程1-初识

        DataUml Design 是面向开发人员使用的一个永久免费的软件,提高软件的开发效率和代码的规范度.它主要包括三大功能,数据模型.代码生成和UML建模,数据模型功能类似于PowerDesi ...

  5. nodejs eclipse

    nodejs下载地址 http://nodejs.org/1.下载并安装完nodejs后,打开cmd命令窗口,输入node -v,如果正确输出版本号,就是安装成功了,如果说node不是windows的 ...

  6. 华为nova3发布,将支持华为AI旅行助手

    ​​​华为nova3于7月18日18:00在深圳大运中心体育馆举行华为nova 3的发布会,从本次华为nova3选择的代言人-易烊千玺,不难看出新机依然延续nova系列的年轻属性,主打 “高颜值 爱自 ...

  7. 云中应用性能管理(APM)的下一步

    Michael Kopp是Compu-ware公司卓越APM中心的一名技术分析师,他做过10多年的Java/JEE领域的设计师和开发员.另外,Kopp还专攻虚拟和云的大规模生产部署的结构和性能. ? ...

  8. Linux基础知识之挂载详解(mount,umount及开机自动挂载)

    Linux基础知识之挂载详解(mount,umount及开机自动挂载) 转载自:http://www.linuxidc.com/Linux/2016-08/134666.htm 挂载概念简述: 根文件 ...

  9. MIC性能优化策略

    MIC性能优化主要包括系统级和内核级:系统级优化包括节点之间,CPU与MIC之间的负载均衡优化:MIC内存空间优化:计算与IO并行优化:IO与IO并行优化:数据传递优化:网络性能优化:硬盘性能优化等. ...

  10. mybaits返回插入成功后的自增值

    mybaits返回插入成功后的自增值 在项目中,我们经常遇到这样的情况:insert语句成功后,需要自增的id值,这个时候,我们可以通过mybatis的 useGeneratedKeys 来实现,具体 ...