docker-compose 构建 springcloud 微服务项目
1、前言
开发构建过springcloud微服务项目的人都知道,众多的服务部署起来相当麻烦,docker的出现极大程度的解决了这个问题,但通过docker部署时,由于服务数量之多,启停服务就会变得麻烦。docker-compose就解决了这个问题,docker-compose的介绍可以查看上一篇文章《Docker Compose介绍、安装》。
基于springcloud微服务进行实战说明,将构建一个在Docker Compose上运行的注册中心、配置中心、网关服务三个服务(三个容器),以此掌握docker Compose的基本使用。
2、服务准备
注册中心、配置中心、网关服务,使用之前开发好的服务,这里不再具体说明如何开发,代码可从github上获取,https://github.com/xcbeyond/springCloudLearning。由于github上代码会经常进行优化调整,故此将本文演示代码打包了一份供大家下载,便于与文中提及的保持一致。
涉及服务如下:
涉及服务、dockerfile、docker-compose.yml项目结构如下:
(只列出主要关注的文件位置)
三个服务的启动顺序如下:
springCloudEureka ——> springCloudConfigServer ——> springCloudZuulGateway
3、Dockerfile定义
为每个服务编写docker镜像的Dockerfile脚本,分别位于各项目的\src\main\docker目录下管理。Dockerfile中所有指令的详细说明,请查阅关于Dockerfile文件定义的详细说明介绍,本文只说明本例中用到的指令。
(1)springCloudEureka:
说明:
FROM java:8
FROM 指定基于的基础镜像。必须在第一行,本例中是基于Java 8作为基础镜像的。
RUN mkdir /microservice
RUN 执行shell命令。本例中是用于创建microservice目录。
WORKDIR /microservice
WORKDIR 为后续的RUN、CMD、ENTRYPOINT指令配置工作目录。
ADD /register-center-1.0.jar /microservice/
ADD 复制指定位置的程序包到容器的指定位置。本例中是将位于该Dockerfile同一目录下的springCloudEureka-1.0.jar复制到容器的/microservice/目录下。
EXPOSE 8761
EXPOSE 暴露容器的端口,供外部使用。本例中是只注册中心服务springCloudEureka的端口,并确保对外能够访问。
ENTRYPOINT ["java", "-Djava.security.egd=file:/dev/./urandom", "-jar", ……]
ENTRYPOINT 配置容器启动后只需的命令。本例中是启动Java程序。
(2)springCloudConfigServer:
(3)springCloudZuulGateway:
4、docker-compose.yml定义
这个脚本中定义了一次性启停上述三个服务,并实现服务间的通信,脚本内容如下:
5、编译、运行
将各个打包好的服务jar包 、Dockerfile脚本、 docker-compose.yml上传至docker服务器上,我是存放在如下结构的目录下,具体依个人习惯而定。
(1)编译镜像
register-center(注册中心):
config-center(配置中心):
gateway(网关服务):
(2)运行
在docker-compose.yml目录下,执行 docker-compose up -d命令后台启动。
至此,通过docker-compose完成微服务项目中多个服务的启动。
docker-compose常用命令说明:
1)启停
docker-compose up -d 全部后台启动
docker-compose stop xxx 停止某一个服务
docker-compose stop 停止所有服务
docker-compose start xxx启动某一个服务
docker-compose restart xxx 重启某一个服务
2)其他
docker-compose config 查看当前yml文件中的所有配置
docker-compose rm xxx 删除某一个服务(容器)
docker-compose rm 删除所有服务(容器)
版权声明: 本文为 InfoQ 作者【xcbeyond】的原创文章。
原文链接:【http://xie.infoq.cn/article/b32ad0287d8f397854ed4e6f2】。文章转载请联系作者。
评论