前边的两篇文章里面,我们讲解了基于docker来部署基础的SpringBoot容器,如果阅读本文之前没有相关基础的话,可以回看之前的教程。
不知道大家在初次使用docker的时候是否有遇到这种场景,每次部署微服务都是需要执行docker run xxx,docker kill xxx 等命令来操作容器。假设说一个系统中依赖了多个docker容器,那么对于每个docker容器的部署岂不是都需要手动编写命令来启动和关闭,这样做就会增加运维人员的开发工作量,同时也容易出错。
Docker Compose 编排技术
在前边的文章中,我们讲解了Docker容器化技术的发展,但是随着我们的Docker越来越多的时候,对于容器的管理也是特别麻烦,因此Docker Compose技术也就诞生了。
Docker Compose技术是通过一份文件来定义和运行一系列复杂应用的Docker工具,通过Docker-compose文件来启动多个容器,网上有很多关于Docker-compose的实战案例,但是都会有些细节地方有所遗漏,所以下边我将通过一个简单的案例一步步地带各位从浅入深地对Docker-compose进行学习。
基于Docker Compose来进行对SpringBoot微服务应用的打包集成
我们还是按照老样子来构建一套基础的SpringBoot微服务项目,首先我们来看看基础版本的项目结构:
首先是我们pom文件的配置内容:
<?xml version="1.0" encoding="UTF-8"?>4.0.0com.sise.idea springboot-docker 1.0-SNAPSHOTjarspring-boot-dockerhttp://maven.apache.orgorg.springframework.boot spring-boot-starter-parent 2.0.3.RELEASEUTF-8org.springframework.boot spring-boot-starter-web org.projectlombok lombok 1.16.18springboot-dockerorg.springframework.boot spring-boot-maven-plugin org.apache.maven.plugins maven-compiler-plugin 1.81.8
然后是java程序的内容代码,这里面有常规的controller,application类,代码如下所示:
启动类Application
package com.sise.docker;import org.springframework.boot.SpringApplication;import org.springframework.boot.autoconfigure.SpringBootApplication;/** * @author idea * @data 2019/11/20 */@SpringBootApplicationpublic class Application { public static void main(String[] args) { SpringApplication.run(Application.class); }}
控制器 DockerController
package com.sise.docker.controller;import org.springframework.web.bind.annotation.GetMapping;import org.springframework.web.bind.annotation.RequestMapping;import org.springframework.web.bind.annotation.RestController;/** * @author idea * @data 2019/11/20 */@RestController@RequestMapping(value = "/docker")public class DockerController { @GetMapping(value = "/test") public String test(){ System.out.println("=========docker test========="); return "this is docker test"; }}
yml配置文件:
server: port: 7089
接下来便是docker-compose打包时候要用到的配置文件了。这里采用的方式通常都是针对必要的docker容器编写一份dockerfile,然后统一由Docker Compose进行打包管理,假设我们的微服务中需要引用到了MySQL,MongoDB等应用,那么整体架构如下图所示: