Docker 使用docker-compose部署项目
经过前文对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部署项目的更多相关文章
- Docker Compose部署项目到容器-基于Tomcat和mysql的项目yml配置文件代码
场景 Docker-Compose简介与Ubuntu Server 上安装Compose: https://blog.csdn.net/BADAO_LIUMANG_QIZHI/article/deta ...
- Docker Compose部署项目到容器-基于Tomcat和mysql的商城项目(附源码和sql下载)
场景 Docker-Compose简介与Ubuntu Server 上安装Compose: https://blog.csdn.net/BADAO_LIUMANG_QIZHI/article/deta ...
- docker安装Tomcat软件,部署项目
1 搜索tomcat镜像 $ sudo docker search tomcat NAME DESCRIPTION STARS OFFICIAL AUTOMATED tomcat Apache Tom ...
- docker | jenkins 实现自动化部署项目,后端躺着把运维的钱挣了!(上)
前言 背景 最近在帮学校导师写项目,团队有4个人,项目前后端分离.如果是选择瀑布式开发:(在约定好接口的情况下)A.B同学写前端,C.D同学写后端,然后约定一个时间统一联调,最后将项目交付安装到客户机 ...
- Docker安装tomcat和部署项目
随着微服务的流行,Docker越来越流行,正如它的理念"Build, Ship, and Run Any App, Anywhere"一样,Docker提供的容器隔离技术使得开发人 ...
- Ubuntu Server 上使用Docker Compose 部署Nexus(图文教程)
场景 Docker-Compose简介与Ubuntu Server 上安装Compose: https://blog.csdn.net/BADAO_LIUMANG_QIZHI/article/deta ...
- Docker Compose部署Nexus3时的docker-compose,yml代码
场景 Docker-Compose简介与Ubuntu Server 上安装Compose: https://blog.csdn.net/BADAO_LIUMANG_QIZHI/article/deta ...
- Docker Compose部署GitLab服务,搭建自己的代码托管平台(图文教程)
场景 Docker-Compose简介与Ubuntu Server 上安装Compose: https://blog.csdn.net/BADAO_LIUMANG_QIZHI/article/deta ...
- SpringBoot使用Docker快速部署项目
1.简介 建议阅读本文最好对Dokcer有一些了解 首先我们先了解一下Docker是什么 Docker 属于 Linux 容器的一种封装,提供简单易用的容器使用接口.它是目前最流行的 Linux 容器 ...
随机推荐
- HDU 6356.Glad You Came-线段树(区间更新+剪枝) (2018 Multi-University Training Contest 5 1007)
6356.Glad You Came 题意就是给你一个随机生成函数,然后从随机函数里确定查询的左右区间以及要更新的val值.然后最后求一下异或和就可以了. 线段树,区间最大值和最小值维护一下,因为数据 ...
- HDU 1285 确定比赛名次【字典序最小的拓扑排序 + 优先队列】
确定比赛名次 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) Total Submis ...
- HDU 6213 Chinese Zodiac 【模拟/水题/生肖】
Problem Description The Chinese Zodiac, known as Sheng Xiao, is based on a twelve-year cycle, each y ...
- 贮油点问题(C++)
贮油点问题…..一道送命系列的递推… 描述 Description 一辆重型卡车欲穿过S公里的沙漠,卡车耗汽油为1升/公里,卡车总载油能力为W公升.显然卡车装一次油是过不了沙漠的.因此司机必须设法在沿 ...
- 洛谷——P1405 苦恼的小明
P1405 苦恼的小明 题目描述 黄小明和他的合伙人想要创办一所英语培训机构,注册的时候要填一张个人情况的表格,在身高一栏小明犯了愁. 身高要求精确到厘米,但小明实在太高了,无法在纸上填下这么长的数字 ...
- 1.5 JSP标准标签库(JSTL)(核心标签 out、set、remove、if、choose、forEach、forTokens、redirect)
JSTL(JavaServer Page Standard Tag Library):JSP标准标签库.它封装了JSP应用的通用核心功能. 1.准备工作 使用JSTL前需要下载所需文件,下载地址及安 ...
- OC语言基础之类的本质
一.类的本质 1: // 类本身也是一个对象,是个Class类型的对象,简称类对象 2: 3: /* 4: 利用Class 创建 Person类对象 5: 6: 利用 Person类对象 创建 Per ...
- 如何移除inline-block元素之间的空白
我们想要的是<li>元素可以紧贴在一起,但是很显然,结果“出乎意料”.那么有什么方法可以让结果符合我们的预期呢?所能想到的解决方法至少有以下四种,而每种方法也都有其优劣所在,至于要如何选择 ...
- Android中选项卡功能的实现
Android中选项卡功能的实现 Android中使用TabHost和TabWidget来实现选项卡功能.TabHost必须是布局的根节点,它包含两个子节点: TabWidget,显示选项卡: Fra ...
- webservice_客户端生成工具
1. axis java -Djava.ext.dirs=lib org.apache.axis.wsdl.WSDL2Java -p com.qunar.flight.flagship.provide ...