深入浅出微服务架构:一分钟让你轻松上手Docker容器


深入浅出微服务架构:一分钟让你轻松上手Docker容器

文章插图
 
在微服务时代,服务数量及规模越来越大,服务的部署及运维的模式如果仍然采用传统方式就会大大增加运维成本 。所以微服务时代的运维方式一定是Devops模式,通过构建自动化运维发布平台来打通产品、开发、测试及运维流程,从而整体上提升研发效能,而这也是目前大部分公司正在做的事情 。
随着以Docker为代表的容器化技术的普及,目前Devops实践大多会采用容器(如Docker、K8s)这样的方式来作为微服务应用部署运行的载体,并通过容器的弹性扩展来实现快速扩容和缩容,从而更快地响应业务、更好地利用资源 。
目前Devops最流行的部署方案是基于K8s的集群方案,但是它本身也是基于Docker容器技术的,所以在接触K8s技术之前,先通过本文了解下Docker及基于Docker的容器化部署 。
Docker的基本概念Docker是一个开源的应用容器引擎,也是目前最流程的应用部署方式,通过它可以把应用及其依赖打包到一个可移植的镜像中,然后利用Docker提供的部署机制将其发布至任意安装了Docker容器的系统环境中 。从使用角度主要需要理解一下几个要点如图所示:
深入浅出微服务架构:一分钟让你轻松上手Docker容器

文章插图
 
如上图所示,理解Docker的使用方式需要掌握以下几个概念:
  • Image(镜像):它是一个可执行文件,包含应用代码、依赖库、运行环境(如JRE等)以及环境变量及配置等信息,通过镜像可以启动一个应用,镜像的构建过程通过Dockefile文件描述 。
  • Container(容器):使用Image启动的一个进程实例,它与镜像之间为一对多的关系,一个镜像可以启动多个容器实例 。
  • Service(服务):一组提供对外服务的Container,这些Container使用同一个Image镜像,它与镜像为一对一、与容器为一对多的关系,Service由docker-compose文件定义 。
  • Stack(应用):一组Service,相互协作对外提供服务,可以看作是一个完整的应用,在一些复杂的场景中会拆分为多个Stack,由docker-compose构建 。
Docker部署一个Spring Boot服务为了更进一步加深对上述概念的理解,这里以一个Spring Boot应用为例演示如何通过Docker部署一个Spring Boot服务 。这里可以通过IDE创建一个简单的Spring Boot应用并写一个测试接口,如下图所示:
深入浅出微服务架构:一分钟让你轻松上手Docker容器

文章插图
 
以上为通过IDEA创建的一个最为简单的Spring Boot应用程序,运行后启动服务可以通过端口访问测试接口,接下来使用Docker部署该服务,步骤如下:
创建Dockerfile文件构建Docker镜像
按照前面Docker的介绍,如果要让Spring Boot程序运行在Docker容器上,首先需要构建Docker镜像,而构建的过程则需要通过Dockerfile文件来描述 。例如在项目src/main/docker目录创建Dockerfile文件,代码如下:
FROM JAVA:8VOLUME /tmpRUN mkdir /AppADD springboot-1.0-SNAPSHOT.jar /app/springboot.jarADD runboot.sh /app/RUN bash -c 'touch /app/springboot.jar'WORKDIR /appRUN chmod a+x runboot.shEXPOSE 9090CMD /app/runboot.sh上述Dockerfile文件定义了运行的基础信息为JDK1.8、容器运行的目录为/app、并添加了所需的Jar包等信息,最后定义了要执行的命令为“/app/runboot.sh”脚本 。runboot.sh脚本代码如下:
sleep 10java -Djava.security.egd=file:/dev/./urandom -jar/app/springboot.jar这里打包Spring Boot应用Docker镜像的Dockerfile文件就定义好了,为了能在Maven项目中执行Docker镜像构建命令,还需要在项目pom.xml文件添加Maven Build插件信息,代码如下:
<!--Docker Maven插件依赖--><plugin><groupId>com.spotify</groupId><artifactId>docker-maven-plugin</artifactId><configuration><imageName>${project.name}:${project.version}</imageName><dockerDirectory>${project.basedir}/src/main/docker</dockerDirectory><skipDockerBuild>false</skipDockerBuild><resources><resource><directory>${project.build.directory}</directory><include>${project.build.finalName}.jar</include></resource></resources></configuration></plugin>接下来可以通过Maven命令构建Spring Boot应用Docker镜像,命令如下:
mvn clean package docker:build运行成功可以看到本地Docker仓库中镜像信息,命令如下:
深入浅出微服务架构:一分钟让你轻松上手Docker容器

文章插图
 
这表示Spring Boot程序的Docker镜像已打好,需要说明的是以上命令运行是需要你的系统已经安装Docker容器运行环境 。


推荐阅读