spring eureka集羣+spring boot 微服務,容器化部署示例

1.搭建eureka docker集羣

eureka微服務搭建方法可百度(例如 https://www.cnblogs.com/gudi/p/8645869.html)。這裏給出一些eureka在docker 中部署的重要配置。

(1)創建eureka容器

參考如下指令,在不同的服務器上創建eureka容器。(提前在docker hup 上下載好java:8的鏡像)

 docker run -d --name registry1 -p 8762:8080 --log-opt max-size=10m --log-opt max-file=3 -v /usr/local/project/docker/registry:/usr/src/myapp -w /usr/src/myapp -v /etc/localtime:/etc/localtime:ro --restart=always  java:8 sh start.sh
 docker run -d --name registry1 -p 8762:8080 --log-opt max-size=10m --log-opt max-file=3 -v /usr/local/project/docker/registry:/usr/src/myapp -w /usr/src/myapp -v /etc/localtime:/etc/localtime:ro --restart=always  java:8 sh start.sh

注意:

-p 8762:8080:該docker 容器網絡默認採用橋接方式。對外暴露8762端口。docker 會爲容器虛擬一個網卡,在容器內部使用該虛擬IP以及對應端口(8080).若配置 --net=host則使用宿主機的IP及端口。

-w /usr/src/myapp :docker運行各種指令的默認路徑

-v /etc/localtime:/etc/localtime:ro :同步系統時間到容器

(2)在jar包掛載點的目錄(/usr/local/project/docker/registry)下放一個啓動腳本,例如 start.sh 。原因是啓動時可以配置各種參數,如堆內存,這兩靈活一些。

start.sh

#!/bin/sh
java -Xms128m -Xmx150m -Duser.timezone=GMT+8 -jar app.jar --server.port=8080 --spring.profiles.active=test

--server.port=8080:對應 -p 裏的8080端口

-Duser.timezone=GMT+8 :修改jvm的運行時間。因爲有時候發現系統時間已同步到容器,容器內部用date命令查時間也對,但是程序內部取時間總是不對,經常是查8個小時。

(2)eureka重要配置參數

之前在將eureka服務放入docker 時遇到一些問題,主要是因爲進入容器後環境變了,一些參數需要做出調整。貼出排至參數以供參考。

#eureka服務名稱(DS Replicas)
eureka.instance.hostname=registry1
#要註冊的集羣服務地址
eureka.client.service-url.defaultZone=http://192.168.1.102:8762/eureka/
#重要:註冊服務時 指定IP地址
eureka.instance.ip-address=192.168.1.101
#重要:註冊服務時手動指定該服務的IP地址
eureka.instance.prefer-ip-address= true
#如下兩個參數要配置成ture否則不會被註冊
eureka.client.registerWithEureka=true
eureka.client.fetchRegistry=true
#服務名稱(Instances currently registered with Eureka)
spring.application.name=spring-cloud-eureka
#指定該eureka註冊時對方訪問自己時使用的端口號
eureka.instance.nonSecurePort=9001

其他配置參數參考:https://www.jianshu.com/p/e2bebfb0d075  https://www.cnblogs.com/fangfuhai/p/7070325.html

(3)啓動服務

成功註冊到另一個eureka

獲取要註冊的目標eureka服務中的微服務註冊信息。

2.添加微服務容器並註冊到對應eureka

(1)創建docker 容器

這裏提供兩個創建容器命令,一個是java環境的,提供運行微服務jar包的環境,如安裝的了指定版本的jdk。另一個是創建tomcat容器的。

java

docker pull java:8 #下載java8的docker鏡像

docker run -d --name member -p 9000:8080 --log-opt max-size=10m --log-opt max-file=3 -v /usr/local/project/docker/member:/usr/src/myapp -w /usr/src/myapp -v /etc/localtime:/etc/localtime:ro --restart=always  java:8 sh start.sh

注意:

tomcat

docker pull tomcat:8.0.53-jre8 #下載內置jre 8的tomcat運行環境(如果是 tomcat:8的話裏面的jre版本是7!!從啓動log裏可以看出,如果你的程序是居於更高版本的,則你的war包只解壓不啓動,似乎也沒什麼提示。。)。

 

docker run -d -p 9111:8080 --restart=always -v /usr/local/project/docker/tomcat/cms/webapps:/usr/local/tomcat/webapps -v /usr/local/project/docker/tomcat/cms/logs:/usr/local/tomcat/logs  -v /etc/localtime:/etc/localtime:ro -e JAVA_OPTS='-Dsome.property=value' -e  Xmx=256m   --name=cms tomcat:8.0.53-jre8

-e JAVA_OPTS='-Dsome.property=value' -e  Xmx=256m :據說這個命令可以限制堆內存。

-v /usr/local/project/docker/tomcat/cms/webapps:/usr/local/tomcat/webapps:設置war包的掛載點。

(2)配置微服務註冊eureka參數

eureka.client.service-url.defaultZone=http://192.168.1.101:8762/eureka/
eureka.instance.instance-id=192.168.1.101:9001
eureka.instance.ip-address=192.168.1.101
eureka.instance.prefer-ip-address= true
eureka.instance.nonSecurePort=9001

這裏還是要手動指定 通過eureka訪問本微服務時使用的IP和端口號。因爲咱們的容器使用的是橋接方式,默認情況下,容器裏的微服務會自動獲取容器內部的ip和端口,而取出來的是docker 容器的虛擬網卡的IP和用戶定義的內部端口號,到時別的服務找不到自己。

 

到此就實現的eureka集羣搭建以及spring boot 微服務的容器化管理。這樣做確實不夠優雅,但是在需要管理的服務不是特別多,且服務的位置環境相對固定的情況下還是能用的。

 

 

一些參考

https://blog.csdn.net/tianyaleixiaowu/article/details/78184793

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章