一.docker swarm搭建
1.比较简单,自行百度
2.查看swarm集群下面的节点
本人将所有的节点都promote成了manager
192.168..1.119作为私有镜像库服务(harbor私有镜像库搭建与使用见上篇博客)
将需要在镜像库中的服务在daemon.json文件中注册
保存daemon.json文件后,刷新配置:systemctl daemon-reload
在110、111、112下分别注册私有镜像库服务
执行命令:vi /usr/lib/systemd/system/docker.service 修改docker.service文件,在三台服务器上分别添加红框内容:--insecure-registry=192.168.1.119 \
保存文件后分别执行:systemctl daemon-reload && systemctl restart docker.service
修改代码中eureka的application.yml文件
maven clean -> package -> 构建镜像 ->推送镜像到harbor(详细见上篇博客)
harbor镜像位置:
分别在三台服务器上拉取eureka镜像:docker pull 192.168.1.119/demo/eureka:latest
在manager节点上创建一个overlay网络:docker network create -d overlay spring-cloud-overlay
查看网络列表:docker network ls
创建overlay网络的目的是:用来保证在不同主机上的容器网络互通的网络模式
编写swarm的stack文件
在manager节点任意位置创建一个eureka.yml 内容如下:
version: '3'
services:
eureka1:
image: 192.168.1.119/demo/eureka:latest
networks:
spring-cloud-overlay:
aliases:
- eureka
ports:
- "8761:8082"
environment:
- eureka.instance.hostname=eureka1 #指定当前启动服务的hostname
- spring.cloud.inetutils.preferred-networks=192.168.1
- EUREKA_SERVICE_LIST=http://eureka2:8082/eureka,http://eureka3:8082/eureka
eureka2:
image: 192.168.1.119/demo/eureka:latest
networks:
spring-cloud-overlay:
aliases:
- eureka
ports:
- "8762:8082"
environment:
- eureka.instance.hostname=eureka2 #指定当前启动服务的hostname
- spring.cloud.inetutils.preferred-networks=192.168.1
- EUREKA_SERVICE_LIST=http://eureka1:8082/eureka,http://eureka3:8082/eureka
eureka3:
image: 192.168.1.119/demo/eureka:latest
networks:
spring-cloud-overlay:
aliases:
- eureka
ports:
- "8763:8082"
environment:
- eureka.instance.hostname=eureka3 #指定当前启动服务的hostname
- spring.cloud.inetutils.preferred-networks=192.168.1
- EUREKA_SERVICE_LIST=http://eureka1:8082/eureka,http://eureka2:8082/eureka
networks:
spring-cloud-overlay:
external:
name: spring-cloud-overlay
保存eureka.yml后执行:docker stack deploy -c eureka.yml eureka(随意取名)
查看服务
查看eureka_eureka2服务落在那个服务器上:docker service ps eureka_eureka2
登录浏览器,任一打开一个eureka查看
通过docker service ps XXXX查看各服务都落在不同的节点上,验证各节点是否可以相互通信:
上图eureka_eureka2落在112、eureka1落在110、eureka3落在111
查看110上运行的容器:docker ps
登录容器:docker exec -it 052a44f42f2e /bin/bash
都可以ping通其他服务的服务 说明跨主机通讯成功!
ps:如果拉取镜像失败,可以在拉取失败的节点上登录harbor镜像库,如果返回404或80 connect refused 请登录harbor服务器查看harbor是否正常运行
如果非上述状态 在harbor目录下执行:docker-compose restart