公司的技术结构最近正在升级,技术体系主要就是SpringCloud的一套,发布主要采用k8s+docker的方式去发布,这里主要讲解记录笔者使用官方推荐的一款插件:dockerfile-maven-plugin
对SpringCloud项目进行打包、把镜像发布到Docker镜像仓库私服Harbor上、拉取指定版本镜像、启动项目的一套流程是怎么操作的。
环境准备
电脑上需要安装Docker Desktop:官方下载地址
安装前注意Docker Desktop对Windows电脑系统要求是专业版或者企业版。并且在系统版本要求是1903+
作者这里Harbor也就是Docker私服的地址是10.135.170.238 端口是80 所以可以把80省略掉
引入依赖,定义Docker打包插件
这里就不讲SpringCloud项目搭建了,在需要打包的项目pom.xml
里build内增加引入依赖
完整的build
内容:
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<version>${spring-boot-maven-plugin.version}</version>
<executions>
<execution>
<goals>
<goal>repackage</goal><!--可以把依赖的包都打包到生成的Jar包中-->
</goals>
</execution>
</executions>
</plugin>
<!-- Dockerfile 打包插件 -->
<plugin>
<groupId>com.spotify</groupId>
<artifactId>dockerfile-maven-plugin</artifactId>
<version>1.4.10</version>
<executions>
<execution>
<id>default</id>
<goals>
<goal>build</goal>
</goals>
</execution>
</executions>
<configuration>
<repository>10.135.170.238/springcloud/${artifactId}</repository>
<dockerInfoDirectory>${pom.basedir}/src/main/docker</dockerInfoDirectory>
<buildArgs>
<JAR_FILE>target/${project.build.finalName}-${project.version}.jar</JAR_FILE>
</buildArgs>
</configuration>
</plugin>
</plugins>
</build>
定义Dokcerfile
为了方便后面启动项目时环境的切换以及服务之间的调用,这里给镜像定义两个输入参数
profile
对应spring.profiles.active
用来做配置文件环境切换clientIp
对应spring.cloud.nacos.discovery.ip
用来配置注册中心的注册表内的服务对应真实IP,如果不配置该选项,默认服务会使用docker内置网络的ip地址。会导致服务之间调用失败的问题
FROM openjdk:8-jdk-alpine
MAINTAINER yangxiaohui<yxh_china@163.com>
VOLUME /tmp
ARG JAR_FILE
ENV profile "dev"
ENV clientIp "127.0.0.1"
RUN ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime \
&& echo "Asia/Shanghai" > /etc/timezone
COPY ${JAR_FILE} app.jar
ENTRYPOINT ["java","-Djava.security.egd=file:/dev/./urandom","-jar","/app.jar", "--spring.profiles.active=${profile}","--spring.cloud.nacos.discovery.ip=${clientIp}"]
打包Docker镜像
使用控制台打开项目目录,执行命令mvn clean package dockerfile:build
输出BUILD SUCCESS,打包成功
控制台输入docker images
查看镜像
使用镜像启动一个容器测试
启动命令:
docker run -d -p 9009:9009 -e "profile=pro" -e "clientIp=192.168.21.67" --name ces 10.135.170.238/springcloud/gateway-server:1.0-SNAPSHOT
查看运行的容器:docker ps
然后访问http://127.0.0.1:9009
这里没有定义首页,所以输出404,正常,能够正常访问项目
上传镜像到Docker镜像仓库私服Harbor
-
配置本地Docker 仓库私服地址
找到Docker的图标,鼠标右键选择settings然后在弹出的界面选择
Docker Engine
-
终端登录Docker镜像仓库私服
命令行终端输入
docker login 10.135.170.238
,然后根据提示输入UserName和Password -
推送镜像到镜像仓库私服
命令行终端输入
docker push 10.135.170.238/springcloud/gateway-server
至此,镜像打包成功并且能够成功运行,也上传到了镜像仓库。我们用k8s或者docker手动启动就方便多了,只需要
docker pull 10.135.170.238/springcloud/gateway-server
就能把镜像拉取下来。
初次写SpringCloud使用Docker打包到发布的流程,如果有不明白的或者打包过程中有什么问题的,欢迎留言交流