本章節咱們介紹如何使用docker-compose部署複雜的application。java
先介紹一些docker-compose的簡單命令:git
這個命令能夠根據docker-compose.yml文件內容,構建服務鏡像。github
這個命令能夠將服務所有啓動。spring
將docker-compose容器中止,而且刪除相應容器鏡像。docker
首先看一下系統架構:瀏覽器
每一個微服務都是使用springboot實現的。springboot
他的application.properties內容以下:架構
server.port=8080 eureka.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/
application.properties內容以下:app
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-provider server.port=8081
這個服務主要是用於消費es-curl服務的。他的application.propertis內容以下:curl
#註冊中心的註冊地址 eureka.client.service-url.defaultZone=http://192.168.182.151:8080/eureka/ spring.application.name=elasticsearch-consumer server.port=8082
調用服務:
ResponseEntity<Object> objectResponseEntity = restTemplate.postForEntity("http://elasticsearch-curl-provider/add/"+indexName+"/" + type, data, Object.class);
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"]
version: '3' services: eureka: build: context: ./eureka dockerfile: Dockerfile container_name: ddy-eureka ports: - "8080:8080" es-curl: build: context: ./es-curl/. dockerfile: Dockerfile container_name: ddy-es-curl depends_on: - eureka ports: - "8081:8081" links: - eureka es-consumer: build: context: ./es-consumer/. dockerfile: Dockerfile container_name: ddy-consumer depends_on: - eureka - es-curl ports: - "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是多少了。
項目代碼:https://github.com/vincentduan/spring-cloud-project 下面的eureka目錄下
eureka server中的application.properties內容以下:
server.port=8080 eureka.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中的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中的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中的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: ./eureka dockerfile: Dockerfile container_name: ddy-eureka ports: - "8080:8080" service-provider-1: build: context: ./provider-1 dockerfile: Dockerfile container_name: ddy-provider-1 ports: - "8081:8081" depends_on: - eureka links: - eureka service-provider-2: build: context: ./provider-2 dockerfile: Dockerfile container_name: ddy-provider-2 ports: - "8082:8082" depends_on: - eureka links: - eureka service-consumer: build: context: ./consumer dockerfile: Dockerfile container_name: ddy-consumer ports: - "8083:8083" depends_on: - eureka - service-provider-1 - service-provider-2 links: - eureka - service-provider-1 - service-provider-2
執行docker-compose build執行構建。
使用命令docker-compose ps 能夠查看服務狀況:
docker-compose ps Name 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/tcp
docker-compose up 啓動項目。
瀏覽器中輸入ip地址:ip:8080能夠查看到eureka服務已經啓動了。而且能看到provider也已經註冊進來了。輸入ip:8083/gotoUser/jack多刷幾回能夠看到啓用了不一樣的provider服務。