文章目录
- 微服务配置
- 构建镜像
- docker-compose.yml
- 动态伸缩微服务容器数量
微服务配置
我在这里使用之前学习 Spring Cloud 时所用到的微服务。
分别有三个。microservice-discovery-eureka 微服务注册中心。microservice-provider-user 用户微服务,注册到注册中心上,提供获取用户的信息的接口。microservice-consumer-movie 电影微服务,注册到注册中心上,提供获取用户信息的接口,内部使用 Ribbon 负载均衡,通过微服务名称去访问用户微服务。
因为是在容器中运行,ip地址不确定,所以在下面在Docker Compose 中会给注册中心 Eureka Server 指定服务名称为 discovery, Eureka Client 都通过主机名称来访问 EurekaServer。 注册地址如下:
eureka.client.service-url.defaultZone=http://discovery:8761/eureka/
构建镜像
在每一个微服务的pom文件上添加配置:
<plugin>
<groupId>com.spotify</groupId>
<artifactId>docker-maven-plugin</artifactId>
<version>1.2.0</version>
<configuration>
<!-- 指定镜像名称 -->
<imageName>yhcm/${artifactId}:${version}</imageName>
<!-- 指定基础镜像,类似Dockerfile 的 FROM -->
<baseImage>java</baseImage>
<!-- 类似于Dockerfile ENTRYPOINT 指令 -->
<entryPoint>["java", "-jar", "/${project.build.finalName}.jar"]</entryPoint>
<resources>
<resource>
<targetPath>/</targetPath>
<!-- 指定需要复制的根目录。${project.build.directory} 表示 target 目录 -->
<directory>${project.build.directory}</directory>
<!-- 用于指定需要复制的文件。${project.build.finalName}.jar 表示打包后的jar文件 -->
<include>${project.build.finalName}.jar</include>
</resource>
</resources>
</configuration>
<executions>
<execution>
<id>build-image</id>
<phase>package</phase>
<goals>
<goal>build</goal>
</goals>
</execution>
</executions>
</plugin>
然后每个微服务都需要直接在右侧点击 package 即可。这样就会自动构建微服务镜像
docker-compose.yml
如下:
version: '3.5'
services:
discovery:
image: yhcm/microservice-discovery-eureka:0.0.1-SNAPSHOT
ports:
- "8761:8761"
microservice-provider-user:
image: yhcm/microservice-provider-user:0.0.1-SNAPSHOT
microservice-consumer-movie:
image: yhcm/microservice-consumer-movie:0.0.1-SNAPSHOT
ports:
- "8010:8010"
在 docker-compose.yml 文件所在的目录执行命令docker-compose up -d
。然后等容器运行起来后访问 http://宿主机ip:8761/
即可看到如下画面:
看得到微服务已经注册上去。但是如果现在是无法访问用户微服务的,因为并没有将端口和宿主机映射上。在上面的配置中只有电影微服务以及注册中心有端口映射。
访问电影微服务:
有数据正常显示。可见,即使用户微服务没有端口映射,但是在同一个网络中,电影微服务还是可以访问用户微服务的。
动态伸缩微服务容器数量
执行命令:
docker-compose scale microservice-provider-user=3
这样就会将用户微服务的容器调整为3个。再次访问 Eureka Server 就会看到如下:
但是这个命令用来操作电影微服务是不行的,因为电影微服务是和宿主机有端口映射的,所以当启动第二个容器时,就会因为宿主机的端口已经被占用所以会报错。
书中还说了其他的一些内容。但是我觉得在实际的生产环境没有什么用,所以就不放上来了。其实也只是对 Docker Compose 的一些应用而已,学会了之前的,就能够举一反三。