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

相关推荐
画中有画36 分钟前
自动化脚本中如何启动/打开app的某个页面
运维·自动化
我星期八休息1 小时前
Linux—五种IO模型与非阻塞IO
linux·运维·服务器·网络·数据库·网络协议
hweiyu001 小时前
Linux命令:column
linux·运维·服务器
日常筹谋记2 小时前
ATS选不对运维两行泪:数据中心市电与柴发切换场景的双电源自动转换开关选型笔记
运维·数据库·笔记
绿蚁新亭2 小时前
Markdown Wiki 网页代码块复制至欧拉 Linux Shell 脚本隐形字符故障完整复盘
linux·运维·服务器
艾伦_耶格宇2 小时前
【DOCKER容器实战】-3 ElasticSearch + Kibana
elasticsearch·docker·jenkins
mengge.cloud2 小时前
LVS 小白完整教程(Linux虚拟服务器负载均衡)
linux·运维·服务器·负载均衡·lvs
江湖有缘2 小时前
跨平台AI终端Wave:智能SSH与文件管理
运维·人工智能·ssh
海兰2 小时前
【 Kafka进阶5】使用 Docker 部署 Apache Kafka 集群完全指南
docker·kafka·apache
夏贰四2 小时前
管控数据加载调度如何规避任务冲突?数据加载运维监控体系该如何搭建?
java·大数据·运维