使用 Docker 部署 Spring Boot 项目,带劲!!
Docker 一次构建、处处运行及快速启停的特性,在微服务架构中有着举足轻重的地位,具体的概念性的东西就不介绍了,不懂的点击这里阅读 Docker 基础教程。
本篇栈长主要介绍下如何通过 IntelliJ IDEA、Maven 来操作 Docker 部署 Spring Boot 项目,这也是我们 Java 程序员最关心的开发实战。
一、Maven 插件配置
首先在 Maven pom.xml 配置文件中加入 Docker 的 Maven 插件。
我看网上很多人还在用 docker-maven-plugin
插件:
<properties>
<docker.image.prefix>docker</docker.image.prefix>
</properties>
<build>
<plugins>
<plugin>
<groupId>com.spotify</groupId>
<artifactId>docker-maven-plugin</artifactId>
<version>1.2.2</version>
<configuration>
<imageName>${docker.image.prefix}/${project.artifactId}</imageName>
<dockerDirectory>src/main/docker</dockerDirectory>
<resources>
<resource>
<targetPath>/</targetPath>
<directory>${project.build.directory}</directory>
<include>${project.build.finalName}.jar</include>
</resource>
</resources>
</configuration>
</plugin>
</plugins>
</build>
你们还在用这个插件吗?
栈长从官方仓库看到,这个插件官方已经不维护了:
所以这个插件我就不推荐大家使用了,而是推荐官方的另外一个插件:dockerfile-maven。
<build>
<plugins>
<plugin>
<groupId>com.spotify</groupId>
<artifactId>dockerfile-maven-plugin</artifactId>
<version>1.4.13</version>
<executions>
<execution>
<id>default</id>
<goals>
<goal>build</goal>
<goal>push</goal>
</goals>
</execution>
</executions>
<configuration>
<repository>javastack/${project.name}</repository>
<tag>${project.version}</tag>
<buildArgs>
<JAR_FILE>${project.build.finalName}.jar</JAR_FILE>
</buildArgs>
<dockerfile>src/main/docker/Dockerfile</dockerfile>
</configuration>
</plugin>
</plugins>
</build>
这个插件使用简单,功能更强大。
新插件地址:
最新版插件的环境要求:
JDK 7+
Apache Maven 3.5.2+
这个插件的牛逼之处在于:
1、从插件名称就可以知道,这个插件是基于 Dockerfile 文件进行构建 Docker 项目的,专注 Dockerfile 文件,所以需要一个 Dockerfile 文件,Dockerfile 也是构建 Docker 项目的基石。
2、把 Docker 的构建过程集成到了 Maven 的构建过程之中,如果使用默认的配置,使用 mvn package
命令就能打包成一个 Docker 镜像,使用 mvn deploy
命令就能推送到 Docker 仓库。
3、使我们的构建目标更明确,如我们先使用 mvn dockerfile:build
然后再 mvn dockerfile:tag
,然后再 mvn dockerfile:push
,也可以满足同时构建再推送的场景,如: mvn dockerfile:build dockerfile:push
,这都没问题的。
4、与 Maven 构建集成,我们可以在一个项目中依赖另外一个项目的 Docker 镜像,Maven 将以正确的顺序构建项目。当我们运行涉及多个服务的集成测试用例时,这很有用的。
二、Docker 配置
Dockerfile 是创建 Docker 镜像的基本配置文件,本身是一个文本文件。
插件默认加载位置为项目所在根目录,因为我在上面的 Maven 插件配置中指明了路径。所以,在 src/main/docker/ 目录下添加一个 Dockerfile 文件:
# 添加 Java 8 镜像来源
FROM java:8
# 添加参数
ARG JAR_FILE
# 添加 Spring Boot 包
ADD target/${JAR_FILE} app.jar
# 执行启动命令
ENTRYPOINT ["java","-Djava.security.egd=file:/dev/./urandom","-jar","/app.jar"]
值得说一下的是,上面的 JAR_FILE
参数就是从 Docker Maven 插件中指定的构建参数,这也是这个插件的强大之处,可以翻到文章上面去看一下。
具体的 Dockerfile
文件细节比较多,这里就不展开详细介绍了,后面我再开一篇单独介绍,关注公众号Java技术栈第一时间推送。
三、添加测试接口
添加一个测试接口,以便后面部署测试。
package cn.javastack.springboot.docker;
import org.springframework.boot.Banner;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.boot.builder.SpringApplicationBuilder;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;
/**
* 微信公众号:Java技术栈
*/
@RestController
@SpringBootApplication
public class DockerApplication {
public static void main(String[] args) {
SpringApplication.run(DockerApplication.class);
}
@GetMapping("/docker/hello")
public String helloDocker() {
return "hello docker";
}
}
Spring Boot 基础性的知识和搭建过程就不介绍了,不熟悉的可以关注公众号Java技术栈,在后台回复关键字 "boot" 阅读我之前写的系列教程。
所有 Spring Boot 教程实战源码在下面个仓库:
本篇所有实战源码到时也会全部同步到上面,大家 Star 一下吧!
四、构建 Docker 镜像
配置了 Maven 插件和 Dockerfile 文件后就可以开始构建 Docker 镜像了。
上面也说了,Docker 构建过程已经集成到了 Maven 的构建过程之中,那么可以直接使用 mvn package
就可以同时打包和构建 Docker 镜像了。
在 IDEA 中可以直接点击插件对应的命令运行:
插件会根据 Dockerfile 文件构建,文件中有多少条命令,就分为几个步骤构建,如果没问题就会构建成功。
五、IDEA 怎么操作 Docker?
一旦我们创建了 Dockerfile 文件,IDEA 就会自动识别并提示我们创建 Docker 连接,当然,我们也可以调出 Services 面板进行手动创建。
打开 IDEA 中的 Services 面板:
然后点击 Add service > Docker Connection 来添加一个 Docker 连接:
创建完后会自动连接上,点击展开会显示 Docker 本地所有镜像和容器:
如上图所示,就是我们刚构建的镜像。
六、创建并运行容器
右击上面的镜像,选择 "Create Container" 菜单来创建并运行一个容器。
填写相应的运行参数,再点击运行按钮,容器即开始运行。
然后在 Build Log 和 Log 面板中可以看到容器运行日志和应用程序运行日志:
项目在 Docker 中运行起来了,然后再访问下上面写的测试接口:
OK,到这里就部署并运行成功了。
七、总结
本文栈长使用 IntelliJ IDEA、Maven 用 Docker 部署了一个 Spring Boot 项目,虽然只是一个简单的示例,但同时为了配合写文章,全程硬是肝了几个小时。
本文只是一个简单的示例,所以过程并不复杂,想要构建更加复杂的应用,我们需要学习 Dockerfile 文件的编写,这个下期再分享吧,关注公众号Java技术栈第一时间推送,不要走开。
如果只是运行一个 Spring Boot 应用确实没有必要用到 Docker,本文也是为了演示而上了 Docker。
但在实际工作中,Docker 就很有用了,Docker 一次将应用代码、JDK、环境变量、配置文件、以及其他配置信息都打包到一个镜像里面了,一次构建,处处运行,所以再也不用担心环境和配置问题了,开发测试运维都爽死。
好了,本文就到这里了,后续栈长还会带来更多 Docker 实用性的教程,比如 Docker 私库的搭建及其他实用的玩法等,关注公众号Java技术栈第一时间推送。
本文所有实战源码已上传到这个仓库:
觉得不错,在看、分享转发一下,写文章不易,需要你们的鼓励,感谢各位老铁们!
版权申明:本文系公众号 "Java技术栈" 原创,原创实属不易,转载、引用本文内容请注明出处,禁止抄袭、洗稿,请自重,尊重他人劳动成果和知识产权。
近期热文推荐:
1.Java 15 正式发布, 14 个新特性,刷新你的认知!!
2.终于靠开源项目弄到 IntelliJ IDEA 激活码了,真香!
3.我用 Java 8 写了一段逻辑,同事直呼看不懂,你试试看。。
觉得不错,别忘了随手点赞+转发哦!
使用 Docker 部署 Spring Boot 项目,带劲!!的更多相关文章
- 使用Docker部署Spring boot项目
Docker是一个使用广泛的Linux容器管理工具包,它允许用户创建镜像,并将其容器实例化.通过本指南,我们可以学习到如何使用Docker部署Spring Boot项目. 先决条件 开发之前,你必须具 ...
- Windows Docker 部署 Spring Boot 项目
目录 Docker Configuration Config IDEA Plugin Create Spring Boot Project Containerize It Use Dockerfile ...
- 使用 Docker 部署 Spring Boot 项目
Docker 介绍 Docker 属于 Linux 容器的一种封装,提供简单易用的容器使用接口.它是目前最流行的 Linux 容器解决方案. Docker 将应用程序与该程序的依赖,打包在一个文件里面 ...
- IDEA连接远程服务器Docker部署Spring Boot项目
开始前的准备工作 拥有一台云服务器,我的是腾讯云服务器(CentOS7) 腾讯云服务器安装Docker,我的版本是Docker 19.03.9,关于安装和配置镜像加速器可以查阅我的另一篇博文:http ...
- 【docker】docker部署spring boot项目在服务器上
IDE:idea 工具:docker spring boot:2.0.1 ======================================== 简单记录一下流程,以供参考: 第一步:首先得 ...
- docker部署spring boot项目在服务器上
IDE:idea 工具:docker spring boot:2.0.1 ======================================== 简单记录一下流程,以供参考: 第一步:首先得 ...
- Docker 部署Spring Boot 项目并连接mysql、redis容器(记录过程)
Spring Boot 项目配置 将写好的Spring Boot 项目通过maven 进行package打包获得可执行Jar 再src/main/docker(放哪都行)下编写创建Dockerfile ...
- docker 部署spring.boot项目【一】(引用外部配置文件)
上一篇随笔,nginx是启动运行在容器内,spring.boot的web项目是运行在宿主内,这一篇的目的,是把web项目也制作成镜像,然后在容器里启动. 文件目录结构如下: 主要文件结构说明:(1)b ...
- 如何用Docker部署Spring Boot项目
1.idea中安装docker插件: 2.新建DockerFile,内容如下. # 基础镜像使用java FROM java:8 # 作者 MAINTAINER vic <test@163.co ...
随机推荐
- collection v1.3.1升级全记录
collection v1.3.1升级全记录 项目地址: https://github.com/jianfengye/collection 欢迎star. collection 手册地址: http: ...
- MySQL开启日志记录执行过的SQL语句
当需要分析执行过的SQL语句来判断问题,可以通过打开查询日志功能,但是重启MySQL服务后需要重新配置. 查询日志查询功能: SHOW VARIABLES LIKE 'general%'; gener ...
- 第三章 MySQL的多实例
一.MySQL服务构成 1.MySQL程序结构 1.连接层 2.sql层 3.存储引擎层 2.MySQL逻辑结构 1.库 2.表:元数据+真实数据行 3.元数据:列+其它属性(行数+占用空间大小+权限 ...
- STM32入门系列-开发工具keil5安装
主要介绍如下三部分内容: keil5软件获取 keil5安装 安装STM32芯片包 软件获取 可以通过搜索引擎搜索关键字"KEIL5下载",找到其官方网站www.keil.com. ...
- Redis事务使用方法
Redis事务 Redis事务是一组命令的集合,也是Redis的最小执行单位之一.一个事务的所有命令,要么都执行,要么都不执行.Redis能保证事务执行期间不会有其他命令插入. 相关命令 命令 格式 ...
- Learn day10 锁
1.锁 # ### 锁 from multiprocessing import Lock,Process import json,time """ # 创建一把锁 loc ...
- requests库中的get()和post()方法
(一)get()方法 查看源码,如下: 1 def get(self, url, params, **kwargs): 2 r"""Sends a GET request ...
- SVG--D3--血缘关系树
最近的工作与可视化有关,有展示血缘关系树的需求 ,类似于这样: 碰巧搜到 D3(用于可视化的js库,作者吕之华),瞬间无法自拔,它的树状图功能基于SVG.js ,暴露的可操作入口也简洁恰当,能帮助你快 ...
- js 图片放大镜功能
原理:放置两张相同的图片,一张作为主图片(图片1),另一张作为用来裁剪并放大的图片(图片2) 鼠标移动时,计算鼠标在图片1的位置(距离图片1左上角的x,y距离),以此决定在图片2开始 ...
- 【SpringBoot】14. SpringBoot多环境配置
SpringBoot多环境配置 Spring Boot 1.5.19.RELEASE 假设项目中需要3个环境--开发.测试.生产 profile :代表的就是一个环境变量 语法结构:applicati ...