从零开始学习docker(十四)Docker Compose--部署复杂的App

本章节我们介绍如何使用docker-compose部署复杂的application。

先介绍一些docker-compose的简单命令:

docker-compose build

这个命令可以根据docker-compose.yml文件内容,构建服务镜像。

docker-compose up

这个命令可以将服务全部启动。

docker-compose down --rmi all

将docker-compose容器停止,并且删除相应容器镜像。

首先看一下系统架构:

632db0b4adc4e8a4cee1a27ff53149fd0e5.jpg

每个微服务都是使用springboot实现的。

Eureka服务

他的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/

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-provider


server.port=8081

es-consumer服务

这个服务主要是用于消费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);

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: ./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

70906ed1ebb2e5ca6e3de40cb8bd2bdf771.jpg

 

更好的方式部署

在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=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

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: ./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服务。

转载于:https://my.oschina.net/duanvincent/blog/3070004

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值