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

相关推荐
未来之窗软件服务3 小时前
服务器运维(六)跨域配置 Preflight 问题——东方仙化神期
运维·服务器·服务器运维·仙盟创梦ide·东方仙盟
winner88815 小时前
Linux 软件安装 “命令密码本”:yum/apt/brew 一网打尽
linux·运维·服务器
九河云5 小时前
软件开发平台 DevCloud
运维·服务器·数据库·科技·华为云
思麟呀6 小时前
Linux的基础IO流
linux·运维·服务器·开发语言·c++
winner88817 小时前
嵌入式Linux驱动开发全流程:工具协作+核心概念拆解(从入门到理解)
linux·运维·驱动开发
TTBIGDATA8 小时前
【Ambari开启Kerberos】KERBEROS SERVICE CHECK 报错
大数据·运维·hadoop·ambari·cdh·bigtop·ttbigdata
Archy_Wang_18 小时前
脚本自动生成专业Linux巡检报告
linux·运维·服务器
java_logo8 小时前
SGLANG Docker容器化部署指南
linux·运维·docker·容器·eureka·1024程序员节
Qayrup8 小时前
各个系统的 docker安装
运维·docker·容器
代码or搬砖9 小时前
Docker 部署 Java 项目实践
java·docker·容器