GVKun编程网logo

SpringCloud(第 053 篇)CentOS7 中用 Docker 部署一个简单的基于 Eureka 服务治理发现的项目

6

此处将为大家介绍关于SpringCloud的详细内容,并且为您解答有关第053篇CentOS7中用Docker部署一个简单的基于Eureka服务治理发现的项目的相关问题,此外,我们还将为您介绍关于ce

此处将为大家介绍关于SpringCloud的详细内容,并且为您解答有关第 053 篇CentOS7 中用 Docker 部署一个简单的基于 Eureka 服务治理发现的项目的相关问题,此外,我们还将为您介绍关于centos7用docker部署spring cloud eureka-server、docker springcloud 微服务 eureka集群、docker初体验:Docker部署SpringCloud项目eureka-server、Spring Cloud Eureka 服务治理的有用信息。

本文目录一览:

SpringCloud(第 053 篇)CentOS7 中用 Docker 部署一个简单的基于 Eureka 服务治理发现的项目

SpringCloud(第 053 篇)CentOS7 中用 Docker 部署一个简单的基于 Eureka 服务治理发现的项目

SpringCloud(第 053 篇)CentOS7 中用 Docker 部署一个简单的基于 Eureka 服务治理发现的项目

一、大致介绍

1、纠结了一下下,这么简单的部署流程是否需要详细的贴出来,然而纠结了一下还是将这个简单的部署流程补充完整了;
2、经过上节的讲解,相信大家已经对docker的命令操作都有了一定的了解,这里我就暂且默认大家都拥有了可操作的环境以及了解操作指令;
3、本章节基于docker来操作部署SpringCloud项目;
4、注意在利用idea打包生成jar文件时,里面的localhost请改成你的宿主机的ip地址,但是如果统一部署到测试或者生产环境的话,请改为动态配置,方便动态修改,因此我这里做测试的话,首先将代码中的localhost就直接改成宿主机的ip地址,然后再打出jar包;

二、针对简单用户微服务进行 docker 部署

2.1 利用 idea 对 springms-simple-provider-user 项目进行打包

1、这个打包就看大家喜好,用命令打包也好,用鼠标操作打包也好,反正目的就是在项目的target目录下生成jar文件即可;

2、本人这里使用ideaIDE开发工具,就沿着 Maven Project -> springms-simple-provider-user -> Lifecycle -> package 路径双击 package 即可;

3、然后就会看到项目中 springms-simple-provider-user/target 下多了一个 springms-simple-provider-user-1.0-SNAPSHOT.jar 文件;

2.2 上传 springms-simple-provider-user-1.0-SNAPSHOT.jar 至 linux 服务器

1、本人在Linux下喜欢操作命令,所以这里就给大家演示一下怎么用SecureCRT执行命令将文件传到服务器;

2、首先登录上服务器就不用说了,然后在SecureCRT中操作 “alt+p” 快捷键操作,此时将会打开一个新的页签,页签的第一行则是 “sftp>” 这个字样,说明已经进入了上传文件的命令窗口了;

3、找到需要将文件放置到服务器的位置;
	sftp> cd /home/docker/demo
	sftp> put D:\ANDROID\Code\Spring-Cloud\SpringCloudTutorial\springms-simple-provider-user\target\springms-simple-provider-user-1.0-SNAPSHOT.jar
	Uploading springms-simple-provider-user-1.0-SNAPSHOT.jar to /home/docker/demo/springms-simple-provider-user-1.0-SNAPSHOT.jar
	  100% 31995KB   1333KB/s 00:00:24     
	D:/ANDROID/Code/Spring-Cloud/SpringCloudTutorial/springms-simple-provider-user/target/springms-simple-provider-user-1.0-SNAPSHOT.jar: 32763475 bytes transferred in 24 seconds (1333 KB/s)
	sftp> 

4、然后切换到刚刚敲 “alt+p” 快捷键的那个窗口,执行命令查看文件是否上传成功
	[root@svr01 ~]#  ls /home/docker/demo
	springms-simple-provider-user-1.0-SNAPSHOT.jar

2.3 编写并保存 Dockerfile 文件

1、进入 /home/docker/demo
	[root@svr01 ~]#  cd /home/docker/demo

2、采用 vim或者vi 命令创建 Dockerfile 文件,并输入文件内容
	[root@svr01 demo]#  vim Dockerfile
	FROM frolvlad/alpine-oraclejdk8:slim
	VOLUME /tmp
	ADD springms-simple-provider-user-1.0-SNAPSHOT.jar app.jar
	RUN sh -c ''touch /app.jar''
	ENV JAVA_OPTS=""
	ENTRYPOINT [ "sh", "-c", "java $JAVA_OPTS -Djava.security.egd=file:/dev/./urandom -jar /app.jar" ]

3、保存 Dockerfile 文件内容,执行命令顺序如下,命令的先后执行顺序为:
	Esc
	Shift+:
	wq
	Enter

2.4 用 docker build 命令将给定的 Dockerfile 和上下文以构建 Docker 镜像

1、构建镜像
	[root@svr01 demo]# docker build -t springms-simple-provider-user .
	Sending build context to Docker daemon 32.77 MB
	Step 1 : FROM frolvlad/alpine-oraclejdk8:slim
	 ---> 4f03dc990224
	Step 2 : VOLUME /tmp
	 ---> Running in dfd09d567767
	 ---> f76843b950c7
	Removing intermediate container dfd09d567767
	Step 3 : ADD springms-simple-provider-user-1.0-SNAPSHOT.jar app.jar
	 ---> e009af0cc3bc
	Removing intermediate container 0884992be7c0
	Step 4 : RUN sh -c ''touch /app.jar''
	 ---> Running in 4fb67225860f
	 ---> 06320de95ea3
	Removing intermediate container 4fb67225860f
	Step 5 : ENV JAVA_OPTS ""
	 ---> Running in 519c55360fda
	 ---> bb2377cac425
	Removing intermediate container 519c55360fda
	Step 6 : ENTRYPOINT sh -c java $JAVA_OPTS -Djava.security.egd=file:/dev/./urandom -jar /app.jar
	 ---> Running in 95eb606d0e57
	 ---> 2aaa88be3d65
	Removing intermediate container 95eb606d0e57
	Successfully built 2aaa88be3d65

2、查看产生的镜像
	[root@svr01 demo]# docker images
	REPOSITORY                             TAG                 IMAGE ID            CREATED             SIZE
	springms-simple-provider-user          latest              2aaa88be3d65        6 seconds ago       235.6 MB
	docker.io/centos                       v2                  11efb35f320c        7 hours ago         307.5 MB
	docker.io/frolvlad/alpine-oraclejdk8   latest              4f03dc990224        12 days ago         170.1 MB
	frolvlad/alpine-oraclejdk8             slim                4f03dc990224        12 days ago         170.1 MB
	docker.io/centos                       latest              3fa822599e10        2 weeks ago         203.5 MB
	docker.io/hello-world                  latest              f2a91732366c        3 weeks ago         1.848 kB

2.5 启动刚刚构建好的 docker 镜像

[root@svr01 demo]# docker run -p 8000:8000 -t springms-simple-provider-user

  .   ____          _            __ _ _
 /\\ / ___''_ __ _ _(_)_ __  __ _ \ \ \ \
( ( )\___ | ''_ | ''_| | ''_ \/ _` | \ \ \ \
 \\/  ___)| |_)| | | | | || (_| |  ) ) ) )
  ''  |____| .__|_| |_|_| |_\__, | / / / /
 =========|_|==============|___/=/_/_/_/
 :: Spring Boot ::        (v1.4.1.RELEASE)
 。。。。
 【【【【【【 简单用户微服务 】】】】】】已启动.

2.6 测试 docker 部署 springcloud 项目是否成功

1、还记得我么在电脑本机测试的地址么,地址为:http://localhost:8000/simple/1 ?
2、现在目前我在阿里云上部署操作,所以这个localhost我就需要换成阿里云的ip地址,总而言之这个localhost换成你docker所在服务器的宿主机ip地址准没错;

2.7 尝试停止刚才 docker 部署的项目

[root@svr01 docker]# docker ps -l
CONTAINER ID        IMAGE                           COMMAND                  CREATED             STATUS              PORTS                    NAMES
3a6393ce51b8        springms-simple-provider-user   "sh -c ''java $JAVA_OP"   8 minutes ago       Up 8 minutes        0.0.0.0:8000->8000/tcp   sick_shannon
[root@svr01 docker]# docker stop 3a6393ce51b8
3a6393ce51b8
[root@svr01 docker]# docker ps -l
CONTAINER ID        IMAGE                           COMMAND                  CREATED             STATUS                       PORTS               NAMES
3a6393ce51b8        springms-simple-provider-user   "sh -c ''java $JAVA_OP"   8 minutes ago       Exited (137) 3 seconds ago                       sick_shannon
[root@svr01 docker]# 

2.8 小结

到此为止,我们已经将我们打包好的一个镜像成功部署了,并且可以成功在浏览器访问到输出数据;

三、用 docker 部署一个基于 Eureka 服务治理发现的项目

3.1 从 SpringCloudTutorial 中挑选项目

1、springms-discovery-eureka 
2、springms-provider-user
3、springms-consumer-movie-feign

3.2 依次对刚刚选出来的 3 个项目进行打包,并产生的文件如下,打包前记得将 localhost 的记得改为宿主机 ip 地址

1、springms-discovery-eureka-1.0-SNAPSHOT.jar
2、springms-provider-user-1.0-SNAPSHOT.jar
3、springms-consumer-movie-feign-1.0-SNAPSHOT.jar

3.3 在服务器上构建 docker 项目目录

[root@svr01 ~]# cd /home/docker/
[root@svr01 docker]# mkdir -p springms-consumer-movie-feign springms-discovery-eureka springms-provider-user
[root@svr01 docker]# ll
total 3
drwxr-xr-x 2 root root   76 Dec 15 12:59 demo
drwxr-xr-x 2 root root   76 Dec 15 13:44 springms-consumer-movie-feign
drwxr-xr-x 2 root root   72 Dec 15 13:09 springms-discovery-eureka
drwxr-xr-x 2 root root   69 Dec 15 13:43 springms-provider-user
[root@svr01 docker]# 

3.4 将步骤 3.2 的三个 jar 文件按照步骤 2.2 的方式上传到对应服务器目录去

sftp> cd /home/docker/springms-discovery-eureka
sftp> put D:\ANDROID\Code\Spring-Cloud\SpringCloudTutorial\springms-discovery-eureka\target\springms-discovery-eureka-1.0-SNAPSHOT.jar
Uploading springms-discovery-eureka-1.0-SNAPSHOT.jar to /home/docker/springms-discovery-eureka/springms-discovery-eureka-1.0-SNAPSHOT.jar
  100% 31595KB   1333KB/s 00:00:24     
D:/ANDROID/Code/Spring-Cloud/SpringCloudTutorial/springms-discovery-eureka/target/springms-discovery-eureka-1.0-SNAPSHOT.jar: 32776474 bytes transferred in 28 seconds (1383 KB/s)
sftp> 
sftp> 
sftp> 
sftp> cd /home/docker/springms-provider-user
sftp> put D:\ANDROID\Code\Spring-Cloud\SpringCloudTutorial\springms-provider-user\target\springms-provider-user-1.0-SNAPSHOT.jar
Uploading springms-discovery-eureka-1.0-SNAPSHOT.jar to /home/docker/springms-provider-user/springms-provider-user-1.0-SNAPSHOT.jar
  100% 31565KB   1333KB/s 00:00:24     
D:/ANDROID/Code/Spring-Cloud/SpringCloudTutorial/springms-provider-user/target/springms-provider-user-1.0-SNAPSHOT.jar: 32763789 bytes transferred in 27 seconds (1313 KB/s)
sftp> 
sftp> 
sftp> 
sftp> cd /home/docker/springms-consumer-movie-feign
sftp> put D:\ANDROID\Code\Spring-Cloud\SpringCloudTutorial\springms-consumer-movie-feign\target\springms-consumer-movie-feign-1.0-SNAPSHOT.jar
Uploading springms-discovery-eureka-1.0-SNAPSHOT.jar to /home/docker/springms-consumer-movie-feign/springms-consumer-movie-feign-1.0-SNAPSHOT.jar
  100% 32195KB   1333KB/s 00:00:24     
D:/ANDROID/Code/Spring-Cloud/SpringCloudTutorial/springms-consumer-movie-feign/target/springms-consumer-movie-feign-1.0-SNAPSHOT.jar: 32712375 bytes transferred in 25 seconds (1413 KB/s)

3.5 查看三个文件是否传至服务器成功

[root@svr01 docker]# ll
total 4
drwxr-xr-x 2 root root   76 Dec 15 12:59 demo
drwxr-xr-x 2 root root   76 Dec 15 13:44 springms-consumer-movie-feign
drwxr-xr-x 2 root root   72 Dec 15 13:09 springms-discovery-eureka
drwxr-xr-x 2 root root   69 Dec 15 13:43 springms-provider-user
[root@svr01 docker]# ls springms-discovery-eureka/
springms-discovery-eureka-1.0-SNAPSHOT.jar
[root@svr01 docker]# ls springms-provider-user/
springms-provider-user-1.0-SNAPSHOT.jar
[root@svr01 docker]# ls springms-consumer-movie-feign/
springms-consumer-movie-feign-1.0-SNAPSHOT.jar
[root@svr01 docker]# 

3.6 分别给 3 个模块构建 Dockfile 文件

[root@svr01 ~]#  cd /home/docker/springms-discovery-eureka
[root@svr01 springms-discovery-eureka]#  vim Dockerfile
FROM frolvlad/alpine-oraclejdk8:slim
VOLUME /tmp
ADD springms-discovery-eureka-1.0-SNAPSHOT.jar app.jar
RUN sh -c ''touch /app.jar''
ENV JAVA_OPTS=""
ENTRYPOINT [ "sh", "-c", "java $JAVA_OPTS -Djava.security.egd=file:/dev/./urandom -jar /app.jar" ]
保存Dockfile文件

[root@svr01 springms-discovery-eureka]#
[root@svr01 springms-discovery-eureka]# cd /home/docker/springms-provider-user
[root@svr01 springms-provider-user]#  vim Dockerfile
FROM frolvlad/alpine-oraclejdk8:slim
VOLUME /tmp
ADD springms-provider-user-1.0-SNAPSHOT.jar app.jar
RUN sh -c ''touch /app.jar''
ENV JAVA_OPTS=""
ENTRYPOINT [ "sh", "-c", "java $JAVA_OPTS -Djava.security.egd=file:/dev/./urandom -jar /app.jar" ]
保存Dockfile文件

[root@svr01 springms-provider-user]# cd /home/docker/springms-consumer-movie-feign
[root@svr01 springms-consumer-movie-feign]# vim Dockerfile
FROM frolvlad/alpine-oraclejdk8:slim
VOLUME /tmp
ADD springms-consumer-movie-feign-1.0-SNAPSHOT.jar app.jar
RUN sh -c ''touch /app.jar''
ENV JAVA_OPTS=""
ENTRYPOINT [ "sh", "-c", "java $JAVA_OPTS -Djava.security.egd=file:/dev/./urandom -jar /app.jar" ]
保存Dockfile文件

[root@svr01 springms-consumer-movie-feign]# cd ..
[root@svr01 docker]# ls springms-discovery-eureka/
Dockerfile  springms-discovery-eureka-1.0-SNAPSHOT.jar
[root@svr01 docker]# ls springms-provider-user/
Dockerfile  springms-provider-user-1.0-SNAPSHOT.jar
[root@svr01 docker]# ls springms-consumer-movie-feign/
Dockerfile  springms-consumer-movie-feign-1.0-SNAPSHOT.jar
[root@svr01 docker]# 

3.7 分别对 3 个模块进行镜像构建

[root@svr01 docker]# cd springms-discovery-eureka
[root@svr01 springms-discovery-eureka]# docker build -t springms/discovery-eureka .
[root@svr01 springms-discovery-eureka]# cd ../springms-provider-user
[root@svr01 springms-provider-user]# docker build -t springms/provider-user .
[root@svr01 springms-provider-user]# cd ../springms-consumer-movie-feign
[root@svr01 springms-consumer-movie-feign]# docker build -t springms/consumer-movie-feign .
[root@svr01 springms-consumer-movie-feign]# cd ..
[root@svr01 docker]# docker images
REPOSITORY                            	TAG                 IMAGE ID            CREATED             SIZE
springms/consumer-movie-feign           latest              f6e9ac5c27a7        19 hours ago        507.5 MB
springms/provider-user                  latest              d2b16dc2df77        19 hours ago        535.2 MB
springms/discovery-eureka            	latest              f0f8555dcd0b        19 hours ago        517.1 MB

3.8 分别手动启动 3 个模块

[root@svr01 docker]# docker run -p 8761:8761 -t -d springms/discovery-eureka
[root@svr01 docker]# docker run -p 7900:7900 -t -d springms/provider-user
[root@svr01 docker]# docker run -p 7910:7910 -t -d springms/consumer-movie-feign

3.9 测试

1、首先进入eureka注册中心:http://宿主机IP地址:8761,结果看到2个微服务已经注册上来了,若还没出现的话,稍微等待一下下;
2、测试 http://宿主机IP地址:7910/movie/4,结果可以看到信息输出;
3、说明上述相关的docker部署操作准确无误,一切正常;

3.10 后续展望

既然上面提到了手动部署操作,那么服务多的话,一个个手动部署,岂不是累死去啊,那么在后续的章节中,陆续给大家讲解采用docker服务编排部署操作;

四、下载地址

https://gitee.com/ylimhhmily/SpringCloudTutorial.git

SpringCloudTutorial 交流 QQ 群: 235322432

SpringCloudTutorial 交流微信群: 微信沟通群二维码图片链接

欢迎关注,您的肯定是对我最大的支持!!!

centos7用docker部署spring cloud eureka-server

centos7用docker部署spring cloud eureka-server

spring cloud eureka-server的代码我不多说了。

1.打包成eureka-server-1.jar.

2.新建一个centos7虚拟机。不会的,可以看这一篇。

3.修改Ip addr

4.安装docker

因为centos7的extras源内已经内置docker,所以安装特别简单,直接

yum install docker

搞定!

 

5.修改docker镜像源:(因为原始的docker源下载太慢,国内的就快多了)

vi /etc/docker/daemon.json

{

"registry-mirrors": ["http://hub-mirror.c.163.com"]

}

  

 然后安装上面一样编辑修改。

 

6.将jar包导入 

cd /usr/local
mkdir java
然后导入jar包,具体怎么导入就不略过

7.在/usr/local/java目录下  创建镜像文件(未注释的,表示我也不太明白)

touch Dockerfile
vi Dockerfile
#基础源,本地没有这个镜像,就从仓库下
FROM java:
#挂载点
VOLUME /tmp
ADD eureka-server-1.jar server.jar
#端口
EXPOSE 8080
RUN bash -c "touch /server.jar"
ENTRYPOINT ["java","-Djava.security.egd=file:/dev/./urandom","-jar","/sever.jar"]

 

8.还是在/usr/local/java目录下,新建镜像。

#server后面如果不跟tag,就默认为latest  注意:后面有个.
docker build -t server .
#查看镜像 ,就可以看到生成的镜像了
docker images

9.启动容器  

#我项目配置的端口是8761
docker run -d -p 8761:8761 --name server server:lastest

  这里-d代表在后台运行,-p代表端口映射,--name代表给容器取的名字,后续开启和停止都可以用到

docker run -d -p 8761(本地端口):8761(容器端口) --name server(新建的容器名称) server:lastest(镜像名称)

10.本地测试是否可以访问了  

 

#可以先查看下日志
docker logs server

 

 

好了,到此结束了。

docker springcloud 微服务 eureka集群

docker springcloud 微服务 eureka集群

之前集群各种配置,可以调用服务,但是服务的url 在这里unavailable-replicas 一直出现,意味着不可用。经过各种尝试,最终,还是通过这个hostname的方式进行集群,但应用服务,还是通过IP进行集群调用。

各种失败,百度好久,最终找到一篇文章后。问题解决。之前的困惑是docker容器如何设置hosts文件。

参考文章:https://blog.csdn.net/benben_2015/article/details/88426438

 

最终发布的脚本这样写。

// 定义一个URL,就是集群地址。
UREKA_SERVICEURL="http://test8761:8761/eureka/,http://test8762:8762/eureka/,http://test8763:8763/eureka/"
运行服务 sh "docker run --restart=always -p 8761:8761 "+ "-d -v ${LOG_PATH}:${LOG_PATH} "+
// 注册中心地址 "-e eureka.client.serviceUrl.defaultZone=${EUREKA_SERVICEURL} "+
// 容器名称 "-e eureka.instance.hostname=test8761 "+
// 重点是下面这行,host文件增加3个地址。最终进入到容器中中的/etc/hosts文件也看到了这3个地址。 "--add-host=test8761:192.168.89.130 --add-host=test8762:192.168.89.130 --add-host=test8763:192.168.89.130 "+ "--name ${PROJECT_NAME} "+ " $REPOSITORY"

 进入容器查看

[root@master ~]# docker ps ==========查看所有运行中的容器
CONTAINER ID        IMAGE                                                   COMMAND                  CREATED             STATUS              PORTS                    NAMES
7e8a4101623c        192.168.89.132/mybs-cloud/eureka:0.0.1-SNAPSHOT   "java -Djava.securit…"   19 minutes ago      Up 19 minutes       0.0.0.0:8763->8761/tcp   eureka8763
707bb1f2dc5c        192.168.89.132/mybs-cloud/eureka:0.0.1-SNAPSHOT   "java -Djava.securit…"   19 minutes ago      Up 19 minutes       0.0.0.0:8762->8761/tcp   eureka8762
24636b410d2d        192.168.89.132/mybs-cloud/eureka:0.0.1-SNAPSHOT   "java -Djava.securit…"   19 minutes ago      Up 19 minutes       0.0.0.0:8761->8761/tcp  eureka
[root@master ~]# docker exec -it 24636b410d2d /bin/bash  ===========进入容器
root@24636b410d2d:/# cat /etc/host  =======查看hosts文件
host.conf    hostname     hosts        hosts.allow  hosts.deny   
root@24636b410d2d:/# cat /etc/hosts
127.0.0.1       localhost
::1     localhost ip6-localhost ip6-loopback
fe00::0 ip6-localnet
ff00::0 ip6-mcastprefix
ff02::1 ip6-allnodes
ff02::2 ip6-allrouters
192.168.89.130  test8761
192.168.89.130  test8762
192.168.89.130  test8763
172.17.0.3      24636b410d2d
root@24636b410d2d:/# 

 

 

node("${nodeTag}")  {
// docker 私有仓库注册中心
def REGISTRY_URL="192.168.89.132"
def REGISTRY_UID="admin"
def REGISTRY_PID="Harbor12345"
// 私有仓库主目录名称
def MAIN_NAME="ms-cloud"
// 项目目录所在目录
def PROJECT_NAME="${projectName}"
// 项目版本号
def PROJECT_VERSION="0.0.1-SNAPSHOT"
// 镜像名称
def REPOSITORY="${REGISTRY_URL}/${MAIN_NAME}/${PROJECT_NAME}:${PROJECT_VERSION}"
// 日志路径
def LOG_PATH="/home/date/logs/${PROJECT_NAME}/"
// 注册中心eureka地址
def EUREKA_SERVICEURL="http://192.168.89.130:8761/eureka/,http://192.168.89.130:8762/eureka/,http://192.168.89.130:8763/eureka/"
    stage('start') {
        sh "date +'%Y-%m-%d %H:%M:%s'"
    }
    stage("1、clear ${PROJECT_NAME}") {
        echo "clearing ${PROJECT_NAME}..."     
        sh "docker stop ${PROJECT_NAME} |true"     
        sh "docker rm -f ${PROJECT_NAME} |true"     
        sh "docker image rm $REPOSITORY |true"     
    }
   stage("2、deploy ${PROJECT_NAME}") {
     echo "deploying ${PROJECT_NAME}..."     
    sh "docker login -u ${REGISTRY_UID} -p ${REGISTRY_PID} ${REGISTRY_URL}"
     if (PROJECT_NAME == "ms-base-eureka") {
        EUREKA_SERVICEURL="http://test8761:8761/eureka/,http://test8762:8762/eureka/,http://test8763:8763/eureka/"
        sh "docker run  --restart=always -p 8761:8761 "+
        "-d -v ${LOG_PATH}:${LOG_PATH} "+
        "-e eureka.client.serviceUrl.defaultZone=${EUREKA_SERVICEURL} "+
        "-e eureka.instance.hostname=test8761 "+
        "--add-host=test8761:192.168.89.130 --add-host=test8762:192.168.89.130 --add-host=test8763:192.168.89.130 "+
        "--name ${PROJECT_NAME} "+
        " $REPOSITORY"
        
        sh "docker rm -f ${PROJECT_NAME}8762 |true"     
        sh "docker run --restart=always -p 8762:8761 "+
        "-d -v ${LOG_PATH}8762:${LOG_PATH} "+
        "-e eureka.client.serviceUrl.defaultZone=${EUREKA_SERVICEURL} "+
        "-e eureka.instance.hostname=test8762 "+
        "--add-host=test8761:192.168.89.130 --add-host=test8762:192.168.89.130 --add-host=test8763:192.168.89.130 "+
        "--name ${PROJECT_NAME}8762 "+
        " $REPOSITORY"
        
        sh "docker rm -f ${PROJECT_NAME}8763 |true"     
        sh "docker run --restart=always -p 8763:8761 "+
        "-d -v ${LOG_PATH}8763:${LOG_PATH} "+
        "-e eureka.client.serviceUrl.defaultZone=${EUREKA_SERVICEURL} "+
        "-e eureka.instance.hostname=test8763 "+
        "--add-host=test8761:192.168.89.130 --add-host=test8762:192.168.89.130 --add-host=test8763:192.168.89.130 "+
        "--name ${PROJECT_NAME}8763 "+
        " $REPOSITORY"
     } else if (PROJECT_NAME == "ms-base-config") {
       sh "docker run --restart=always -p 8888:8888 "+
        "-d -v ${LOG_PATH}:${LOG_PATH} "+
        "-e eureka.client.serviceUrl.defaultZone=${EUREKA_SERVICEURL} "+
        "--name ${PROJECT_NAME} "+
        " $REPOSITORY"
     } else {
       error '请选择要发布的分支'
     }
   }
    stage('Results 3') {
        echo "finish ${PROJECT_NAME}"
    }
    stage('end') {
        sh "date +'%Y-%m-%d %H:%M:%s'"
        echo "本次运行时间: ${currentBuild.duration} ms"
    }
}
View Code

 

docker初体验:Docker部署SpringCloud项目eureka-server

docker初体验:Docker部署SpringCloud项目eureka-server

Docker部署SpringCloud项目eureka-server

1 创建eureka-server工程

创建父工程cloud-demo,其pom.xml如下:

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>

    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.0.3.RELEASE</version>
        <relativePath/>
    </parent>

    <groupId>top.flygrk.ishare</groupId>
    <artifactId>cloud-demo</artifactId>
    <packaging>pom</packaging>
    <version>1.0-SNAPSHOT</version>

    <modules>
        <module>cloud-eureka-server</module>
    </modules>

    <properties>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
        <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
        <java.version>1.8</java.version>
        <spring-cloud.version>Finchley.RELEASE</spring-cloud.version>
    </properties>

    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>
    </dependencies>

    <dependencyManagement>
        <dependencies>
            <dependency>
                <groupId>org.springframework.cloud</groupId>
                <artifactId>spring-cloud-dependencies</artifactId>
                <version>${spring-cloud.version}</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>
        </dependencies>
    </dependencyManagement>

    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>
        </plugins>
    </build>
</project>

创建cloud-eureka-server模块,其格式如下:

file

pom.xml配置如下:

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <parent>
        <artifactId>cloud-demo</artifactId>
        <groupId>top.flygrk.ishare</groupId>
        <version>1.0-SNAPSHOT</version>
    </parent>
    <modelVersion>4.0.0</modelVersion>

    <artifactId>cloud-eureka-server</artifactId>
    <version>1.0-SNAPSHOT</version>
    <packaging>jar</packaging>

    <dependencies>
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-netflix-eureka-server</artifactId>
        </dependency>
    </dependencies>


    <build>
        <finalName>eureka-server</finalName>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>
            <!-- tag::plugin[] -->
            <plugin>
                <groupId>com.spotify</groupId>
                <artifactId>docker-maven-plugin</artifactId>
                <version>0.4.13</version>
                <configuration>
                    <imageName>/test/${project.artifactId}</imageName>
                    <dockerDirectory>src/main/docker</dockerDirectory>
                    <resources>
                        <resource>
                            <targetPath>/</targetPath>
                            <directory>${project.build.directory}</directory>
                            <include>${project.build.finalName}.jar</include>
                        </resource>
                    </resources>
                </configuration>
            </plugin>
            <!-- end::plugin[] -->
        </plugins>
    </build>

</project>

2 eureka-server工程打包

使用maven对cloud-eureka-server模块打包,结果如下:

file

3 上传eureka-server.jar到服务器

上传eureka-server.jar到服务器路径/app/eureka-server:

file

4 编写Dockerfile文件

编写Dockerfile内容如下:

FROM java:8
VOLUME /tmp
ADD eureka-server.jar app.jar
EXPOSE 8761
ENTRYPOINT ["java","-Djava.security.egd=file:/dev/./urandom","-jar","/app.jar"]

5 打包eureka-server镜像

在/app/eureka-server目录下,执行如下命令进行docker镜像打包:

docker build -t eureka_v1.0.0 .

6 查看docker镜像

查看系统上的docker镜像,使用docker images命令:

file

7 运行eurake镜像

使用下面的命令启动eureka镜像:

docker run -d --name eureka-server -p 8761:8761 c4bfd23fe99d

8 查看docker镜像运行情况

使用docker ps查看docker镜像运行情况:

docker ps -a

file

8 查看docker eureka-server日志

使用下面的命令查看eureka-server日志:

docker logs --since 2019-12-18T09:50:15 eureka-server

file


Blog:

  • 简书: https://www.jianshu.com/u/91378a397ffe
  • csdn: https://blog.csdn.net/ZhiyouWu
  • 开源中国: https://my.oschina.net/u/3204088
  • 掘金: https://juejin.im/user/5b5979efe51d451949094265
  • 博客园: https://www.cnblogs.com/zhiyouwu/
  • 微信公众号: 源码湾
  • 微信: WZY1782357529 (欢迎沟通交流)

原文出处:https://www.cnblogs.com/zhiyouwu/p/12058415.html

Spring Cloud Eureka 服务治理

Spring Cloud Eureka 服务治理

服务注册中心

在服务治理框架中,通常有一个 服务注册中心,提供:

  1. 服务注册。 每个服务单元向其登记自己提供的服务,将主机、端口号、版本号等告知注册中心,注册中心按 服务名 来组织清单。
  2. 服务发现。 服务调用方需要调用某个服务名的实例提供的服务,则向服务注册中心获取所有服务实例的清单,以实现对具体服务实例的访问。
# first build.gradle
dependencies {
    compile ''org.springframework.cloud:spring-cloud-starter-eureka-server''
    compile ''org.springframework.boot:spring-boot-starter-web''
    ……
}

# second application.yaml
server:
  port: 11111

eureka:
  instance:
    hostname: localhost
  lease-renewal-interval-in-seconds: 30
  lease-expiration-duration-in-seconds: 90
  server:
    enable-self-preservation: false
  client:
    fetch-registry: false
    register-with-eureka: false
    serviceUrl:
      defaultZone: http://${eureka.instance.hostname}:${server.port}/eureka/
# third Application.java
@EnableEureKaServer

Netflix Eureka 由于使用 Restful API 协议,因此支持跨语言跨平台的微服务应用进行注册。

服务提供者

Eureka 客户端:

  1. 向注册中心登记自身提供的服务,并且周期性地发送心跳来更新它的服务租约。
  2. 从注册中心查询服务清单,把它们缓存到本地,并周期性地刷新服务状态。

服务续约 (renew)

在服务注册完成之后,服务提供者维护一个心跳用来持续告知服务中心,以防止被服务列表中剔除。 使用 spring boot actuator 提供的 /health 来维护心跳、提供健康检查。

#first build.gradle
dependencies {
    compile ''org.springframework.cloud:spring-cloud-starter-eureka''
    compile ''org.springframework.boot:spring-boot-starter-actuator''
    ……
}

#second application.yaml
eureka:
  client:    
    serviceUrl:
		defaultZone: http://localhost:11111/eureka

#third Application.java
@EnableDiscoveryClient

服务下线

服务提供者正常关闭时,会触发一个服务下线的 Restful 请求给注册中心。注册中心在收到请求后,会将该服务编辑为下线,并广播此事件。

服务剔除

注册中心会定时每个一段时间 lease-renewal-interval-in-seconds ,将服务清单中超过时间 lease-expiration-duration-in-seconds 秒没有续约的服务剔除出去。

自我保护

基于上面服务剔除的,注册中心在运行期间,会统计心跳失败的比例在 15 分钟内是否低于 85%,如果是,注册中心会将当前注册信息保护起来,让其不会过期。
由于本地很容易触发保护机制,因此本地开发时关闭自我保护。

# application.yaml
server:
    enable-self-preservation: false

今天关于SpringCloud第 053 篇CentOS7 中用 Docker 部署一个简单的基于 Eureka 服务治理发现的项目的介绍到此结束,谢谢您的阅读,有关centos7用docker部署spring cloud eureka-server、docker springcloud 微服务 eureka集群、docker初体验:Docker部署SpringCloud项目eureka-server、Spring Cloud Eureka 服务治理等更多相关知识的信息可以在本站进行查询。

本文标签: