这篇文章给大家介绍Docker Compose如何部署复杂的App,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。
如何使用docker-compose部署复杂的application。
先介绍一些docker-compose的简单命令:
这个命令可以根据docker-compose.yml文件内容,构建服务镜像。
这个命令可以将服务全部启动。
将docker-compose容器停止,并且删除相应容器镜像。
首先看一下系统架构:
每个微服务都是使用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内容如下:
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内容如下:
#注册中心的注册地址
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服务。
关于Docker Compose如何部署复杂的App就分享到这里了,希望以上内容可以对大家有一定的帮助,可以学到更多知识。如果觉得文章不错,可以把它分享出去让更多的人看到。
亿速云「云服务器」,即开即用、新一代英特尔至强铂金CPU、三副本存储NVMe SSD云盘,价格低至29元/月。点击查看>>
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。
原文链接:https://my.oschina.net/duanvincent/blog/3070004