文章目录

  • 微服务配置
  • 构建镜像
  • 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 服务启动参数 docker compose service_jar

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 服务启动参数 docker compose service_docker_02

看得到微服务已经注册上去。但是如果现在是无法访问用户微服务的,因为并没有将端口和宿主机映射上。在上面的配置中只有电影微服务以及注册中心有端口映射。

访问电影微服务:

docker compose 服务启动参数 docker compose service_微服务_03

有数据正常显示。可见,即使用户微服务没有端口映射,但是在同一个网络中,电影微服务还是可以访问用户微服务的。

动态伸缩微服务容器数量

执行命令:

docker-compose scale microservice-provider-user=3

这样就会将用户微服务的容器调整为3个。再次访问 Eureka Server 就会看到如下:

docker compose 服务启动参数 docker compose service_docker_04

但是这个命令用来操作电影微服务是不行的,因为电影微服务是和宿主机有端口映射的,所以当启动第二个容器时,就会因为宿主机的端口已经被占用所以会报错。

书中还说了其他的一些内容。但是我觉得在实际的生产环境没有什么用,所以就不放上来了。其实也只是对 Docker Compose 的一些应用而已,学会了之前的,就能够举一反三。