javascript
从零开始学习docker(十四)Docker Compose--部署SpringCloud
擼了今年阿里、頭條和美團的面試,我有一個重要發現.......>>>
本章節我們介紹如何使用docker-compose部署復雜的application。
先介紹一些docker-compose的簡單命令:
docker-compose build
這個命令可以根據docker-compose.yml文件內容,構建服務鏡像。
docker-compose up
這個命令可以將服務全部啟動。
docker-compose down --rmi all
將docker-compose容器停止,并且刪除相應容器鏡像。
首先看一下系統架構:
每個微服務都是使用springboot實現的。
Eureka服務
他的application.properties內容如下:
server.port=8080eureka.instance.hostname=192.168.182.151 # 是否向服務中心注冊自己 eureka.client.register-with-eureka=false # 是否檢索服務 eureka.client.fetch-registry=false eureka.client.service-url.defaultZone=http://${eureka.instance.hostname}:${server.port}/eureka/elasticsearch-curl服務
application.properties內容如下:
spring.elasticsearch.rest.uris=192.168.182.149:9200 logging.level.root=INFO logging.file=user.log es.ips[0]=192.168.182.149 es.port=9300 es.clusterName=elasticsearch#注冊中心的注冊地址 eureka.client.service-url.defaultZone=http://192.168.182.151:8080/eureka/ spring.application.name=elasticsearch-curl-providerserver.port=8081es-consumer服務
這個服務主要是用于消費es-curl服務的。他的application.propertis內容如下:
#注冊中心的注冊地址 eureka.client.service-url.defaultZone=http://192.168.182.151:8080/eureka/ spring.application.name=elasticsearch-consumerserver.port=8082調用服務:
ResponseEntity<Object> objectResponseEntity = restTemplate.postForEntity("http://elasticsearch-curl-provider/add/"+indexName+"/" + type, data, Object.class);Dockerfile文件內容
Eureka服務:
FROM java:8-alpine MAINTAINER "eureka server" ADD spring-cloud-eureka-server-1.0-SNAPSHOT.jar app.jar EXPOSE 8080 ENTRYPOINT ["java", "-jar", "/app.jar"]es-curl服務:
FROM java:8-alpine MAINTAINER "es-curl server" ADD elasticsearch-curl-1.0-SNAPSHOT.jar app.jar EXPOSE 8081 ENTRYPOINT ["java", "-jar", "/app.jar"]es-consumer服務:
FROM java:8-alpine MAINTAINER "es-curl server" ADD elasticsearch-curl-1.0-SNAPSHOT.jar app.jar EXPOSE 8081 ENTRYPOINT ["java", "-jar", "/app.jar"]docker-compose.yml文件
version: '3'services:eureka:build:context: ./eurekadockerfile: Dockerfilecontainer_name: ddy-eurekaports:- "8080:8080"es-curl:build:context: ./es-curl/.dockerfile: Dockerfilecontainer_name: ddy-es-curldepends_on:- eurekaports:- "8081:8081"links:- eurekaes-consumer:build:context: ./es-consumer/.dockerfile: Dockerfilecontainer_name: ddy-consumerdepends_on:- eureka- es-curlports:- "8082:8082"links:- eureka- es-curl操作
docker-compose build docker-compose up訪問192.168.182.151:8080
?
更好的方式部署
在eureka服務中,修改application.properties內容:
eureka.instance.hostname=eureka分別在es-curl和es-consumer服務中的application.properties修改內容:
eureka.client.service-url.defaultZone=http://eureka:8080/eureka/這樣就不需要知道主機的ip是多少了。
實驗二:測試簡單的eureka生產者和消費者:
項目代碼:https://github.com/vincentduan/spring-cloud-project?下面的eureka目錄下
eureka server
eureka server中的application.properties內容如下:
server.port=8080eureka.instance.hostname=eureka # 是否向服務中心注冊自己 eureka.client.register-with-eureka=false # 是否檢索服務 eureka.client.fetch-registry=false eureka.client.service-url.defaultZone=http://${eureka.instance.hostname}:${server.port}/eureka/對應的Dockerfile內容如下:
FROM java:8-alpine MAINTAINER "es-curl server" ADD spring-cloud-eureka-server-1.0-SNAPSHOT.jar app.jar EXPOSE 8080 ENTRYPOINT ["java", "-jar", "/app.jar"]service-provider1
service-provider1中的application.properties內容如下:
# 注冊中心的注冊地址 eureka.client.service-url.defaultZone=http://eureka:8080/eureka/# 服務名稱--調用的時候根據名稱來調用該服務的方法 spring.application.name=service-provider-A server.port=8081對應的Dockerfile內容如下:
FROM java:8-alpine MAINTAINER "es-curl server" ADD spring-cloud-eureka-provider-A-1-1.0-SNAPSHOT.jar app.jar EXPOSE 8081 ENTRYPOINT ["java", "-jar", "/app.jar"]service-provider2
service-provider2中的application.properties內容如下:
# 注冊中心的注冊地址 eureka.client.service-url.defaultZone=http://eureka:8080/eureka/# 服務名稱--調用的時候根據名稱來調用該服務的方法 spring.application.name=service-provider-A server.port=8082?應的Dockerfile內容如下:
FROM java:8-alpine MAINTAINER "es-curl server" ADD spring-cloud-eureka-provider-A-2-1.0-SNAPSHOT.jar app.jar EXPOSE 8082 ENTRYPOINT ["java", "-jar", "/app.jar"]?consumer
consumer中的application.properties內容如下:
# 注冊中心的注冊地址 eureka.client.service-url.defaultZone=http://eureka:8080/eureka/# 服務名稱--調用的時候根據名稱來調用該服務的方法 spring.application.name=service-consumer-A server.port=8083?應的Dockerfile內容如下:
# 注冊中心的注冊地址 eureka.client.service-url.defaultZone=http://eureka:8080/eureka/# 服務名稱--調用的時候根據名稱來調用該服務的方法 spring.application.name=service-consumer-A server.port=8083整個docker-compose.yml文件內容如下:
version: '3'services:eureka:build:context: ./eurekadockerfile: Dockerfilecontainer_name: ddy-eurekaports: - "8080:8080"service-provider-1:build:context: ./provider-1dockerfile: Dockerfilecontainer_name: ddy-provider-1ports:- "8081:8081"depends_on:- eurekalinks:- eurekaservice-provider-2:build:context: ./provider-2dockerfile: Dockerfilecontainer_name: ddy-provider-2ports:- "8082:8082"depends_on:- eurekalinks:- eurekaservice-consumer:build:context: ./consumerdockerfile: Dockerfilecontainer_name: ddy-consumerports:- "8083:8083"depends_on:- eureka- service-provider-1- service-provider-2links:- eureka- service-provider-1- service-provider-2執行docker-compose?build執行構建。
使用命令docker-compose ps 可以查看服務情況:
docker-compose psName Command State Ports -------------------------------------------------------------------- ddy-consumer java -jar /app.jar Up 0.0.0.0:8083->8083/tcp ddy-eureka java -jar /app.jar Up 0.0.0.0:8080->8080/tcp ddy-provider-1 java -jar /app.jar Up 0.0.0.0:8081->8081/tcp ddy-provider-2 java -jar /app.jar Up 0.0.0.0:8082->8082/tcpdocker-compose up 啟動項目。
瀏覽器中輸入ip地址:ip:8080可以查看到eureka服務已經啟動了。并且能看到provider也已經注冊進來了。輸入ip:8083/gotoUser/jack多刷幾次可以看到啟用了不同的provider服務。
總結
以上是生活随笔為你收集整理的从零开始学习docker(十四)Docker Compose--部署SpringCloud的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 从零开始学习docker(十三)Dock
- 下一篇: 从零开始学习docker(十四)Dock