Spring Cloud 微服务入门教程(十二):Spring Cloud Docker 容器化部署

上一节我们讲了服务跟踪和链路监控以后,基本微服务框架的大体已经快要结束了,在伴随微服务中的部署肯定离不开Docker,那么我们如何构建一个Docker的镜像呢?本节我们就讲一下把代码打包成镜像文件,并上传到镜像仓库中。

Spring Cloud 微服务入门教程(一):微服务介绍 Spring Cloud 微服务入门教程(二):服务注册与发现-Eureka Spring Cloud 微服务入门教程(三):微服务的注册 Spring Cloud 微服务入门教程(四):微服务间的调用消费-FeignClient Spring Cloud 微服务入门教程(五):统一配置中心-ConfigService Spring Cloud 微服务入门教程(六):Spring Cloud BUS 消息总线实现配置中心动态更新配置文件 Spring Cloud 微服务入门教程(七):Spring Cloud Stream 消息队驱动式的微服务 Spring Cloud 微服务入门教程(八):Spring Cloud Zuul 服务网关动态路由和Cookie头信息传递和跨域 Spring Cloud 微服务入门教程(九):网关 Zuul 整合 Swagger2 实现自动生成 RESTful API 文档 Spring Cloud 微服务入门教程(十):Spring Cloud Hystrix 服务熔断和服务降级 Spring Cloud 微服务入门教程(十一):Spring Cloud Sleuth zipkin 服务追踪链路监控 Spring Cloud 微服务入门教程(十二):Spring Cloud Docker 容器化部署

代码 将在https://github.com/NeilRen/SpringCloudDemo进行分享,按不同的分支分享不同的章节代码,Master分支就是最后所有的内容合集。本章节代码在:https://github.com/NeilRen/SpringCloudDemo/tree/feature/docker

原创 本篇文章是原创文章,作者:任霏,转载请注明作者和出处

上一节我们讲了服务跟踪和链路监控以后,基本微服务框架的大体已经快要结束了,在伴随微服务中的部署肯定离不开Docker,那么我们如何构建一个Docker的镜像呢?本节我们就讲一下把代码打包成镜像文件,并上传到镜像仓库中。

Dockerfile的介绍

由于主题是将微服务,Docker相关的内容不深入讲解,如果对Docker一无所知,还需要先简单了解下Docker,咱们只聊你够用的知识就可以了。在Docker中创建镜像最常用的方式,就是使用Dockerfile。Dockerfile是一个Docker镜像的描述文件。Dockerfile其内部包含了一条条的指令,每一条指令构建一层,因此每一条指令的内容,就是描述该层应当如何构建。

我们给每个模块下面都新建一个Dockerfile文件,内容参考如下:

#基于OpenJDK8镜像
FROM openjdk:8
#维护者和联系方式
MAINTAINER RenFei i@renfei.net
#将Maven打包的Jar添加到镜像中
ADD target/*.jar app.jar
#开启 8761端口
EXPOSE 8761
#入口点,镜像从这里开始执行
ENTRYPOINT ["java","-jar","app.jar"]

然后运行 docker build -t <标签名> 构建镜像,再运行 doucker push <仓库地址> 将镜像推送到远程镜像仓库中。每次都得手动输入命令太繁琐,我们可以写一个shell脚本来完成一系列的动作,我们再新建一个build.sh文件。

build.sh脚本

为了简便我们的操作我们新建一个脚本,Linux和Mac的同学是shell脚本就是build.sh,Windows的同学需要新建批处理文件build.bat,并且命令有所不同,我这里演示的使用Mac环境,代码如下:

#!/usr/bin/env bash
mvn clean package -Dmaven.test.skip=true -U
docker build -t XXXXXX
doucker push XXXXXX

执行这个脚本就可以帮我们使用Maven打包并且构建镜像和推送镜像,一气呵成

运行镜像

镜像本地build构建完成以后,就可以再本地运行了,运行的命令是 docker run -p <本机端口>:<容器里端口> -d <镜像名称>,例如:docker run -p 8761:8761 -d renfei/eureka 就可以启动注册中心模块了。

如果提示不可执行,还需要一个命令 chmod +x build.sh 给文件可执行的权限。

关于镜像仓库

镜像仓库的提供方有很多,可以自己建私有仓库,也可以使用官方的DockerHub,网易云和阿里云也提供仓库服务,一般自己练习的话国内使用网易云的人比较多。