概述
实现docker-compose 部署spring cloud实现一次构建到处运行,在此做个记录
1、安装docker-compose
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 容器服务名否则服务之间无法联通,使用服务注册发现调用服务除外