微服务SpringCloud项目docker容器化部署

前言

近期接到领导通知,要对公司应用进行后台架构进行调整,把java应用从原先的java -jar **.jar启动方式,改成全部以docker容器的方式运行,这篇文章,是笔者在对java应用容器化的过程做的记录。

应用是采用微服务SpringCloud框架,在对所有模块进行容器化的过程中也要注意固定IP,映射相关目录、容器时间等问题,再下面的内容中,笔者也有相关介绍也解决。

Docker的安装这里不再赘述。

步骤

1、构建JDK基础镜像

第一步是为应用制作一个基础镜像。

官方提供的java8镜像大小为643M,生成服务的镜像体积就达到700M+,所以这里笔者以alpine镜像为基础自定义了一个jdk8版本的镜像,只有128M

已经对镜像的时间、环境编码做了处理,笔者已将镜像上传到DockerHub,可以使用pull命令下载:

$ docker pull hlwojiv/alpine-jdk8

如还需对此镜像进一步自定义,也可以下载笔者的Dockerfile文件(里面有个压缩包有点大,clone的时候等一会就好):

$ git clone https://github.com/hlwojiv/alpine-jdk8.git

2、修改pom.xml文件

修改项目中的pom.xml文件,配置插件内容,在 标签内添加以下内容:

<plugin>
	<groupId>com.spotifygroupId>
	<artifactId>docker-maven-pluginartifactId>
	<version>0.4.13version>
	<configuration>
		<imageName>hub.examlpe.com/example/${project.artifactId}:latestimageName>
 		<forceTags>trueforceTags>
		<baseImage>hlwojiv/alpine-jdk8baseImage>
		<entryPoint>["java", "-jar", "/${project.build.finalName}.jar"]entryPoint>
        <resources>
        	<resource>
        		<targetPath>/targetPath>
        		<directory>${project.build.directory}directory>
        		<include>${project.build.finalName}.jarinclude>
        	resource>
        resources>
	configuration>
plugin>

你需要改的是中的$符号前的内容,顾名思义,这个标签定义了生成的镜像的名称。
微服务SpringCloud项目docker容器化部署_第1张图片

3、生成应用镜像

配置完之后执行mvn命令生成镜像,在这个过程中docker服务要在运行状态:

$ mvn clean package docker:build

构建成功会看到这个结果:
微服务SpringCloud项目docker容器化部署_第2张图片
执行docker images,能看到构建成功的镜像:

4、运行镜像

在运行镜像前,要考虑微服务应用的配置,也就是所有模块应用的配置中,eureka的IP地址,这也就是限定所有服务的IP地址是固定的。

启动Docker容器的时候,使用默认的网络是不支持指定固定IP,所以笔者在这里创建了一个自定义网络:

$ docker network create --subnet=172.18.0.0/16 example

启动容器并指定固定IP:

$ docker run -p 2003:2003 --name order -v /data/logs:/data/logs --network example --ip 172.18.0.13 -d hub.example.com/example/order

至此,一个java应用模块的容器化就完成了,当然微服务中存在多个应用模块,重复上面的步骤启动即可,下图是我将全部模块启动后:
微服务SpringCloud项目docker容器化部署_第3张图片

5、测试可用性

由于2000端口已经映射给宿主机,可以访问宿主机的2000端口查看服务是否注册:
微服务SpringCloud项目docker容器化部署_第4张图片
可以看到服务都被注册上了,对应的IP地址也是容器的地址。

总结

微服务容器化的主要为:制作jdk镜像、修改应用pom.xml文件、生成服务镜像、运行服务镜像这几个步骤,在运行镜像的时候要注意应用的IP需要固定,以及映射应用所用到的目录等问题。

到这篇文章发布时,该架构已在测试环境稳定地运行了两周,对前端的调用请求也没有出现什么问题,后期也会将生产的微服务换成容器化的结构。

你可能感兴趣的:(教程记录)