zoukankan      html  css  js  c++  java
  • Docker 使用docker-compose部署项目

    原文地址:https://github.com/eacdy/spring-cloud-book/blob/master/3%20%E4%BD%BF%E7%94%A8Docker%E6%9E%84%E5%BB%BA%E5%BE%AE%E6%9C%8D%E5%8A%A1/3.8.5%20%E4%BD%BF%E7%94%A8Docker%20Compose%E9%83%A8%E7%BD%B2%E9%A1%B9%E7%9B%AE.md

    经过前文对Docker Compose的讲解,我们以Spring Cloud章节的几个示例项目为例,讲解如何使用Docker Compose部署项目:

    准备工作

    使用到的示例项目有:

    项目名称作用
    microservice-api-gateway API Gateway
    microservice-consumer-movie-ribbon-with-hystrix 服务消费者
    microservice-discovery-eureka 服务发现
    microservice-hystrix-dashboard 监控
    microservice-hystrix-turbine Turbine
    microservice-provider-user 服务提供者

    要想使用Docker Compose部署项目,我们首先得将项目打包成Docker镜像。本文使用Docker的Maven插件将项目打包成Docker镜像,当然也可以使用Dockerfile或者其他方式打包。

    • 为了管理方便,我们首先在父pom中添加插件管理:
        <pluginManagement>
          <plugins>
            <plugin>
              <groupId>com.spotify</groupId>
              <artifactId>docker-maven-plugin</artifactId>
              <version>0.4.12</version>
            </plugin>
          </plugins>
        </pluginManagement>
    • 然后依次在上文提到的6个项目添加以下内容:
     <build>
        <plugins>
          <plugin>
            <groupId>com.spotify</groupId>
            <artifactId>docker-maven-plugin</artifactId>
            <executions>
              <execution>
                <id>build-image</id>
                <phase>package</phase>
                <goals>
                  <goal>build</goal>
                </goals>
              </execution>
            </executions>
            <configuration>
              <imageName>${docker.image.prefix}/${project.artifactId}</imageName>
              <baseImage>java</baseImage>
              <entryPoint>["java", "-jar", "/${project.build.finalName}.jar"]</entryPoint>
              <resources>
                <resource>
                  <targetPath>/</targetPath>
                  <directory>${project.build.directory}</directory>
                  <include>${project.build.finalName}.jar</include>
                </resource>
              </resources>
            </configuration>
          </plugin>
        </plugins>
      </build>
    • 在父项目所在路径下,执行命令:
    mvn clean package

    这样,项目就会为各个项目打包成jar包,并且自动制作成Docker镜像。

    运行docker images 查看本地镜像:

    reg.itmuch.com/microservice-api-gateway                          latest              98c2997cb8c6        3 days ago          678.4 MB
    reg.itmuch.com/microservice-hystrix-turbine                      latest              c482e8da54dc        3 days ago          677.6 MB
    reg.itmuch.com/microservice-hystrix-dashboard                    latest              1daa15df3508        3 days ago          666.7 MB
    reg.itmuch.com/microservice-consumer-movie-ribbon-with-hystrix   latest              694634d340b1        3 days ago          677.2 MB
    reg.itmuch.com/microservice-provider-user                        latest              2049cfe6794c        3 days ago          689.3 MB
    reg.itmuch.com/microservice-discovery-eureka                     latest              73e2e80bf567        3 days ago          679.4 MB

    我们发现Docker镜像已经制作成功了。

    编写docker-compose.yml文件

    在任意路径,新建一个docker-compose.yml文件,并添加如下内容:

    microservice-discovery-eureka:
      image: reg.itmuch.com/microservice-discovery-eureka
      ports:
      - 8761:8761
      hostname: discovery
    microservice-provider-user:
      image: reg.itmuch.com/microservice-provider-user
      ports:
      - 8000:8000
      links:
      - microservice-discovery-eureka
    microservice-consumer-movie-ribbon-with-hystrix:
      image: reg.itmuch.com/microservice-consumer-movie-ribbon-with-hystrix
      ports:
      - 8011:8011
      links:
      - microservice-discovery-eureka
    microservice-hystrix-dashboard:
      image: reg.itmuch.com/microservice-hystrix-dashboard
      ports:
      - 8030:8030
      links:
      - microservice-discovery-eureka
      - microservice-hystrix-turbine
    microservice-hystrix-turbine:
      image: reg.itmuch.com/microservice-hystrix-turbine
      ports:
      - 8031:8031
      links:
      - microservice-discovery-eureka
    microservice-api-gateway:
      image: reg.itmuch.com/microservice-api-gateway
      ports:
      - 8050:8050
      links:
      - microservice-discovery-eureka

    相信经过前文多docker-compose.yml的讲解,大家已经能够看懂这个yaml文件了,简单讲解一下:

    第一个段落:

    microservice-discovery-eureka:                                    # 指定一个名词
      image: reg.itmuch.com/microservice-discovery-eureka            # 指定所使用的镜像
      ports:                                                        # 指定端口映射
      - 8761:8761
      hostname: discovery                                            # 指定主机名

    第二个段落:

    microservice-hystrix-dashboard:
      image: reg.itmuch.com/microservice-hystrix-dashboard
      ports:
      - 8030:8030
      links:
      - microservice-discovery-eureka                            # 表示连接到某个服务
      - microservice-hystrix-turbine

    我们看到microservice-discovery-eureka 这个服务配置了hostname。为什么呢?

    假设不配置,下文links 配置了microservice-discovery-eureka ,默认将会使用该名称访问。而在我们各个配置文件中配置了eureka.client.serviceUrl.defaultZone ,是http://discovery:8761/eureka/ ,所以要保持一致,为microservice-discovery-eureka 这个服务配置一下hostname。

    启动测试与故障排查

    我们在docker-compose.yml所在路径执行:

    docker-compose up

    即可启动容器,容器启动时,应用的大量报错暂且不管,后文会有详细的讲解。

    我们发现容器启动后,我们按照如下表格,依次访问进行测试:

    应用地址测试结果 
    microservice-discovery-eureka http://192.168.11.143:8761/ 正常  
    microservice-provider-user http://192.168.11.143:8000/1 正常  
    microservice-consumer-movie-ribbon-with-hystrix http://192.168.11.143:8011/ribbon/1 不正常 走了fallback
    microservice-hystrix-turbine http://192.168.11.143:8031/turbine.stream 不正常 一直ping
    microservice-api-gateway http://192.168.11.143:8050/movie/ribbon/1 不正常 500错误
    microservice-hystrix-dashboard http://192.168.11.143:8030/hystrix.stream 正常  

    发现测试到microservice-hystrix-turbine 开始发生异常,那么为什么会出现异常呢?

    访问:[http://192.168.11.143:8011/ribbon/1](http://192.168.11.143:8011/ribbon/1) ,会看到日志:

    microservice-hystrix-turbine_1                     | 2016-09-26 11:17:44.849  INFO 1 --- [        Timer-0] c.n.t.monitor.instance.InstanceMonitor   : Url for host: http://ribbon:8011/hystrix.stream default
    microservice-hystrix-turbine_1                     | 2016-09-26 11:17:44.995  WARN 1 --- [InstanceMonitor] c.n.t.monitor.instance.InstanceMonitor   : Stopping InstanceMonitor for: ribbon default
    

    好像知道了点什么……我们查看Eureka( http://192.168.11.143:8761/)界面,发现microservice-consumer-movie-ribbon-with-hystrix 这个服务在注册中心登记的地址是http://ribbon:8011/info 。而此时microservice-consumer-movie-ribbon-with-hystrix 而这个应用并没有绑定主机名,试问要如何访问到呢?再回溯到启动的日志,我们发现其实这个应用连启动都没启动成功。

    我们将docker-compose.yml修改一下,变为:

    microservice-discovery-eureka:
      image: reg.itmuch.com/microservice-discovery-eureka
      ports:
      - 8761:8761
      hostname: discovery
    microservice-provider-user:
      image: reg.itmuch.com/microservice-provider-user
      ports:
      - 8000:8000
      links:
      - microservice-discovery-eureka
    microservice-consumer-movie-ribbon-with-hystrix:
      image: reg.itmuch.com/microservice-consumer-movie-ribbon-with-hystrix
      ports:
      - 8011:8011
      links:
      - microservice-discovery-eureka
      hostname: ribbon
    microservice-hystrix-dashboard:
      image: reg.itmuch.com/microservice-hystrix-dashboard
      ports:
      - 8030:8030
      links:
      - microservice-discovery-eureka
      - microservice-hystrix-turbine
    microservice-hystrix-turbine:
      image: reg.itmuch.com/microservice-hystrix-turbine
      ports:
      - 8031:8031
      links:
      - microservice-discovery-eureka
      - microservice-consumer-movie-ribbon-with-hystrix
    microservice-api-gateway:
      image: reg.itmuch.com/microservice-api-gateway
      ports:
      - 8050:8050
      links:
      - microservice-discovery-eureka
      - microservice-consumer-movie-ribbon-with-hystrix

    重新启动测试,发现一切正常了。

  • 相关阅读:
    SQL Server CHARINDEX和PATINDEX详解
    Delphi7控件包详解 (转)
    经历一次人际关系危机总结,改进
    2008年5月份目标和计划
    God bless 贝贝!
    开始新的生活~~~
    一切安好~~~
    Hadoop : “Moving Computation is Cheaper than Moving Data”
    改论文,不轻言放弃,力求准确,简洁
    杜绝拖拖拉拉《明日歌》
  • 原文地址:https://www.cnblogs.com/boonya/p/7504006.html
Copyright © 2011-2022 走看看