前言

很多公司目前发布上线的时候还是手动将 jar 包打好,然后用 Java 命令行去启动,包括我现在所在的公司。这样做无疑是加大了人工成本,这次我打算利用 Idea 中的官方 Docker 插件,快速将本地项目发布到服务器的 Docker 并部署,同时集成后续持续更新的操作

安装 Docker 插件

首先我们得确保 Idea 中具有 Docker 插件,在插件列表中搜索 Docker,如果有下方这个插件我们则继续

image-20230502120319396

DockerFile

DockerFile 是 Docker 中构建镜像的脚本文件,包含一系列的指令和配置,用来描述如何构建和配置 Docker 容器,我先简单介绍一下 DockerFile 中的常用命令,以命令(示例):详情的格式进行介绍

FROM(FROM java:7):基础镜像,构建的起点

COPY(COPY file /usr/local):将本地文件复制到镜像中的指定位置

ADD(ADD pom.xml/usr/local):将本地文件添加到 Docker 镜像中,这里要注意和 COPY 的区别,如果 ADD 移动的是压缩文件则会自动解压缩,COPY 则不会

WORKDIR(WORKDIR /usr/local):指定工作目录,指定目录之后后续的所有命令都会在该目录下执行

RUN(RUN apt-get update):一般 RUN 命令是在镜像构建期间在容器内执行的,例如安装软件包,下载文件,每执行一次 RUN 命令都会在镜像中创建一个新的中间层,RUN 命令可以被多次使用。所以我们尽量避免多个 RUN 命令。可以使用 && \ 来连接多个命令减少镜像层的创建

1
2
RUN apt-get update && \
apt-get install -y curl

CMD(CMD [“RUN”,”-jar”,”application.jar”]):CMD 一般是容器启动的执行命令,不会改变 Docker 镜像的内容,DockerFile 中最多只能有一个 CMD 指令,如果有多个,则只有最后一个生效

完成 DockerFile 的指令

首先我们需要在项目跟目录创建一个文件,名字必须为 Dockerfile(注意大小写!!!)

image-20240123164549940

在 DockerFile 中完成容器构建,因为我这里使用的是 java17 所以引入了 17,如果是 8 则可以使用 FROM java:8 完成引入,接着我指定工作目录为 /usr/local,表示之后的命令都在该目录下完成,使用 ADD 命令,将我们本地的 jar 包指定到工作目录 ‘. 表示工作目录’ 最后用 CMD 命令启动 jar 包,同时因为我的项目端口号是 1234,使用 EXPOSE 告诉 Docker 容器监听这个端口。

1
2
3
4
5
FROM openjdk:17-oracle
WORKDIR /usr/local
ADD ./target/ShardingJDBC.jar .
CMD ["java","-jar","ShardingJDBC.jar"]
EXPOSE 1234

PS:关于 jar 包的名字可以在 pom.xml 中指定,使用 finalName 指定 jar 包名字

image-20230502142919341

Idea 连接 Docker

这里我的 Idea 版本 23.1 版本的新 UI。连接 Docker 的位置是在服务选项卡中,有个 + 号,我们需要新建一个 Docker 连接

image-20230502143631045

共有三种方式连接到 Docker,第一个是连接到我们本地的 Docker,第二个是 TCP 连接,第三个则是 SSH。大家根据需求选择对应的连接方式。

image-20230502143728502

这里我连接了一个本地的一个服务器上的,连接完成我们就可以准备创建容器了

image-20230502144356770

使用 Docker 插件创建容器

右键 DockerFile 修改运行配置

image-20230502143112755

首先完成镜像标记,一般是作者/容器名称:版本号构成,容器名称是自定义的

image-20230502143153522

下面我们开始绑定端口,首先点运行右侧的修改,加入绑定端口,根据自己的项目端口号来映射到我们的宿主机上,例如这里我项目端口是 1234,我想把他映射到宿主机的 4444 端口就可以这样配置,配置完成之后点确定。

image-20230502143315052

下面我们需要添加执行前打包的操作,点击加号,添加 maven 目标,命令行输入 package 应用即可。

image-20230502143458445

完成后我们直接右键 Docker File,运行 DockerFile,他会开始编译打包运行,容器启动成功。

image-20230502144625028

这里我使用 PostMan 测试访问一下 Docker 上的项目,成功打印日志,到此容器部署到 Docker 完成

image-20230502145840129

项目持续更新部署

如果我们的代码更新了或者修改了一些东西,我们直接修改运行配置,可以更改一下版本后,然后重新 run 一遍 DockerFile 就可完成更新发布的操作

image-20230502145004413

以上就是 Idea 搭配 Docker 快速部署项目的教程