實現docker-compose 部署spring cloud實現一次構建處處運行,在此作個記錄html
docs.docker.com/compose/ins…java
FROM openjdk:8-jdk-alpine
COPY spring-cloud-admin-1.0.0-SNAPSHOT.jar app.jar
CMD java -jar app.jar
複製代碼
服務啓動順序解決方案linux
因爲spring cloud config 進行配置文件管理而docker-compose 啓動時全部服務同時啓動而config還沒加載完成致使全部服務啓動失敗。git
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.ymlgithub
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
複製代碼
Dockerfile 改造spring
#依賴環境
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.ymldocker
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啓動bash
ps:注意修改spring cloud 內部的ip爲docker 容器服務名不然服務之間沒法聯通,使用服務註冊發現調用服務除外
複製代碼
附: docker-compose 命令說明網絡