# springcloud_microservice_docker **Repository Path**: dowhere/springcloud_microservice_docker ## Basic Information - **Project Name**: springcloud_microservice_docker - **Description**: 这里使用 docker-compose 编排之前编写的 SpringCloud 微服务。 - **Primary Language**: Java - **License**: Apache-2.0 - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 1 - **Forks**: 2 - **Created**: 2020-07-17 - **Last Updated**: 2022-04-19 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README <<<<<<< HEAD ** springcloud_microservice_docker编写的实例 ** ## 使用 docker-compose 编排 SpringCloud微服务 这里使用 docker-compose 编排之前编写的 SpringCloud 微服务。为了方便服务之间的相互访问,使用 links 定义别名,应用之间使用别名访问。 |微服务项目名称 |服务中的角色 |端口| | ------------- | ----------- | ------ | |eureka-server |服务注册与发现组件 |8090| |order-services |服务提供者 |8091| |user-services |服务提供者 |8092| |ribbon-hystrix |Hystrix服务消费和断路器 |8093| |hystrix-turbine |Hystrix聚合监控工具 |8094| |zuul-api-gateway |API Gateway服务网关 |8095| ## 修改代码 之前编写的项目配置的eureka.client.serviceUrl.defaultZone的值是http://localhost:8080/eureka/。由于Docker默认的网络模式是bridge,各个容器的IP都不相同,因此使用http://localhost:8080/eureka/满足不了需求,可以为Eureka Server所在容器配置一个主机名(如:eureka),并让各个微服务使用主机名访问Eureka Server。 将所有微服务的eureka.client.serviceUrl.defaultZone的值修改为http://eureka:8090/eureka。 ```yaml eureka: client: serviceUrl: defaultZone: http://eureka:8090/eureka/ ``` ## 将jar包上传到服务器并 创建一个目录microservice_docker并在内部为每个需要编排的微服务创建对应的目录,在目录中放入对应的jar包文件和新建Dockerfile文件。 创建微服务目录 ``` mkdir -p microservice_docker/eureka-server mkdir -p microservice_docker/order-services mkdir -p microservice_docker/user-services mkdir -p microservice_docker/ribbon-hystrix mkdir -p microservice_docker/hystrix-turbine mkdir -p microservice_docker/zuul-api-gateway ``` ## 上传微服务jar包到对应目录 ## 创建Dockerfile 在每个微服务的目录中分别创建各自的Dockerfile文件 ## eureka-server Dockerfile vim eureka-server/Dockerfile ``` yaml FROM java:8 VOLUME /tmp ADD eureka-server-0.0.1-SNAPSHOT.jar app.jar RUN bash -c 'touch /app.jar' EXPOSE 8090 ENTRYPOINT ["java","-Djava.security.egd=file:/dev/./urandom","-jar","/app.jar"] ``` ### order-services Dockerfile vim order-services/Dockerfile ``` yaml FROM java:8 VOLUME /tmp ADD order-services-0.0.1-SNAPSHOT.jar app.jar RUN bash -c 'touch /app.jar' EXPOSE 8091 ENTRYPOINT ["java","-Djava.security.egd=file:/dev/./urandom","-jar","/app.jar"] ``` ### user-services Dockerfile vim user-services/Dockerfile ```yaml FROM java:8 VOLUME /tmp ADD user-services-0.0.1-SNAPSHOT.jar app.jar RUN bash -c 'touch /app.jar' EXPOSE 8092 ENTRYPOINT ["java","-Djava.security.egd=file:/dev/./urandom","-jar","/app.jar"] ``` ### ribbon-hystrix Dockerfile vim ribbon-hystrix/Dockerfile ```yaml FROM java:8 VOLUME /tmp ADD ribbon-hystrix-0.0.1-SNAPSHOT.jar app.jar RUN bash -c 'touch /app.jar' EXPOSE 8093 ENTRYPOINT ["java","-Djava.security.egd=file:/dev/./urandom","-jar","/app.jar"] ``` ### hystrix-turbine Dockerfile vim hystrix-turbine/Dockerfile ```yaml FROM java:8 VOLUME /tmp ADD hystrix-turbine-0.0.1-SNAPSHOT.jar app.jar RUN bash -c 'touch /app.jar' EXPOSE 8094 ENTRYPOINT ["java","-Djava.security.egd=file:/dev/./urandom","-jar","/app.jar"] ``` ### zuul-api-gateway Dockerfile vim zuul-api-gateway/Dockerfile ```yaml FROM java:8 VOLUME /tmp ADD zuul-api-gateway-0.0.1-SNAPSHOT.jar app.jar RUN bash -c 'touch /app.jar' EXPOSE 8095 ENTRYPOINT ["java","-Djava.security.egd=file:/dev/./urandom","-jar","/app.jar"] ``` ## 创建docker-compose.yml vim docker-compose.yml ```yaml version: '3' #该docker-compose.yml文件使用的版本是 3 services: #服务注册与发现 eureka: build: ./eureka-server #指定Dockerfile文件 ports: - "8090:8090" #指定端口映射 #服务提供者-订单服务 order-service: build: ./order-services ports: - "8091:8091" links: - "eureka" #服务提供者-用户服务 user-service: build: ./user-services ports: - "8092:8092" links: - "eureka" #Hystrix服务消费和断路器 ribbon-hystrix: build: ./ribbon-hystrix ports: - "8093:8093" links: - "eureka" #Hystrix聚合监控工具 hystrix-turbine: build: ./hystrix-turbine ports: - "8094:8094" links: - "eureka" #API Gateway服务网关 zuul-api-gateway: build: ./zuul-api-gateway ports: - "8095:8095" links: - "eureka" ``` ## 启动与测试 进入执行如下命令: ```shell docker-compose up ``` ### 浏览器访问 * http://192.168.8.100:8093/say?name=zhangsan * http://192.168.8.100:8093/actuator/hystrix.stream * http://192.168.8.100:8094/turbine.stream * http://192.168.8.100:8094/hystrix * http://192.168.8.100:8095/api-a/say?name=abc&token=111 image::images/pic1.png[] ### 一些操作命令 ```shell docker-compose up docker-compose stop docker-compose start docker-compose down --rmi all ``` ## 编排高可用的Eureka Server服务 使用 ```yaml version: '3' #该docker-compose.yml文件使用的版本是 3 services: #服务注册与发现 eureka1: build: ./eureka-server #指定Dockerfile文件 ports: - "8090:8090" #指定端口映射 environment: - spring.profiles.active=eureka1 eureka2: build: ./eureka-server #指定Dockerfile文件 ports: - "8190:8190" #指定端口映射 environment: - spring.profiles.active=eureka2 ``` 由于使用了高可用的Eureka,需要将所有微服务的eureka.client.serviceUrl.defaultZone属性修改为 http://eureka1:8090/eureka/,http://eureka2:8190/eureka/ 编排高可用的微服务集群和动态伸缩 让每个服务都运行多个实例 ```shell docker-compose scale order-services=3 user-services=3 order-services=3 ribbon-hystrix=3 ```