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容器的部署

相关推荐
零基础1235 分钟前
LLM Agent 驱动的物模型构建:从设备手册到边缘接入的自动化实践
运维·人工智能·经验分享·python·自动化
更深兼春远1 小时前
第2篇:Dify 部署保姆级教程:用 Docker跑起来
docker·容器·dify
程序猿老A1 小时前
从入门型到企业型:云服务器开放共享型到独享型规格升级
运维·服务器
Ruiery2 小时前
Linux 6.6内核 CPU 深度解析(九):时钟与 TSC — 内核怎么从 PIT/HPET 切到 TSC
linux·运维·服务器
吴声子夜歌3 小时前
Nginx应用与运维——Nginx日志管理
java·运维·nginx
打工仔折腾 AI3 小时前
用UU远程把家里电脑变成AI Agent常驻服务器:CLI、端口映射与代理实测
运维·服务器·人工智能·后端·python·电脑·ai agent 实战
guo_wen_qiang3 小时前
云服务器nacos搭建-集群&持久化
java·运维·服务器
牢姐与蒯3 小时前
一点小碎片——每个线程独有的东西——上下文+栈
linux·运维·服务器
Elastic 中国社区官方博客4 小时前
错误最多的服务运行正常:使用 ES|QL 从日志进行根因分析
大数据·运维·数据库·sql·elasticsearch·搜索引擎·全文检索
迪康coolmu4 小时前
屏幕水印与防拍照落地:从水印类型到泄密溯源的完整配置
运维·网络·安全·网络安全·数据安全