Docker部署SpringCloud集群,无需修改配置文件,一次构建多次运行,多的不说,先上图
项目架构使用SpringCloud,正好最近学习docker,就想办法将项目放到docker中部署,中途踩了多个坑,包括服务注册到eureka中变成了服务器名,同一个服务多个容器部署到不同服务器需要修改配置文件等。
集群环境:192.168.191.128 :Eureka1、Config1、Zuul1
192.168.191.130 :Eureka2、Config2、Zuul2
192.168.191.131 :Eureka3、Config3、Zuul3
Linux系统:CentOS7.2
Docker镜像:Ubuntu15.10
由于Eureka注册中心集群需要关联其余Eureka服务,因此Eureka服务采用三个不同的eureka配置文件,其余服务不需要
配置文件1:application.properties
spring.application.name=fms-cloud-eurekaserver
server.port=8761
#spring.profiles: 192.168.191.128
#eureka服务配置
eureka.instance.hostname=192.168.191.128
#eureka.instance.prefer-ip-address=true
#eureka.client.register-with-eureka=false
#eureka.client.fetch-registry=false
eureka.client.service-url.defaultZone=http://192.168.191.130:8761/eureka/,http://192.168.191.131:8761/eureka/
----------------------------------------------------------------------------------------------------------------------------------------------------------
配置文件2:application.properties
spring.application.name=fms-cloud-eurekaserver
server.port=8761
#spring.profiles: 192.168.191.128
#eureka服务配置
eureka.instance.hostname=192.168.191.130
#eureka.instance.prefer-ip-address=true
#eureka.client.register-with-eureka=false
#eureka.client.fetch-registry=false
eureka.client.service-url.defaultZone=http://192.168.191.128:8761/eureka/,http://192.168.191.131:8761/eureka/
----------------------------------------------------------------------------------------------------------------------------------------------------------
配置文件3:application.properties
spring.application.name=fms-cloud-eurekaserver
server.port=8761
#spring.profiles: 192.168.191.128
#eureka服务配置
eureka.instance.hostname=192.168.191.131
#eureka.instance.prefer-ip-address=true
#eureka.client.register-with-eureka=false
#eureka.client.fetch-registry=false
eureka.client.service-url.defaultZone=http://192.168.191.130:8761/eureka/,http://192.168.191.128:8761/eureka/
config配置中心使用本地配置文件,意思是其余服务从config中获取的配置都是从config本地维护的配置,可以改成git和svn方式
#配置中心默认端口为8888 不能修改
server.port=8888
#eureka.instance.hostname=localhost
spring.application.name=fms-config-server
eureka.client.service-url.defaultZone=http://192.168.191.128:8761/eureka,http://192.168.191.130:8761/eureka,http://192.168.191.131:8761/eureka
eureka.instance.prefer-ip-address=true
#本地资源方式配置
spring.profiles.active=native
spring.cloud.config.server.native.search-locations=classpath:/properties
配置:application.properties
server.port=8889
spring.application.name=fms-zuul-server
eureka.client.service-url.defaultZone=http://192.168.191.128:8761/eureka,http://192.168.191.130:8761/eureka,http://192.168.191.131:8761/eureka
#eureka.instance.prefer-ip-address=true
spring.cloud.config.discovery.enabled=true
#配置中心的注册服务标识(注册中心中注册的配置中心服务标识)
spring.cloud.config.discovery.service-id=fms-config-server
#配置获取配置文件的路径(在config中配置文件存放为properties/development/global-system.properties)
spring.cloud.config.name=global
spring.cloud.config.profile=system
spring.cloud.config.label=development
配置其余系统访问模块控制
#系统模块访问
zuul.routes.system.path=/system/**
zuul.routes.system.service-id=fms-system-server
zuul.routes.system.sensitive-headers="*"
#公共模块访问
zuul.routes.public.path=/public/**
zuul.routes.public.service-id=fms-public-server
zuul.routes.public.sensitive-headers="*"
将三个不同配置文件的eureka包和config、zuul包上传到安装好docker服务器命令的机器上,并上传JDK(这里使用最简洁的ubuntu镜像,未自带JDK和一些bash命令)
创建Dockerfile
FROM ubuntu:15.10
# Set timezone as docker/jintao
#RUN cp /usr/share/zoneinfo/PRC /etc/localtime
RUN mkdir /usr/java
# Copy jre install file
COPY jre-8u191-linux-x64.tar.gz /usr/java/
WORKDIR /usr/java/
RUN tar zxvf /usr/java/jre-8u191-linux-x64.tar.gz
RUN rm -rf /usr/java/jre-8u191-linux-x64.tar.gz
# Eureka server directory
RUN mkdir /eureka
# set evn
ENV JRE_HOME /usr/java/jre1.8.0_191
ENV PATH $PATH:$JRE_HOME/bin
# Copy app jar file
COPY fms-cloud-eureka1-0.0.1-SNAPSHOT.jar /eureka/fms-cloud-eureka-0.0.1-SNAPSHOT.jar
ENTRYPOINT ["java","-Djava.security.egd=file:/usr/java/./urandom","-server","-Xms64m","-Xmx64m","-jar","/eureka/fms-cloud-eureka-0.0.1-SNAPSHOT.jar"]
EXPOSE 8761
构建镜像(这里构建镜像使用dockerid,否则无法上传到dockerhub仓库)
docker build -t dockerid/eureka:1.1 .
docker push dockerid/eureka:1.1
修改Dockerfile,分别构建config和zuul并上传dockerhub
在需要部署的服务器上docker pull dockerid/eureka1.1 从仓库拉出镜像
使用命令启动镜像,注意这里需要指定运行镜像使用的网络配置,共享主机host,使用自定义给docker镜像分配ip的话还需要给镜像配置IP路由规则,否则访问不了其余服务.
docker run -d -p 8761:8761 --net host dockerid/eureka1.1
分别启动其余服务器上的eureka服务和config、zuul服务即可.(如果zuul也从config中获取配置的话,需要先启动config)
docker ps 查看运行容器
docker logs containerid 查看日志
启动完成http://192.168.191.128:8761 会发现集群已经完成
本文部署中途启动zuul时从config中获取配置get http://192.168.191.128:8888/global/system/development 连接不上,启动一直报错,最后发现是防火墙问题
CentOS7.2关闭防火墙:systemctl stop firewall.service
CentOS7.2关闭防火墙自启:systemctl disable firewall.service