IDEA +docker实现springboot打包docker镜像
前言
使用springboot开发,通常打包成一个jar包进行部署,随着容器化部署越来越流行,通常服务器环境中都是使用docker进行服务的部署和管理,这也要求开发将jar打包成docker镜像进行发布。如果本地不想安装docker desktop,可以借助远程的开发环境中的服务器进行docker镜像打包和测试。本文就简单介绍一下如何使用IDEA 配合远程服务器中的docker将springboot应用打包成docker镜像并部署到远程服务器中。
环境介绍:
开发工具:IntelliJ IDEA 2022.2.4
远程服务器:centos7.6
docker版本:24.0.5
Spring-boot版本: 3.2.3
jdk版本:17
环境配置
docker配置
修改 “/lib/systemd/system/docker.service”文件:
vi /lib/systemd/system/docker.service
##找到"ExecStart=/usr/bin/dockerd -H fd:// --containerd=/run/containerd/containerd.sock"
##在最后添加"-H tcp://0.0.0.0:2375",如下
.....
ExecStart=/usr/bin/dockerd -H fd:// --containerd=/run/containerd/containerd.sock -H tcp://0.0.0.0:2375
.....
修改完成后保存,并执行命令重启docker配置和服务:
systemctl daemon-reload
systemctl restart docker
注意:这种配置由于没有任何认证限制,只能用于开发环境!只能用于开发环境!只能用于开发环境!
IDEA配置
先安装docker插件,setting->Plugins,IntelliJ IDEA 2022.2.4已经默认安装了,只需要确认即可:
确认docker插件已安装,配置docker远程连接,setting->Build->Docker
配置完成应该可以在Services中找到远程docker服务,可以启动并管理远程的docker服务:
Dockerfile配置
为了尽量不在原工程中进行修改,我们只写Dockerfile文件,不用pom插件,不改动pom文件。在项目根目录中创建Dockerfile文件,也就是跟pom文件同级的目录下,填下如下内容:
#采用openjdk:17-jdk-alpine作为基础镜像
FROM openjdk:17-jdk-alpine
#时区配置
RUN ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
#自定义一个工作目录:/data
WORKDIR /data
EXPOSE 8080
#拷贝jar到应用目录下,app为自定义的目录名称
COPY ./target/xxx-0.0.1-SNAPSHOT.jar ./app/
#在data目录下启动 ./app/xxx-0.0.1-SNAPSHOT.jar
CMD java -jar ./app/xxx-0.0.1-SNAPSHOT.jar
创建完成后,打开Dockerfile文件,找到配置按钮点击配置Dockerfile的运行信息:
配置信息包含镜像名称、服务、镜像tag、运行的容器名称、运行容器的选项配置:
运行
只打包镜像
在配置完成的Dockerfile文件上点击运行按钮,选择“Build Image for xxx”开始运行,有时会出现连接不上docker service的报信息,这时需要关闭docker service再重新打开:
打包日志会显示在services中,并且运行完成后可以打开dashboard查看镜像信息,dashboard中还提供了创建容器和推送镜像仓库的功能:
打包镜像并创建容器
由于配置Dockerfile的时候添加了"run"配置信息,点击Dockerfile运行按钮,选择“Run xxx"开始运行:
打包日志和运行日志会显示在services中,并且运行完成后可以打开dashboard查看容器信息,dashboard中还提供了容器的操作按钮:重启、停止、命令行进入容器内部:
总结
使用IDEA插件来讲springboot打包成镜像的方法,对项目工程的入侵较小,基本上只需要添加Dockerfile文件即可。当然这种方式适合较小的团队或者个人开发时候使用。如果是较大的团队或者想要实现CI/CD则可以通过maven插件配合jenkins来实现,流程上跟本次的类似,用maven插件替代IDEA插件,写一个Dockerfile,执行的操作交给Jenkins。