06-DevOps-自动构建Docker镜像

前面已经完成了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。

操作步骤参考文章:

Linux安装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

访问应用程序

http://192.168.1.11:81/

顺利完成docker容器的部署

相关推荐
一技安身12 小时前
【Docker】 镜像导出 & 导入,实验环境aarch64(arm64)Linux操作系统
linux·docker·容器
两点王爷15 小时前
解决 Linux 中 version `CXXABI_1.3.8‘ not found 报错
linux·运维·服务器
0+11115 小时前
Linux --线程概念与控制
linux·运维·服务器·jvm
2601_9622841715 小时前
欧洲转码指南:后端、前端与全栈开发解析
前端开发·devops·后端开发·全栈开发·欧洲转码指南
宽海智能仓储物流16 小时前
航发自动化立体库异构系统改造:宽海智能30天联调技术全解析
运维·数据仓库·自动化
鹤落晴春16 小时前
【K8s】从 ConfigMap 到 Argo CD:Kubernetes 配置管理链路
运维·云原生·容器·kubernetes
2601_9494999416 小时前
DT‑1414PTZ如何百分百兼容(安华高)HFBR‑1414PTZ
运维·网络·人工智能·科技·光模块
fengyehongWorld16 小时前
Linux 安装frp实现内网穿透
linux·运维·服务器
ezreal_pan16 小时前
Pod 重启多场景复盘:OOM、日志阻塞、并发 map 读写导致程序崩溃
docker·k8s
一技安身17 小时前
【信创】银河麒麟V10服务器使用安装光盘Packages自建本地yum源
linux·运维·服务器