基于前两章的docker-compose 部署Spring Cloud

2,544 阅读2分钟

概述

实现docker-compose 部署spring cloud实现一次构建到处运行,在此做个记录

1、安装docker-compose

docs.docker.com/compose/ins…

2、构建Dockerfile

FROM openjdk:8-jdk-alpine
COPY spring-cloud-admin-1.0.0-SNAPSHOT.jar app.jar
CMD java -jar app.jar

3、构建docker-compose 文件

1、构建过程遇到的问题

1、spring cloud 服务之间启动顺序问题

服务启动顺序解决方案

1、解决方案(拆分docker-compose)

由于spring cloud config 进行配置文件管理而docker-compose 启动时所有服务同时启动而config还没加载完成导致所有服务启动失败。

version: '2'
services: 
  
    # 自定义服务名
    spring-cloud-eureka:
        # 总起重启
        restart: always
        # 别名
        container_name: spring-cloud-eureka
        # 编译DockerFile所在路径
        build: spring-cloud-eureka
        # 端口映射
        ports:
          - 8081:8081
        # 网络桥接
        networks: 
         - springCloud
        # 等待某服务启动后启动服务 
        depends_on:
         - spring-cloud-config
         
    spring-cloud-config: 
        restart: always
        container_name: spring-cloud-config
        build: spring-cloud-config
        ports:
          - 8888:8888       
        networks: 
         - springCloud
         
     
          
# 构建网络环境    
networks: 
    springCloud: 
      driver: bridge

docker-compose-tow.yml

version: '2'
services: 
  
   
    spring-cloud-service: 
        restart: always
        container_name: spring-cloud-service
        build: spring-cloud-service
        ports:
          - 8082:8082             
          
          
    spring-cloud-feign: 
        restart: always
        container_name: spring-cloud-feign
        build: spring-cloud-feign
        ports:
          - 8083:8083   
          
    spring-cloud-gateway: 
        restart: always
        container_name: spring-cloud-gateway
        build: spring-cloud-gateway
        ports:
          - 8085:8085   
        
    spring-cloud-zipkin: 
        restart: always
        container_name: spring-cloud-zipkin
        build: spring-cloud-zipkin
        ports:
          - 8084:8084  
          
   
    spring-cloud-admin: 
        restart: always
        container_name: spring-cloud-admin
        build: spring-cloud-admin
        ports:
          - 8087:8087   


# 加入某个已存在的网络环境    
networks:
  default:
    external:
      name: docker-springCloud

2、解决方案(使用Dockerize插件监听服务启动)

Dockerfile 改造

#依赖环境
FROM openjdk:8-jdk-alpine
#设置变量
ENV DOCKERIZE_VERSION v0.6.1
#下载插件
RUN wget https://github.com/jwilder/dockerize/releases/download/$DOCKERIZE_VERSION/dockerize-linux-amd64-$DOCKERIZE_VERSION.tar.gz \
    && tar -C /usr/local/bin -xzvf dockerize-linux-amd64-$DOCKERIZE_VERSION.tar.gz \
    && rm dockerize-linux-amd64-$DOCKERIZE_VERSION.tar.gz
#拷贝jar文件
COPY spring-cloud-admin-1.0.0-SNAPSHOT.jar app.jar
#执行命令  -timeout 超时多久运行jar   -wait 等待http地址访问成功运行jar  wait 也可以是tcp://xxxx 
ENTRYPOINT ["dockerize", "-timeout", "5m", "-wait", "http://192.168.1.5:8888/application/dev/master", "java", "-Djava.security.egd=file:/dev/./urandom", "-jar", "app.jar"]

docker-compose.yml

version: '2'
services: 
  
    # 自定义服务名
    spring-cloud-eureka:
        # 总起重启
        restart: always
        # 别名
        container_name: spring-cloud-eureka
        # 编译DockerFile所在路径
        build: spring-cloud-eureka
        # 端口映射
        ports:
          - 8081:8081

         
    spring-cloud-config: 
        restart: always
        container_name: spring-cloud-config
        build: spring-cloud-config
        ports:
          - 8888:8888       

       
    spring-cloud-service: 
        restart: always
        container_name: spring-cloud-service
        build: spring-cloud-service
        ports:
          - 8082:8082             
        
          
    spring-cloud-feign: 
        restart: always
        container_name: spring-cloud-feign
        build: spring-cloud-feign
        ports:
          - 8083:8083   
        
        

    spring-cloud-gateway: 
        restart: always
        container_name: spring-cloud-gateway
        build: spring-cloud-gateway
        ports:
          - 8085:8085   
          
        
         
    spring-cloud-zipkin: 
        restart: always
        container_name: spring-cloud-zipkin
        build: spring-cloud-zipkin
        ports:
          - 8084:8084  
       
        
          
   

    spring-cloud-admin: 
        restart: always
        container_name: spring-cloud-admin
        build: spring-cloud-admin
        ports:
          - 8087:8087   
        
          

运行结果其他服务都在等待config启动

3、测试docker-compose 部署spring cloud

ps:注意修改spring cloud 内部的ip为docker 容器服务名否则服务之间无法联通,使用服务注册发现调用服务除外

附: docker-compose 命令说明