<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          Spring Eureka 本地Docker集群部署

          共 4679字,需瀏覽 10分鐘

           ·

          2020-09-30 12:15

          點擊上方藍色字體,選擇“標星公眾號”

          優(yōu)質文章,第一時間送達

          ? 作者?|??隨風如夢?

          來源 |? urlify.cn/iyE3qu

          66套java從入門到精通實戰(zhàn)課程分享

          • 故事背景

          最近因為產線使用的服務與發(fā)現(xiàn)服務,使用的是Spring Cloud Eureka集群部署,為了以后調試產線的問題,想在本地搭建和產線一樣的環(huán)境。產線的所有服務都是基于K8s和Docker部署,所以本地也想將Eureka部署到本地的Docker環(huán)境。

          • Eureka介紹

          Eureka 屬于 Spring Netflix的一個子項目,主要是為了實現(xiàn)服務的注冊與發(fā)現(xiàn),如果我們做微服務開發(fā),這個功能是必不可少的。具有類似功能的 Spring 子項目還有 Spring Consul、Zookeeper 和 阿里的 Nacos,后面如果使用到再做介紹。

          • Spring配置

          首先,我們要創(chuàng)建一個Spring boot項目,建議使用Idea去創(chuàng)建,比較方便,如下圖:

          ?直接Next,然后設置自己項目信息,然后選擇pom的依賴項,如下圖:

          直接Next,然后finished, 這里推薦使用父子module的項目管理方式。項目創(chuàng)建完成以后,進行服務的配置,首先,需要在Application啟動類上加注解?@EnableEurekaServer,如下圖:

          ?

          ?然后,進行yml文件的配置,因為我們要部署集群,所以我們創(chuàng)建3個yml文件,然后文件中設置不同的端口來啟動,如下圖:

          ?

          ?yml文件內容如下:

          application-eureka01.yml
          ------------------------------------------------------------
          spring:
          ??application:
          ????name:?eureka

          server:
          ??port:?7001

          eureka:
          ??instance:
          ????#eureka服務端的實例名稱
          ????hostname:?eureka01
          ??client:
          ????#?false表示不向注冊中心注冊自己
          ????register-with-eureka:?true
          ????#?false表示自己端就是注冊中心,我的職責就是維護服務實例,并不需要去檢索服務
          ????fetch-registry:?true
          ????service-url:
          ??????#設置與Eureka Server交互的地址查詢服務和注冊服務都需要依賴這個地址(單機)。
          ??????defaultZone:??http://eureka02:7002/eureka/,http://eureka03:7003/eureka/


          application-eureka02.yml
          ------------------------------------------------------------
          spring:
          ??application:
          ????name:?eureka

          server:
          ??port:?7002

          eureka:
          ??instance:
          ????#eureka服務端的實例名稱
          ????hostname:?eureka02
          ??client:
          ????#?false表示不向注冊中心注冊自己
          ????register-with-eureka:?true
          ????#?false表示自己端就是注冊中心,我的職責就是維護服務實例,并不需要去檢索服務
          ????fetch-registry:?true
          ????service-url:
          ??????#設置與Eureka Server交互的地址查詢服務和注冊服務都需要依賴這個地址(單機)。
          ??????defaultZone:?http://eureka01:7001/eureka/,http://eureka03:7003/eureka/


          application-eureka03.yml
          ------------------------------------------------------------
          spring:
          ??application:
          ????name:?eureka

          server:
          ??port:?7003

          eureka:
          ??instance:
          ????#eureka服務端的實例名稱
          ????hostname:?eureka03
          ??client:
          ????#?false表示不向注冊中心注冊自己
          ????register-with-eureka:?true
          ????#?false表示自己端就是注冊中心,我的職責就是維護服務實例,并不需要去檢索服務
          ????fetch-registry:?true
          ????service-url:
          ??????#設置與Eureka Server交互的地址查詢服務和注冊服務都需要依賴這個地址(單機)。
          ??????defaultZone:?http://eureka01:7001/eureka/,http://eureka02:7002/eureka/

          然后,在Serives View里面創(chuàng)建3個啟動配置,并且分別設置 Active profiles,如下圖:

          ?

          ?最后,也是比較容易忘記的一步,記得修改本地的hosts文件,添加一行 :

          127.0.0.1?eureka01?eureka02?eureka03

          啟動3個Eureka 服務,然后訪問:http://localhost:7001/,你會看到如下頁面,說明你已經(jīng)配置成功:

          ?

          • Docker配置

          ?我本地是安裝的windows版本docker,主要是為了節(jié)省內存,如果在linux下安裝還需要裝一個虛擬機工具。而且windows版本的docker用起來也蠻方便的,很多操作可以在Dashboard里面操作,省去了很多不斷重復的命令,特別是看日志和進入容器。具體安裝過程很簡單,這里就不作說明。在這里首先我們要制作Dockerfile,制作好放到和pom文件的同目錄下,內容如下圖:

          #?指定基礎鏡像,這是分階段構建的前期階段
          FROM?openjdk:8u212-jdk-stretch?as?builder
          #?執(zhí)行工作目錄
          WORKDIR?application
          #?配置參數(shù)
          ARG?JAR_FILE=target/*.jar
          #?將編譯構建得到的jar文件復制到鏡像空間中
          COPY?${JAR_FILE}?application.jar
          #?通過工具spring-boot-jarmode-layertools從application.jar中提取拆分后的構建結果
          RUN?java?-Djarmode=layertools?-jar?application.jar?extract

          #?正式構建鏡像
          FROM?openjdk:8u212-jdk-stretch
          WORKDIR?application
          #?前一階段從jar中提取除了多個文件,這里分別執(zhí)行COPY命令復制到鏡像空間中,每次COPY都是一個layer
          COPY?--from=builder?application/dependencies/?./
          COPY?--from=builder?application/spring-boot-loader/?./
          COPY?--from=builder?application/snapshot-dependencies/?./
          COPY?--from=builder?application/application/?./
          ENTRYPOINT?["java",?"org.springframework.boot.loader.JarLauncher"]

          然后,編譯打包項目:

          mvn?clean?package?-U?-DskipTests

          這時會在target目錄下看到 eureka-0.0.1-SNAPSHOT.jar 。接下來我們需要構建docker image,我們默認在Dockerfile的目錄下,命令如下:

          docker?build?-t?eureka:0.0.8?.

          此時我們可以用 Windows PowerShell 執(zhí)行如下命令,去看一下我們構建的image,并且依次啟動3個eureka服務:

          #查看所有鏡像?docker?images
          ?#啟動3個eureka服務?docker?run?--name?eureka01?-d?-p?7001:7001?eureka:0.0.1?--spring.profiles.active=eureka01?docker?run?--name?eureka02?-d?-p?7002:7002?eureka:0.0.1?--spring.profiles.active=eureka02?docker?run?--name?eureka03?-d?-p?7003:7003?eureka:0.0.1?--spring.profiles.active=eureka03

          此時我們可以在Docker Dashboard看到,我們啟動的容器,但是此時容器之間是無法通過服務名相互訪問的,所以在容器console中我們可以看到拒絕連接的報錯:

          接下來有重要一步驟就是,需要創(chuàng)建自己的一個bridge network,然后將eureka服務連接這個network中,因為默認docker的containers相互是可以通過IP相互訪問,但是不能夠通過hostname相互訪問,docker的containers經(jīng)常會動態(tài)改變,所以在這里我們就需要用到一個自定義bridge網(wǎng)路,它在容器之間提供了自動DNS解析的功能,具體原因可以參考這篇文章:https://juejin.im/post/6844903847383547911 。

          #?創(chuàng)建一個自定義的?bridge?network,指定網(wǎng)段的時候注意,別和其它網(wǎng)卡的網(wǎng)段沖突
          docker?network?create?--subnet=172.19.0.0/16?mynetwork

          #查看創(chuàng)建的network信息
          docker?network?inspect?mynetwork

          #刪除網(wǎng)卡命令
          #docker?network?rm?mynetwork

          #?將eureka服務加入mynetwork網(wǎng)絡中
          docker?network?connect?mynetwork?eureka01
          docker?network?connect?mynetwork?eureka02
          docker?network?connect?mynetwork?eureka03

          #再次查看network的信息,你會看到每個eureka服務在?mynetwork?中分配的IP信息
          docker?network?inspect?mynetwork

          此時,我們再次查看容器的控制臺,錯誤就會消失,我們再次訪問 http://localhost:7001/?可以看到eureka cluster已經(jīng)正常運行起來。

          ?




          粉絲福利:108本java從入門到大神精選電子書領取

          ???

          ?長按上方鋒哥微信二維碼?2 秒
          備注「1234」即可獲取資料以及
          可以進入java1234官方微信群



          感謝點贊支持下哈?



          瀏覽 58
          點贊
          評論
          收藏
          分享

          手機掃一掃分享

          分享
          舉報
          評論
          圖片
          表情
          推薦
          點贊
          評論
          收藏
          分享

          手機掃一掃分享

          分享
          舉報
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  操阿姨| 国产69精品久久久久久久久久 | 青春草在线观看国产 | 加勒比无码综合在线 | 五月丁香婷婷综合 |