原文地址: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:
- :
hostname: discovery
microservice-provider-user:
image: reg.itmuch.com/microservice-provider-user
ports:
- :
links:
- microservice-discovery-eureka
microservice-consumer-movie-ribbon-with-hystrix:
image: reg.itmuch.com/microservice-consumer-movie-ribbon-with-hystrix
ports:
- :
links:
- microservice-discovery-eureka
microservice-hystrix-dashboard:
image: reg.itmuch.com/microservice-hystrix-dashboard
ports:
- :
links:
- microservice-discovery-eureka
- microservice-hystrix-turbine
microservice-hystrix-turbine:
image: reg.itmuch.com/microservice-hystrix-turbine
ports:
- :
links:
- microservice-discovery-eureka
microservice-api-gateway:
image: reg.itmuch.com/microservice-api-gateway
ports:
- :
links:
- microservice-discovery-eureka

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

第一个段落:

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

第二个段落:

microservice-hystrix-dashboard:
image: reg.itmuch.com/microservice-hystrix-dashboard
ports:
- :
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:
- :
hostname: discovery
microservice-provider-user:
image: reg.itmuch.com/microservice-provider-user
ports:
- :
links:
- microservice-discovery-eureka
microservice-consumer-movie-ribbon-with-hystrix:
image: reg.itmuch.com/microservice-consumer-movie-ribbon-with-hystrix
ports:
- :
links:
- microservice-discovery-eureka
hostname: ribbon
microservice-hystrix-dashboard:
image: reg.itmuch.com/microservice-hystrix-dashboard
ports:
- :
links:
- microservice-discovery-eureka
- microservice-hystrix-turbine
microservice-hystrix-turbine:
image: reg.itmuch.com/microservice-hystrix-turbine
ports:
- :
links:
- microservice-discovery-eureka
- microservice-consumer-movie-ribbon-with-hystrix
microservice-api-gateway:
image: reg.itmuch.com/microservice-api-gateway
ports:
- :
links:
- microservice-discovery-eureka
- microservice-consumer-movie-ribbon-with-hystrix

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

Docker 使用docker-compose部署项目的更多相关文章

  1. Docker Compose部署项目到容器-基于Tomcat和mysql的项目yml配置文件代码

    场景 Docker-Compose简介与Ubuntu Server 上安装Compose: https://blog.csdn.net/BADAO_LIUMANG_QIZHI/article/deta ...

  2. Docker Compose部署项目到容器-基于Tomcat和mysql的商城项目(附源码和sql下载)

    场景 Docker-Compose简介与Ubuntu Server 上安装Compose: https://blog.csdn.net/BADAO_LIUMANG_QIZHI/article/deta ...

  3. docker安装Tomcat软件,部署项目

    1 搜索tomcat镜像 $ sudo docker search tomcat NAME DESCRIPTION STARS OFFICIAL AUTOMATED tomcat Apache Tom ...

  4. docker | jenkins 实现自动化部署项目,后端躺着把运维的钱挣了!(上)

    前言 背景 最近在帮学校导师写项目,团队有4个人,项目前后端分离.如果是选择瀑布式开发:(在约定好接口的情况下)A.B同学写前端,C.D同学写后端,然后约定一个时间统一联调,最后将项目交付安装到客户机 ...

  5. Docker安装tomcat和部署项目

    随着微服务的流行,Docker越来越流行,正如它的理念"Build, Ship, and Run Any App, Anywhere"一样,Docker提供的容器隔离技术使得开发人 ...

  6. Ubuntu Server 上使用Docker Compose 部署Nexus(图文教程)

    场景 Docker-Compose简介与Ubuntu Server 上安装Compose: https://blog.csdn.net/BADAO_LIUMANG_QIZHI/article/deta ...

  7. Docker Compose部署Nexus3时的docker-compose,yml代码

    场景 Docker-Compose简介与Ubuntu Server 上安装Compose: https://blog.csdn.net/BADAO_LIUMANG_QIZHI/article/deta ...

  8. Docker Compose部署GitLab服务,搭建自己的代码托管平台(图文教程)

    场景 Docker-Compose简介与Ubuntu Server 上安装Compose: https://blog.csdn.net/BADAO_LIUMANG_QIZHI/article/deta ...

  9. SpringBoot使用Docker快速部署项目

    1.简介 建议阅读本文最好对Dokcer有一些了解 首先我们先了解一下Docker是什么 Docker 属于 Linux 容器的一种封装,提供简单易用的容器使用接口.它是目前最流行的 Linux 容器 ...

随机推荐

  1. SyntaxError: Non-ASCII character '\xe7' in file 错误的解决方法

    在代码开头写下面的定义即可 #encoding:utf-8

  2. python 根据文件创建时间排序

    #coding:utf8 import os,time directory = "d:/scrapy tutorial/" t = [] d = {} for filename i ...

  3. android studio中timber的配置

    在你项目的module级别的build.gradle中加入 compile 'com.jakewharton.timber:timber:3.1.0' 然后Timber的依赖就添加进来了.

  4. CF 917A The Monster 【括号匹配】

    [链接]:CF Examples inputCopy ((?)) outputCopy 4 inputCopy ??()?? outputCopy 7 说明 For the first sample ...

  5. CF 862A Mahmoud and Ehab and the MEX【数组操作】

    A. Mahmoud and Ehab and the MEX time limit per test 2 seconds memory limit per test 256 megabytes in ...

  6. hdu6191(树上启发式合并)

    hdu6191 题意 给你一棵带点权的树,每次查询 \(u\) 和 \(x\) ,求以 \(u\) 为根结点的子树上的结点与 \(x\) 异或后最大的结果. 分析 看到子树,直接上树上启发式合并,看到 ...

  7. ASP.NET Core 2.2 基础知识(十三) WebAPI 概述

    我们先创建一个 WebAPI 项目,看看官方给的模板到底有哪些东西 官方给出的模板: [Route("api/[controller]")] [ApiController] pub ...

  8. 【kd-tree】CDOJ - 1170 - 红与蓝

    kd-tree模板题,对红点建立kd-tree,用每个蓝点查询,更新最小值即可. #include<cstdio> #include<cmath> #include<al ...

  9. iOS使用CoreData实现收藏功能

    一般做收藏都是使用数据库或者归档,使用CoreData实现收藏功能就是没事时练一下,实现大概和数据库差不多. 首先创建一个工具类继承NSObject,在里面实现所需要的方法. 工具类的.h文件: ty ...

  10. Vim复制一整行和复制多行

    1.复制 1)单行复制 在命令模式下,将光标移动到将要复制的行处,按“yy”进行复制: 2)多行复制 在命令模式下,将光标移动到将要复制的首行处,按“nyy”复制n行:其中n为1.2.3…… 2.粘贴 ...