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

相关推荐
a栋栋栋14 分钟前
wsl 环境下用Docker 安装多版本MySQL
mysql·docker·容器
大霞上仙1 小时前
jmeter实现两个接口的同时并发
运维·服务器·jmeter
饱饱要坚持可持续发展观1 小时前
docker 拉取本地镜像
docker
我就要用Cx3301 小时前
配置docker常见问题
运维·docker·容器
nmxiaocui2 小时前
openssl升级
linux·运维·服务器
最小的帆也能远航4 小时前
2018年下半年 系统架构设计师 综合知识
linux·运维·服务器
云边云科技4 小时前
企业跨区域组网新解:SD-WAN技术打造安全稳定网络体系
运维·网络·人工智能·安全·边缘计算
疯子@1234 小时前
nacos1.3.2 ARM 版容器镜像制作
java·linux·docker·容器
会飞的鱼_1234 小时前
Nginx性能优化与防盗链实战指南
运维·nginx·性能优化
Pretend° Ω4 小时前
LRU缓存详解:用C语言实现高效数据管理
运维·c语言·spring·缓存·lru·双向链表