概述
实现docker-compose 部署spring cloud实现一次构建到处运行,在此做个记录
1、安装docker-compose
2、构建Dockerfile
FROM openjdk:8-jdk-alpineCOPY spring-cloud-admin-1.0.0-SNAPSHOT.jar app.jarCMD 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 容器服务名否则服务之间无法联通,使用服务注册发现调用服务除外复制代码
附: