使用Docker插件实现Springboot项目远程部署
IntelliJ IDEA的Docker插件能帮助我们将当前工程制作成Docker镜像、运行在指定的远程机器上,是学习和开发阶段的好帮手。
一、开发环境准备
本次实战需要提前准备好以下内容:
- 开发环境操作系统:win10
- IntelliJ IDEA: 2018.2.4 (Ultimate Edition)
- JDK:1.8.0_181
- Maven:3.5.0
- Docker服务所在环境:CentOS Linux release 7.6.1810
- Docker:1.13.1, build b2f74b2/1.13.1
二、开启Docker的远程连接
在生产环境中安装Docker服务,同时开启Docker服务远程连接。开启Docker远程连接后,在开发和学习时都能带来便利,但请不要将此方式用在外部网络环境,以免带来安全问题,下图是官方警告:
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进行安装,如下图所示
安装完成后,需要重启IDEA,Docker插件安装完成。
四、在IDEA中连接远程Docker服务
在IDEA中打开“Docker”配置界面(操作步骤“File->Settings…->Build, Execution, Deployment->Docker”。在设置页面,按照下图的数字顺序创建一个Docker server并进行设置,其中"192.168.95.2"是Docker服务所在机器的IP地址,如果连接成功页面上会立即提示"Connection successful"。
至此,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…”打开配置项窗口:
创建一个Dockerfile配置,如下图所示
Dockerfile配置详情如下图所示,请按照图中的说明进行设置,确保每个红框中都会配置到,详细配置见Docker插件官网。最下面的那个"Run Maven Goal"点击后,会弹出一个小窗口 ,用来输入要执行的maven命令,这里输入clean package -U -DskipTests,表示每次在构建镜像之前,都会将当前工程清理掉并且重新编译构建:
3. 项目远程部署
设置完成后,点击下图红框中的绿色三角按钮,执行此配置,运行结果如下所示,项目构建成功后,在Docker上部署镜像成功,然后运行容器成功。
登录远程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插件配置和使用实战就完成了。