前面已经完成了jar文件的打包和发布,但在实际使用时,可能会遇到外部依赖环境发生改变,为了解决这些问题,更多的做法是把应用程序以docker镜像,生成容器的方式运行,这是一种标准化的方式。
创建Dockerfile文件
在spring boot项目中,新建docker文件夹,新增Dockerfile文件。
项目代码下载地址:
https://download.csdn.net/download/liangmengbk/90633199?spm=1001.2014.3001.5501
Dockerfile文件的作用是告诉docker,如何来构建镜像。
前面已经完成了通过Jenkins将源代码编译打包生成 myproject.jar 这个产出物。
Dockerfile 脚本解读:
FROM openjdk:8-slim:表示通过docker拉取openjdk8构建基本的环境。
WORKDIR /usr/local:表示工作目录为 /usr/local
COPY myproject.jar .:表示将 myproject.jar 文件拷贝到工作目录 /usr/local 中(后面的点代表当前目录)
CMD java -jar myproject.jar:表示用CMD执行java -jar myproject.jar命令,完成程序启动。
将新建的文件提交到GitLab仓库
调整Jenkins的构建脚本
在Jenkins的工程设置中,找到构建后执行的菜单(Post-build Actions)
删除原来配置的jar运行命令,因为现在要调整生成镜像,然后以容器的方式运行,不直接运行jar。
点击添加配置
修改后的配置如下:
其中最下面的执行脚本为:
docker build -t myproject:1.0 /usr/local/
docker rm -f myproject
docker run -d -p 81:81 --name=myproject myproject:1.0
脚本解读:
docker build -t myproject:1.0 /usr/local/ :构建镜像,镜像名称myproject:1.0,/usr/local/指Dockerfile文件的地址。
docker rm -f myproject:用于强制删除名为myproject的Docker容器。
docker run -d -p 81:81 --name=myproject myproject:1.0:生成容器,使用名称为myproject:1.0的镜像来生成名称为myproject的容器,外部使用81端口访问容器内部的81端口(spring boot应用配置的是81端口,也就是说冒号后面的这个端口号,一定要跟spring boot应用配置的端口一致,否则无法访问到spring boot应用)。
在目标服务器上安装docker
因为需要docker的环境,所以要在目标服务器(192.168.1.11)上面安装docker。
操作步骤参考文章:
Jenkins重新构建
在目标服务器上(192.168.0.11) /usr/local 目录中,把之前传输的target目录删掉。
rm -rf target/
因为新的镜像是基于openjdk这个镜像来构建的,所以先要拉取openjdk镜像:
docker pull openjdk:8-slim
点击立即构建
查看构建的控制台输出
构建成功。
在Jenkins所在的服务器(192.168.1.10),可以看到docker目录和target都有了,说明Jenkins已经成功从GitLab仓库拉取到了文件,并顺利编译、打包。
在目标服务器(192.168.1.11),可以看到Dockerfile文件和jar文件都传输完成。
在目标服务器(192.168.1.11)上查看docker容器
docker ps
访问应用程序
顺利完成docker容器的部署