Docker Swarm 搭建SpringCloud集群

本次会尝试将上一篇 spring cloud 快速学习教程项目部署在Swarm集群中,如何搭建swarm集群请看Docker Swarm集成搭建
源码github分支master-swarm https://github.com/liangxiaobo/springbootcloud-all.git

1. swarm环境

基于Docker Swarm集成搭建的基础上,我的三台测试机

IP 角色
172.16.10.85 manager
172.16.10.86 worker
172.16.10.87 worker

我的自建Docker私库地址 172.16.10.192:5000

2. 优化springcloud项目

优化项目的配置文件注释掉显示真实IP,并给应用给加hostname,举例:

eureka:
  instance:
    leaseRenewalIntervalInSeconds: 10
    health-check-url-path: /actuator/health
#    prefer-ip-address: true
    hostname: service-user

注释的目的是让hostname和swarm service的name相同,这然在容器内部就可以使用http://hostname:port访问了,因为swarm内置的DNS使用servicename就可以访问

2.1 打包项目镜像

从github上下载分支 master-swarm

git clone -b master-swarm https://github.com/liangxiaobo/springbootcloud-all.git

如果你有自己的私库请将根目录的pom.xml中的 docker.image.prefix 改为自己的或公共库地址
如果不上传镜像的话,在创建service时会报找不到镜像的错误异常

打包docker镜像命令可以在项目根目录执行:

sh mvn-package-docker.sh

也可以手动在需要的项目下执行:

mvn package docker:build -Dmaven.test.skip=true

2.2 上传镜像到私有库中

查看打包出来的镜像:

[root@swarm-m service-user]# docker images
REPOSITORY                                    TAG                 IMAGE ID            CREATED             SIZE
172.16.10.192:5000/service-user               latest              1454fd81bb0c        42 minutes ago      692MB
172.16.10.192:5000/spring-boot-admin-server   latest              7b650dd6b8e9        12 hours ago        697MB
172.16.10.192:5000/swagger-doc                latest              03461f85d700        14 hours ago        689MB
172.16.10.192:5000/client-turbine-monitor     latest              a13d83c7ae8a        14 hours ago        692MB
172.16.10.192:5000/client-gateway-zuul        latest              379566b57536        14 hours ago        694MB
172.16.10.192:5000/client-order-ribbon        latest              e352da8519ec        14 hours ago        694MB
172.16.10.192:5000/client-feign               latest              5f8a2769bf61        14 hours ago        694MB
172.16.10.192:5000/service-order              latest              aacca65e148b        14 hours ago        692MB
172.16.10.192:5000/eureka-server              latest              dfc6e58fadf4        14 hours ago        691MB

上传镜像需要先登录到私库:

docker login -u 用户名 -p 密码 172.16.10.192:5000<私库的IP:PORT>

其它节点要也登录到私库服务器

登出的话:

docker logout 172.16.10.192:5000<私库的IP:PORT>

执行上传命令:

docker push 172.16.10.192:5000/eureka-server
# docker push <IP:PORT/镜像名>

查看上传的镜像:


WX20181017-113641@2x.png

3. 创建swarm service

这里特别说明一下,如果是在私有库上拉镜像需要在 docker service create 上加 --with-registry-auth,否则会报错,下会演示:

[root@swarm-m service-user]# docker service create  --name service-user3 --replicas 3 --network my-overlay-network --publish 8863:8763 -e "SPRING_PROFILES_ACTIVE=test" 172.16.10.192:5000/service-user
image 172.16.10.192:5000/service-user:latest could not be accessed on a registry to record
its digest. Each node will access 172.16.10.192:5000/service-user:latest independently,
possibly leading to different nodes running different
versions of the image.

0rslh6ebjm0xpf9dbw6z6ou1b
overall progress: 1 out of 3 tasks 
1/3: No such image: 172.16.10.192:5000/service-user:latest 
2/3: No such image: 172.16.10.192:5000/service-user:latest 
3/3: running   [==================================================>] 
^COperation continuing in background.

为会么要加 --with-registry-auth 官网上有解释:
https://docs.docker.com/engine/reference/commandline/service_create/#create-a-service

WX20181017-115328@2x.png

大概是说:这能将登录令牌从本地客户端传递到部署服务的swarm节点,从而是节点能登陆到私有注册表拉取镜像

3.2. 执行docker service create

这是要创建服务的命令:
--network my-overlay-network 是自定义网络

docker service create --name zipkin-service --replicas 2 --network my-overlay-network --publish 9411:9411  openzipkin/zipkin

docker service create --with-registry-auth --name eureka-server --replicas 2 --network my-overlay-network --publish 8761:8761 -e "SPRING_PROFILES_ACTIVE=test-peer1" 172.16.10.192:5000/eureka-server

docker service create --with-registry-auth --name service-user --replicas 2 --network my-overlay-network --publish 8763:8763 -e "SPRING_PROFILES_ACTIVE=test" 172.16.10.192:5000/service-user

docker service create --with-registry-auth --name service-order --replicas 2 --network my-overlay-network --publish 8764:8764 -e "SPRING_PROFILES_ACTIVE=test" 172.16.10.192:5000/service-order

docker service create --with-registry-auth --name spring-boot-admin-server --replicas 1 --network my-overlay-network --publish 8773:8773 -e "SPRING_PROFILES_ACTIVE=test" 172.16.10.192:5000/spring-boot-admin-server

docker service create --with-registry-auth --name client-order-ribbon --replicas 2 --network my-overlay-network --publish 8766:8766 -e "SPRING_PROFILES_ACTIVE=test" 172.16.10.192:5000/client-order-ribbon

docker service create --with-registry-auth --name client-feign --replicas 2 --network my-overlay-network --publish 8765:8765 -e "SPRING_PROFILES_ACTIVE=test" 172.16.10.192:5000/client-feign

docker service create --with-registry-auth --name client-gateway-zuul --replicas 2 --network my-overlay-network --publish 8771:8771 -e "SPRING_PROFILES_ACTIVE=test" 172.16.10.192:5000/client-gateway-zuul

docker service create --with-registry-auth --name client-turbine-monitor --replicas 2 --network my-overlay-network --publish 8767:8767 -e "SPRING_PROFILES_ACTIVE=test" 172.16.10.192:5000/client-turbine-monitor

服务创建完可以查看

[root@swarm-m /]# docker service ls
ID                  NAME                       MODE                REPLICAS            IMAGE                                                PORTS
lbwpqv24hw9b        client-feign               replicated          2/2                 172.16.10.192:5000/client-feign:latest               *:8765->8765/tcp
vwtnddgl94ck        client-gateway-zuul        replicated          2/2                 172.16.10.192:5000/client-gateway-zuul:latest        *:8771->8771/tcp
14vmm45dtnl9        client-order-ribbon        replicated          2/2                 172.16.10.192:5000/client-order-ribbon:latest        *:8766->8766/tcp
y8twu0mclhia        client-turbine-monitor     replicated          2/2                 172.16.10.192:5000/client-turbine-monitor:latest     *:8767->8767/tcp
p0sy1vwrvq6f        eureka-server              replicated          2/2                 172.16.10.192:5000/eureka-server:latest              *:8761->8761/tcp
zqlpb42ipqhu        service-order              replicated          2/2                 172.16.10.192:5000/service-order:latest              *:8764->8764/tcp
kh89t4hpgr70        service-user               replicated          2/2                 172.16.10.192:5000/service-user:latest               *:8763->8763/tcp
0rslh6ebjm0x        service-user3              replicated          3/3                 172.16.10.192:5000/service-user:latest               *:8863->8763/tcp
25ji5lwx66cq        spring-boot-admin-server   replicated          1/1                 172.16.10.192:5000/spring-boot-admin-server:latest   *:8773->8773/tcp
iptkiejwkuyu        zipkin-service             replicated          2/2                 openzipkin/zipkin:latest                             *:9411->9411/tcp

访问 http://172.16.10.85:8761/

WX20181017-142759@2x.png

访问 http://172.16.10.85:8773 并用admin登录

WX20181017-142956@2x.png

4. 使用stack发布服务

编写docker-compose.yml

version: '3'

services:

  zipkin-service:
    image: openzipkin/zipkin:latest
    deploy:
      mode: replicated
      replicas: 2
      restart_policy:
        condition: on-failure
    ports:
      - "9411:9411"
    networks:
      my-overlay-network:
        aliases:
          - zipkin-service

  eureka-server:
    image: 172.16.10.192:5000/eureka-server:latest
    deploy:
      mode: replicated
      replicas: 2
      restart_policy:
        condition: on-failure
#      placement:
#        constraints: [node.role == worker]
    ports:
      - "8761:8761"
    networks:
      my-overlay-network:
        aliases:
          - eureka-server
    environment:
        - "SPRING_PROFILES_ACTIVE=test-peer1"

  service-user:
    image: 172.16.10.192:5000/service-user:latest
    deploy:
      mode: replicated
      replicas: 2
      restart_policy:
        condition: on-failure
    ports:
      - "8763:8763"
    networks:
      my-overlay-network:
        aliases:
          - service-user
    environment:
        - "SPRING_PROFILES_ACTIVE=test"

  service-order:
    image: 172.16.10.192:5000/service-order:latest
    deploy:
      mode: replicated
      replicas: 2
      restart_policy:
        condition: on-failure
    ports:
      - "8764:8764"
    networks:
      my-overlay-network:
        aliases:
          - service-order
    environment:
        - "SPRING_PROFILES_ACTIVE=test"

  client-order-ribbon:
    image: 172.16.10.192:5000/client-order-ribbon:latest
    deploy:
      mode: replicated
      replicas: 2
      restart_policy:
        condition: on-failure
    ports:
      - "8766:8766"
    networks:
      my-overlay-network:
        aliases:
          - client-order-ribbon
    environment:
        - "SPRING_PROFILES_ACTIVE=test"

  client-feign:
    image: 172.16.10.192:5000/client-feign:latest
    deploy:
      mode: replicated
      replicas: 2
      restart_policy:
        condition: on-failure
    ports:
      - "8765:8765"
    networks:
      my-overlay-network:
        aliases:
          - client-feign
    environment:
        - "SPRING_PROFILES_ACTIVE=test"

  client-gateway-zuul:
    image: 172.16.10.192:5000/client-gateway-zuul:latest
    deploy:
      mode: replicated
      replicas: 2
      restart_policy:
        condition: on-failure
    ports:
      - "8771:8771"
    networks:
      my-overlay-network:
        aliases:
          - client-gateway-zuul
    environment:
        - "SPRING_PROFILES_ACTIVE=test"

  client-turbine-monitor:
    image: 172.16.10.192:5000/client-turbine-monitor:latest
    deploy:
      mode: replicated
      replicas: 2
      restart_policy:
        condition: on-failure
    ports:
      - "8767:8767"
    networks:
      my-overlay-network:
        aliases:
          - client-turbine-monitor
    environment:
        - "SPRING_PROFILES_ACTIVE=test"

  spring-boot-admin-server:
    image: 172.16.10.192:5000/spring-boot-admin-server:latest
    deploy:
      mode: replicated
      replicas: 1
      restart_policy:
        condition: on-failure
    ports:
      - "8773:8773"
    networks:
      my-overlay-network:
        aliases:
          - spring-boot-admin-server
    environment:
        - "SPRING_PROFILES_ACTIVE=test"



  visualizer:
    image: dockersamples/visualizer:stable
    ports:
      - "8080:8080"
    volumes:
      - "/var/run/docker.sock:/var/run/docker.sock"
    deploy:
      placement:
        constraints: [node.role == manager]
    networks:
      - my-overlay-network

networks:
  my-overlay-network:
    driver: overlay

配置中配置的自定义网络

networks:
  my-overlay-network:
    driver: overlay

还可以在网络中配置别名

networks:
      my-overlay-network:
        aliases:
          - spring-boot-admin-server

执行命令:
如果是私有库必须加上 --with-registry-auth 否则镜像下载不了

docker stack deploy -c docker-compose.yml --with-registry-auth app

公共库可以使用:

docker stack deploy -c docker-compose.yml  app

查看

[root@swarm-m /]# docker stack ls
NAME                SERVICES            ORCHESTRATOR
app                 10                  Swarm
[root@swarm-m /]# docker service ls
ID                  NAME                           MODE                REPLICAS            IMAGE                                                PORTS
0f4hpqx7u5p3        app_client-feign               replicated          2/2                 172.16.10.192:5000/client-feign:latest               *:8765->8765/tcp
ju5rg4l5x0ir        app_client-gateway-zuul        replicated          2/2                 172.16.10.192:5000/client-gateway-zuul:latest        *:8771->8771/tcp
i1t6wbyd2si6        app_client-order-ribbon        replicated          2/2                 172.16.10.192:5000/client-order-ribbon:latest        *:8766->8766/tcp
rkld2rq7ntw5        app_client-turbine-monitor     replicated          2/2                 172.16.10.192:5000/client-turbine-monitor:latest     *:8767->8767/tcp
j1s5yy1lkw9f        app_eureka-server              replicated          2/2                 172.16.10.192:5000/eureka-server:latest              *:8761->8761/tcp
u38tk0j0ez4l        app_service-order              replicated          2/2                 172.16.10.192:5000/service-order:latest              *:8764->8764/tcp
sv6h294y9r60        app_service-user               replicated          2/2                 172.16.10.192:5000/service-user:latest               *:8763->8763/tcp
ybu18hzo4ra6        app_spring-boot-admin-server   replicated          1/1                 172.16.10.192:5000/spring-boot-admin-server:latest   *:8773->8773/tcp
2m48cqlcip6v        app_visualizer                 replicated          1/1                 dockersamples/visualizer:stable                      *:8080->8080/tcp
692kwr04oa5u        app_zipkin-service             replicated          2/2                 openzipkin/zipkin:latest                             *:9411->9411/tcp
WX20181018-093328@2x.png
WX20181017-180634@2x.png
WX20181017-180615@2x.png
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 158,233评论 4 360
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 67,013评论 1 291
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 108,030评论 0 241
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 43,827评论 0 204
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 52,221评论 3 286
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 40,542评论 1 216
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 31,814评论 2 312
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 30,513评论 0 198
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 34,225评论 1 241
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 30,497评论 2 244
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 31,998评论 1 258
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 28,342评论 2 253
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 32,986评论 3 235
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 26,055评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,812评论 0 194
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 35,560评论 2 271
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 35,461评论 2 266

推荐阅读更多精彩内容