关于Docker的内容与入门命令实现已经在其他文章里详细介绍了,这里就不再多说。本篇文章主要详细讲解如何使用Docker部署Spring Cloud项目。
本文采用的工程来自前面文章的工程eureka-server和eureka-client,我们将采用maven的方式去构建项目,并采用docker-maven-plugin去构建docker镜像。
首先改造eureka-server工程,在pom.xml上加上插件:
简单说明一下插件的配置:
· imageName指定了镜像的名称,“/”前面是仓库名称,后面是镜像名称,也可以再加上标签名称;
· resources是指那些需要和Dockerfile放在一起,在构建镜像时使用的文件,一般应用 jar 包需要纳入。resources.resource.directory用于指定需要复制的根目录,${project.build.directory}表示target目录,resources.resource.include用于指定需要复制的文件,${project.build.finalName}.jar指的是打包后的jar包文件。
然后修改application.properties配置文件:
server.port=8761
eureka.instance.prefer-ip-address=true
# 代表不向注册中心注册自己
eureka.client.register-with-eureka=false
# 由于注册中心的职责就是维护服务实例,它并不需要去检索服务,所以设置为false
eureka.client.fetch-registry=false
最后使用maven命令构建镜像:
mvn clean package docker:build
这样运行后eureka-server镜像就构建完成。
eureka-client镜像的构建也类似。pom.xml的一样加上插件配置,Dockerfile文件的编写也类似,然后修改application.properties配置文件:
spring.application.name=hello-service
# host改为镜像名
eureka.client.serviceUrl.defaultZone=http://eureka-server:8761/eureka
server.port=8763
eureka.instance.prefer-ip-address=true
eureka.instance.instance-id=${spring.application.name}:${random.int}
注意上面的host要改为eureka-server镜像名。
最后同样使用maven构建镜像:
mvn clean package docker:build
到这里eureka-server和eureka-client镜像已经都构建好了,接着使用命令行启动镜像:
# 启动服务器
docker run --name eureka-server -p 8761:8761 -t dan/eureka-server
# 注册服务
docker run --link eureka-server:8761 -p 8763:8763 -t dan/eureka-client
运行起来后就能看到之前一样的内容了。
安装 :docker-compose 请自行百度,很简单,一句命令即可了!
我们从上面实现知道,可以使用Dockerfile(或Maven)构建镜像,然后使用docker命令操作容器,例如docker run、docker stop等。然而,使用微服务架构的应用系统一般包含若干个微服务,每个微服务一般都会部署多个实例。如果每个微服务都要手动启停,那么效率之低、维护量之大可想而知。这时就需要使用Docker Compose了。
Docker Compose 是一个用于定义和运行多容器的Docker应用的工具。使用Compose,你可以在一个配置文件(yaml格式)中配置你应用的服务,然后使用一个命令,即可创建并启动配置中引用的所有服务。
接下来我们来使用docker-compose编排启动我们之前第九篇文章中的微服务工程。
微服务列表如下:
· eureka-server
· eureka-client
· service-ribbon
· service-feign
· service-zuul
3.1 构建镜像
首先按照上面的方法为每个工程构建镜像,分别修改pom.xml、application.properties和Dockerfile。
3.2 使用docker-compose编排并启动镜像
创建docker-compose.yml,编写内容:
version: '3'
services:
eureka-server:
image: dan/eureka-server
ports:
- "8761:8761"
hello-service:
image: dan/eureka-client
ports:
- 8763
links:
- eureka-server
service-ribbon:
image: dan/service-ribbon
ports:
- "8764:8764"
links:
- eureka-server
service-feign:
image: dan/service-feign
ports:
- "8765:8765"
links:
- eureka-server
service-zuul:
image: dan/service-zuul
ports:
- "8769:8769"
links:
- eureka-server
最后执行命令启动镜像:
docker-compose up
使用浏览器访问http://localhost:8761/看到,所有服务都注册了:
如果要增加或减少docker实例,直接使用docker-compose scale hello-service=3修改实例数;停止运行则使用docker-compose stop即可。
源码下载:https://github.com/gitlyb2080/springCloudLearing/tree/master/chapter12