IDEA 集成 Docker 插件实现一键远程部署 SpringBoot 应用,无需三方依赖,开源微服务全栈有来商城线上部署方式_spring 本篇通过 IDEA 集成 Docker插件和通过 Dockerfile 的方式一键完成 SpringBoot应用的打包 → 构建镜像 → 容器创建和启动 的整套应用部署的流程,没有第三方 maven 依赖,十分简单便捷,值得一试。


一. 前言

最近有些童鞋对开源微服务商城项目 ​​youlai-mall​​​ 如何部署到线上环境以及项目中 的​​Dockerfile​​ 文件有疑问,所以写了这篇文章做个答疑以及演示完整的微服务项目发布到线上的流程,当然除此之外也为后续的项目更新计划做一些基础工作。

其实之前是写了 关于 IDEA 整合Docker插件和 ​​docker-maven-plugin​​​ 依赖构建镜像实现一键部署 ​​SpringBoot​​ 应用。


Docker实战 | 第三篇:IDEA集成 Docker 插件实现一键自动打包部署微服务项目


但是上篇文章的“ 一键部署”是有些夸大的,实践过的童鞋应该清楚,在 IDEA 集成 Docker 和项目添加 ​​docker-maven-plugin​​​ 依赖基础上,部署​​SpringBoot​​ 应用还需要经过 镜像构建 → 容器配置 → 手动启动容器 这些步骤,所以离一键部署相差甚远。

本篇提供的方案中 IDEA 只需安装 ​​Docker​​​ 插件,项目不用添加 ​​docker-maven-plugin​​​ 和​​dockerfile-maven-plugin​​ 依赖,且在完成首次的相关配置之后,后续只需点击一下 IDEA 的 Run 按钮 ▶️就可以将应用部署远程服务器并且启动,让部署线上应用就是随手点一下的事情。

二. Docker 配置

IDEA 需要连接 Docker 服务器来完成推送镜像和一些交互,需要 Docker 开启远程监听,如果是专网还好,但是公网下开启监听时一定要启用 TLS 协议进行安全加密传输,否则被黑基本上是早晚的事情。

下面是轻身经历得到的教训总结,有想找点乐子的童鞋可以看一下:


Docker实战 | 第五篇:Docker启用TLS加密解决暴露2375端口引发的安全漏洞,被黑掉三台云主机的教训总结


1. Docker 开启远程访问

访问 Docker 配置文件 docker.service

vim /usr/lib/systemd/system/docker.service

在 ​​ExecStart=/usr/bin/dockerd​​​ 追加 ​​-H tcp://0.0.0.0:2375 -H unix://var/run/docker.sock​

IDEA 集成 Docker 插件实现一键远程部署 SpringBoot 应用,无需三方依赖,开源微服务全栈有来商城线上部署方式_docker_02

重启 Docker 让配置生效

systemctl daemon-reload
systemctl restart docker

查看 Docker 远程访问服务是否开启

# 查看服务端口监听是否开启
lsof -i:2375
# CURL测试是否生效
curl http://127.0.0.1:2375/info

2. Docker 启用 TLS


传输层安全性协议(英语:Transport Layer Security,​​缩写​​作TLS),及其前身安全套接层(Secure Sockets Layer,缩写作SSL)是一种​​安全协议​​​,目的是为​​互联网​​​通信提供安全及数据​​完整性​​保障。



  1. 设置主机名
    输入命令 ​​hostname​​ 查看服务器主机名,如果存在则忽略,没有则需设置主机名
    ​vim /etc/hostname ​IDEA 集成 Docker 插件实现一键远程部署 SpringBoot 应用,无需三方依赖,开源微服务全栈有来商城线上部署方式_ide_03
    修改配置之后重启生效
  2. TLS 证书生成
    创建 TLS 证书存放目录
    ​mkdir -p /etc/docker/cert ​​创建 TLS 证书生成脚本
    ​vim /etc/docker/create_tls_cert.sh ​​添加内容
    ​#!/bin/bash set -e if [ -z $1 ];then echo "请输入 Docker 服务器主机名" exit 0 fi HOST=$1 # 生成证书的目录 /etc/docker/cert cd /etc/docker/cert openssl genrsa -aes256 -out ca-key.pem 4096 openssl req -new -x509 -days 365 -key ca-key.pem -sha256 -out ca.pem openssl genrsa -out server-key.pem 4096 openssl req -subj "/CN=$HOST" -sha256 -new -key server-key.pem -out server.csr # 配置白名单,推荐配置0.0.0.0,允许所有IP连接但只有证书才可以连接成功 echo subjectAltName = DNS:$HOST,IP:0.0.0.0 > extfile.cnf openssl x509 -req -days 365 -sha256 -in server.csr -CA ca.pem -CAkey ca-key.pem -CAcreateserial -out server-cert.pem -extfile extfile.cnf openssl genrsa -out key.pem 4096 openssl req -subj '/CN=client' -new -key key.pem -out client.csr echo extendedKeyUsage = clientAuth > extfile.cnf openssl x509 -req -days 365 -sha256 -in client.csr -CA ca.pem -CAkey ca-key.pem -CAcreateserial -out cert.pem -extfile extfile.cnf rm -v client.csr server.csr chmod -v 0400 ca-key.pem key.pem server-key.pem chmod -v 0444 ca.pem server-cert.pem cert.pem ​​执行 ​​create_tls_cert.sh​​ 证书生成脚本
    ​# f.youlai.tech 为 Docker 服务器主机名 sh /etc/docker/create_tls_cert.sh f.youlai.tech ​IDEA 集成 Docker 插件实现一键远程部署 SpringBoot 应用,无需三方依赖,开源微服务全栈有来商城线上部署方式_Docker_04
    红色框部分需要设置证书密码,可以为了方便,填写一致的就行。
    进入目录 /etc/docker/cert 把本地需要的3个证书文件 ca.pem 、cert.pem、key.pem 下载到本地文件夹下 , 我的文件夹是 ​​D:\项目资料\Docker证书\f.youlai.tech​IDEA 集成 Docker 插件实现一键远程部署 SpringBoot 应用,无需三方依赖,开源微服务全栈有来商城线上部署方式_spring_05
  3. 配置 Docker 启用 TLS监听
    访问 Docker 配置文件 docker.service
    ​vim /usr/lib/systemd/system/docker.service ​​在 ExecStart=/usr/bin/dockerd 修改和追加内容如下
    ​ExecStart=/usr/bin/dockerd \ --tlsverify --tlscacert=/etc/docker/cert/ca.pem \ --tlscert=/etc/docker/cert/server-cert.pem \ --tlskey=/etc/docker/cert/server-key.pem \ -H tcp://0.0.0.0:2376 -H unix://var/run/docker.sock ​IDEA 集成 Docker 插件实现一键远程部署 SpringBoot 应用,无需三方依赖,开源微服务全栈有来商城线上部署方式_ide_06
    重载配置和重启 Docker 生效
    ​systemctl daemon-reload systemctl restart docker ​​查看监听是否开启
    ​lsof -i:2376 ​IDEA 集成 Docker 插件实现一键远程部署 SpringBoot 应用,无需三方依赖,开源微服务全栈有来商城线上部署方式_ide_07

三. IDEA 配置

1. 安装 Docker 插件

IDEA 集成 Docker 插件实现一键远程部署 SpringBoot 应用,无需三方依赖,开源微服务全栈有来商城线上部署方式_Docker_08

安装后重启 IDEA 让插件生效

2. Docker 服务器连接配置

打开 ​​File​​​ → ​​Setting​​​ → ​​Build,Execution,Deployment​​​ → ​​Docker​​​ → ​​+​

IDEA 集成 Docker 插件实现一键远程部署 SpringBoot 应用,无需三方依赖,开源微服务全栈有来商城线上部署方式_ide_09


  • Engine API URL : Docker 服务器远程监听地址
  • Certificates folder : 上文下载 Docker 的证书的文件件

四. SpringBoot 应用部署

1. Dockerfile 文件

在项目根目录添加 ​​Dockerfile​​ 文件

IDEA 集成 Docker 插件实现一键远程部署 SpringBoot 应用,无需三方依赖,开源微服务全栈有来商城线上部署方式_docker_10

完整内容如下:

# 基础镜像
FROM openjdk:8-jre

# 维护者信息
MAINTAINER youlai <youlaitech@163.com>

# 设置容器时区为当前时区
RUN /bin/cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime \&& echo 'Asia/Shanghai' >/etc/timezone

# /tmp 目录作为容器数据卷目录,SpringBoot内嵌Tomcat容器默认使用/tmp作为工作目录,任何向 /tmp 中写入的信息不会记录进容器存储层
# 在宿主机的/var/lib/docker目录下创建一个临时文件并把它链接到容器中的/tmp目录
VOLUME /tmp

# 复制主机文件至镜像内,复制的目录需放置在 Dockerfile 文件同级目录下
ADD target/admin-boot.jar app.jar

# 容器启动执行命令
ENTRYPOINT ["java", "-Xmx128m", "-Djava.security.egd=file:/dev/./urandom", "-jar", "/app.jar"]

# 声明容器提供服务端口
EXPOSE 8800

2. pom.xml文件

添加 spring-boot-maven-plugin 依赖为​​SpringBoot​​​ 应用打包,指定 ​​finalName​​ 不带版本号,这样打包出的 jar 包名称就没有版本号。

<build>
<finalName>${project.artifactId}</finalName>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>

3. Run/Debug Configurations 配置

​Run/Debug Configurations​​ 运行/调试 配置

IDEA 集成 Docker 插件实现一键远程部署 SpringBoot 应用,无需三方依赖,开源微服务全栈有来商城线上部署方式_spring_11

​Dockerfile​​ 配置

IDEA 集成 Docker 插件实现一键远程部署 SpringBoot 应用,无需三方依赖,开源微服务全栈有来商城线上部署方式_docker_12

添加执行目标 ​​Maven Goal​

IDEA 集成 Docker 插件实现一键远程部署 SpringBoot 应用,无需三方依赖,开源微服务全栈有来商城线上部署方式_spring_13

​Command line​​​ 输入 ​​clean package -U -DskipTests​

IDEA 集成 Docker 插件实现一键远程部署 SpringBoot 应用,无需三方依赖,开源微服务全栈有来商城线上部署方式_Docker_14

点击 ​​OK​​ 保存配置,至此,已完成所有的配置,接下来就是一键部署。

4. SpringBoot应用一键构建部署

工具栏 ​​Run/Debug​​ 选择上文的 ​​Docker​​配置

IDEA 集成 Docker 插件实现一键远程部署 SpringBoot 应用,无需三方依赖,开源微服务全栈有来商城线上部署方式_spring_15

点击 ▶️开始执行

IDEA 集成 Docker 插件实现一键远程部署 SpringBoot 应用,无需三方依赖,开源微服务全栈有来商城线上部署方式_docker_16

稍等一会儿,就可以看到启动的容器

IDEA 集成 Docker 插件实现一键远程部署 SpringBoot 应用,无需三方依赖,开源微服务全栈有来商城线上部署方式_ide_17

​Nacos​​​ 注册中心可以看到​​youlai-admin​​服务在线

IDEA 集成 Docker 插件实现一键远程部署 SpringBoot 应用,无需三方依赖,开源微服务全栈有来商城线上部署方式_Docker_18

五. 总结

本篇通过 IDEA 集成 ​​Docker​​​ 插件和通过 ​​Dockerfile​​​的方式一键完成 SpringBoot应用的打包 → 构建镜像 → 容器创建和启动 的整套应用部署的流程,没有第三方 ​​maven​​​ 依赖,可以说非常的简单便捷,再不会对频繁的应用部署而感到头疼。当然写这篇文章的目的除了解释开源微服务商城 ​​youlai-mall​​​ 项目中的 ​​Dockerfile​​​ 作用和有来商城​微服务是如何部署到线上之外,还有就是为后续的 ​​ELK​​​ + ​​Filebeat​​实现日志收集和线上环境远程调试等等做好基础工作,具体的在后续文章说明。

附录:

1. 开源项目

项目名称

码云(Gitee)

Github

微服务后台

​youlai-mall​

​youlai-mall​

系统管理前端

​youlai-mall-admin​

​youlai-mall-admin​

微信小程序

​youlai-mall-weapp​

​youlai-mall-weapp​

2. 联系信息

微信交流群只能通过邀请方式进入,如果项目中遇到什么问题或者想进入交流群学习的朋友请添加开发人员后由其拉进群,备注“有来”即可。