使用Docker插件实现Springboot项目远程部署

IntelliJ IDEA的Docker插件能帮助我们将当前工程制作成Docker镜像、运行在指定的远程机器上,是学习和开发阶段的好帮手。

一、开发环境准备

本次实战需要提前准备好以下内容:

  1. 开发环境操作系统:win10
  2. IntelliJ IDEA: 2018.2.4 (Ultimate Edition)
  3. JDK:1.8.0_181
  4. Maven:3.5.0
  5. Docker服务所在环境:CentOS Linux release 7.6.1810
  6. Docker:1.13.1, build b2f74b2/1.13.1

二、开启Docker的远程连接

在生产环境中安装Docker服务,同时开启Docker服务远程连接。开启Docker远程连接后,在开发和学习时都能带来便利,但请不要将此方式用在外部网络环境,以免带来安全问题,下图是官方警告:

使用Docker插件实现Springboot项目远程部署

1. 修改Docker配置文件:/lib/systemd/system/docker.service

原来的配置:

ExecStart=/usr/bin/dockerd -H fd:// --containerd=/run/containerd/containerd.sock

修改为:

ExecStart=/usr/bin/dockerd -H fd:// --containerd=/run/containerd/containerd.sock -H tcp://0.0.0.0:2375  -H unix:///var/run/docker.sock

修改完毕后保持退出。

2. 重新加载配置并重启Docker

[[email protected] ~]# systemctl daemon-reload && systemctl restart docker
# 设置防火墙开放端口并重启防火墙
[[email protected] ~]# firewall-cmd --zone=public --add-port=2375/tcp --permanent
success
[[email protected] ~]# systemctl restart firewalld

3. 验证设置是否生效

# 先在本地试试Docker服务是否正常启动
[[email protected] ~]# docker images
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
redis               latest              235592615444        3 weeks ago         104MB
tomcat              latest              2eb5a120304e        3 weeks ago         647MB
centos              7                   b5b4d78bc90c        2 months ago        203MB
hello-world         latest              bf756fb1ae65        6 months ago        13.3kB
# 在另一台装又Docker的机器上测试远程访问本机如下所示表示一切正常
[[email protected] ~]# docker -H tcp://192.168.95.2:2375 images
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
redis               latest              235592615444        3 weeks ago         104MB
tomcat              latest              2eb5a120304e        3 weeks ago         647MB
centos              7                   b5b4d78bc90c        2 months ago        203MB
hello-world         latest              bf756fb1ae65        6 months ago        13.3kB

三、安装Docker插件

在IDEA中打开“Plugins”界面(操作步骤“File->Settings…->Plugins”)搜索到Docker进行安装,如下图所示

使用Docker插件实现Springboot项目远程部署

安装完成后,需要重启IDEA,Docker插件安装完成。

四、在IDEA中连接远程Docker服务

在IDEA中打开“Docker”配置界面(操作步骤“File->Settings…->Build, Execution, Deployment->Docker”。在设置页面,按照下图的数字顺序创建一个Docker server并进行设置,其中"192.168.95.2"是Docker服务所在机器的IP地址,如果连接成功页面上会立即提示"Connection successful"。

使用Docker插件实现Springboot项目远程部署

至此,Docker插件准备完毕,远程连接也已经OK,可以尝试使用该插件了。

五、用Docker插件将应用构建成镜像并在远程Docker上运行

1. 配置Dockerfile文件

在Springboot项目pom.xml文件所在目录中,创建名为Dockerfile的文件,并配置以下内容:

# Docker image for springboot application
# VERSION 1.0.0
# Author: chqiuu

### 基础镜像,使用alpine操作系统,openjkd使用8u201
FROM openjdk:8u201-jdk-alpine3.9

#作者
MAINTAINER chqiuu <[email protected]>

#系统编码
ENV LANG=C.UTF-8 LC_ALL=C.UTF-8

#声明一个挂载点,容器内此路径会对应宿主机的某个文件夹
VOLUME /tmp

#应用构建成功后的jar文件被复制到镜像内,名字也改成了wxoa.jar
ADD target/wxoa-1.0.3.jar /usr/local/wxoa/wxoa.jar

#启动容器时的进程
ENTRYPOINT ["java","-jar","/usr/local/wxoa/wxoa.jar","--spring.profiles.active=prod"]

#暴露端口
EXPOSE 18090

2. 在项目中创建Docker配置项

如下图所示,点击“Edit Configuration…”打开配置项窗口:

使用Docker插件实现Springboot项目远程部署

创建一个Dockerfile配置,如下图所示

使用Docker插件实现Springboot项目远程部署

Dockerfile配置详情如下图所示,请按照图中的说明进行设置,确保每个红框中都会配置到,详细配置见Docker插件官网。最下面的那个"Run Maven Goal"点击后,会弹出一个小窗口 ,用来输入要执行的maven命令,这里输入clean package -U -DskipTests,表示每次在构建镜像之前,都会将当前工程清理掉并且重新编译构建:

使用Docker插件实现Springboot项目远程部署

3. 项目远程部署

设置完成后,点击下图红框中的绿色三角按钮,执行此配置,运行结果如下所示,项目构建成功后,在Docker上部署镜像成功,然后运行容器成功。

使用Docker插件实现Springboot项目远程部署

登录远程Docker,先后执行docker image和docker ps命令查看镜像和容器情况如下,可见一切正常:

[[email protected] ~]# docker images
REPOSITORY          TAG                   IMAGE ID            CREATED             SIZE
wxoa                latest                654468aa0c00        12 minutes ago      174MB
redis               latest                235592615444        3 weeks ago         104MB
tomcat              latest                2eb5a120304e        3 weeks ago         647MB
centos              7                     b5b4d78bc90c        2 months ago        203MB
hello-world         latest                bf756fb1ae65        6 months ago        13.3kB
openjdk             8u201-jdk-alpine3.9   3675b9f543c5        15 months ago       105MB
[[email protected] ~]# docker ps
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS                      NAMES
7c12bfac19c6        654468aa0c00        "java -jar /usr/loca…"   12 minutes ago      Up 12 minutes       0.0.0.0:18090->18090/tcp   wxoa

远程Docker所在服务器IP地址是192.168.95.2,因此在浏览器*问地址:http://192.168.95.2:18090/wxoa,得到响应如下图所示,可见应用在容器中正常运行。到此IEDA下的Docker插件配置和使用实战就完成了。

使用Docker插件实现Springboot项目远程部署