本文首发于我的个人博客,Windows Docker 部署 Spring Boot 项目 ,欢迎访问!

使用 Docker 部署一个简单的 Spring Boot 数据库项目。

最近容器化技术 hin 流行啊,所以开始折腾一下呗。试用了下,有的时候的确比虚拟机要方便。其实起初是要用 Redis,但是 Windows 安装不方便,于是就看了下 Docker,基本开箱即用,Docker Hub 上 pull 一个 Redis 官方镜像就可以了。刚好最近在学 Spring Cloud 微服务,也就尝试下 Docker 部署 Spring Boot 项目。

内容上,本文主要是对 Spring Boot 官方文档的一个补充,英语不错的可以直接浏览参考文献 6-7。

Docker 的基本概念和用法,这里就详细展开了,可以看参考文献 1-3。

Docker Configuration

Docker 一般是安装在 Linux 系统中的,但是目前 Windows 也能使用,下载安装后开箱即用。额外需要配置的是:

1.暴露 TCP 端口,可以在 IDEA 的 Docker 插件中连接使用。

2.替换官方的 Docker 仓库,使用阿里云镜像加速。在 Daemon 中可进行配置。

Config IDEA Plugin

Docker 本身是没有 GUI 界面的,所以所有的维护管理都必须使用命令行,比较麻烦,而 IDEA 给我们提供了一个简单的 Docker 插件,用于管理 Image 和 Container。

在设置中直接搜索 docker,添加一个 Docker Engine,配置 URL,稍等下面提示连接成功后,就可以了。如果连接失败了,可以检查下 TCP 的 2375 端口是否暴露了。

然后在底部,就能看到 Docker 的 tab了。里面的信息和命令行中看到的一致。基本的创建、删除、端口映射等操作都能在上面进行。

那么 Docker 相关的配置就完成了。

Create Spring Boot Project

这里用来演示的是一个 Spring Boot 的数据库项目。跟之前一样,配置一些基本内容就可以了。

<!--pom.xml-->
<groupId>com.example</groupId>
<artifactId>spring-docker</artifactId>
<version>1.0.0</version>
<name>spring-docker</name> <properties>
<java.version>1.8</java.version>
<skipTests>true</skipTests>
<druid-spring-boot-starter.version>1.1.10</druid-spring-boot-starter.version>
<dockerfile-maven-plugin.version>1.4.10</dockerfile-maven-plugin.version>
<docker.image.prefix>springboot</docker.image.prefix>
</properties> <dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency> <dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-jpa</artifactId>
</dependency>
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid-spring-boot-starter</artifactId>
<version>${druid-spring-boot-starter.version}</version>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<scope>runtime</scope>
</dependency>
</dependencies>
# application.yml
# 配置数据库信息
spring:
datasource:
type: com.alibaba.druid.pool.DruidDataSource
driver-class-name: com.mysql.cj.jdbc.Driver
url: jdbc:mysql://ip:port/test?serverTimezone=Hongkong&characterEncoding=utf-8&useSSL=false
username:
password:
// Spring Boot 启动类
@SpringBootApplication
@RestController
public class SpringDockerApplication { private final JdbcTemplate jdbcTemplate;
public SpringDockerApplication(JdbcTemplate jdbcTemplate) {
this.jdbcTemplate = jdbcTemplate;
} @GetMapping("/")
public Message index() {
RowMapper<Message> rowMapper= new BeanPropertyRowMapper<>(Message.class);
Message msg = jdbcTemplate.queryForObject("select * from message where k = ?", rowMapper,"msg");
return msg;
} public static void main(String[] args) {
SpringApplication.run(SpringDockerApplication.class, args);
}
}

本地访问,能成功运行就说明,Spring Boot 已经配置完成了。下面就是容器化的操作了。

Containerize It

容器化其实就是创建 Docker 镜像的过程,需要把 jar 包封装进去。具体有两种方式:

  1. 创建 Dockerfile,手动执行 build 和 run。
  2. 使用 dockerfile-maven-plugin 插件。

Use Dockerfile

首先,在 src/main 下创建 docker 文件夹,并创建一个 Dockerfile,内容如下:

FROM openjdk:8-jdk-alpine
VOLUME /tmp
COPY spring-docker-1.0.0.jar app.jar
ENTRYPOINT ["java","-Djava.security.egd=file:/dev/./urandom","-jar","/app.jar"]

假设大家对 Dockerfile 有一定的了解,解释一下上面的内容,

  • FROM...,表示使用 openjdk 作为基本镜像,标签为:8-jdk-alpine,意思 jdk 版本为 1.8,精简版。
  • VOLUME...,创建一个 VOLUME 指向 /tmp 的内容。因为这是 Spring Boot 应用程序默认为 Tomcat 创建工作目录的地方。效果是在 / var / lib / docker 下的主机上创建一个临时文件,并将其链接到 /tmp 下的容器。
  • COPY...,把项目中的 jar 文件复制过去,并重命名为 app.jar
  • ENTRYPOINT...,执行 java -jar 启动项目。java.security.egd=file:/dev/./urandom 的目的是为了缩短 Tomcat 启动的时间。

接下来,使用 maven 打包一个 jar,手动复制到 src/main/docker目录下。

配置 IDEA 来 build 和 run docker。

需要配置的参数如下:

  1. Name,创建的配置文件名称。
  2. Image tag,创建镜像的 repository:tags。
  3. Container name,创建容器名。
  4. Bind posts,端口映射,这里将默认的 8080 端口映射到外网的 8888 端口。
  5. 最后 IDEA 会将参数拼接成 docker build & run 的命令。

点击 Run。镜像就会被自动 build,并且在容器中运行了。

选择我们刚刚部署的那个容器的 Log tab,就能看到 Spring Boot 启动的日志了,是不是有一种似曾相识的感觉

Windows Docker 部署 Spring Boot 项目的更多相关文章

  1. 使用Docker部署Spring boot项目

    Docker是一个使用广泛的Linux容器管理工具包,它允许用户创建镜像,并将其容器实例化.通过本指南,我们可以学习到如何使用Docker部署Spring Boot项目. 先决条件 开发之前,你必须具 ...

  2. 使用 Docker 部署 Spring Boot 项目

    Docker 介绍 Docker 属于 Linux 容器的一种封装,提供简单易用的容器使用接口.它是目前最流行的 Linux 容器解决方案. Docker 将应用程序与该程序的依赖,打包在一个文件里面 ...

  3. 使用 Docker 部署 Spring Boot 项目,带劲!!

    上一篇:年轻人的第一个 Docker 应用 Docker 一次构建.处处运行及快速启停的特性,在微服务架构中有着举足轻重的地位,具体的概念性的东西就不介绍了,不懂的点击这里阅读 Docker 基础教程 ...

  4. IDEA连接远程服务器Docker部署Spring Boot项目

    开始前的准备工作 拥有一台云服务器,我的是腾讯云服务器(CentOS7) 腾讯云服务器安装Docker,我的版本是Docker 19.03.9,关于安装和配置镜像加速器可以查阅我的另一篇博文:http ...

  5. 【docker】docker部署spring boot项目在服务器上

    IDE:idea 工具:docker spring boot:2.0.1 ======================================== 简单记录一下流程,以供参考: 第一步:首先得 ...

  6. docker部署spring boot项目在服务器上

    IDE:idea 工具:docker spring boot:2.0.1 ======================================== 简单记录一下流程,以供参考: 第一步:首先得 ...

  7. Docker 部署Spring Boot 项目并连接mysql、redis容器(记录过程)

    Spring Boot 项目配置 将写好的Spring Boot 项目通过maven 进行package打包获得可执行Jar 再src/main/docker(放哪都行)下编写创建Dockerfile ...

  8. docker 部署spring.boot项目【一】(引用外部配置文件)

    上一篇随笔,nginx是启动运行在容器内,spring.boot的web项目是运行在宿主内,这一篇的目的,是把web项目也制作成镜像,然后在容器里启动. 文件目录结构如下: 主要文件结构说明:(1)b ...

  9. 如何用Docker部署Spring Boot项目

    1.idea中安装docker插件: 2.新建DockerFile,内容如下. # 基础镜像使用java FROM java:8 # 作者 MAINTAINER vic <test@163.co ...

随机推荐

  1. nginx之gzip压缩提升网站速度

    目录: 为啥使用gzip压缩 nginx使用gzip gzip的常用配置参数 nginx配置gzip 注意 为啥使用gzip压缩 开启nginx的gzip压缩,网页中的js,css等静态资源的大小会大 ...

  2. 用代码说话:synchronized关键字和多线程访问同步方法的7种情况

    synchronized关键字在多线程并发编程中一直是元老级角色的存在,是学习并发编程中必须面对的坎,也是走向Java高级开发的必经之路. 一.synchronized性质 synchronized是 ...

  3. 开发者工具conloseLog的使用

  4. 版本管理·玩转git(快速入门git)

    如果你用过Word文档写过文章,那么你一定会有这样的经历. 我觉得某一段或者某一句写得不够好,但是,删掉之后我可能会后悔把它删掉了,进而又想把删掉的段落找回来,这时,你想到了一个好办法,将每次的修改都 ...

  5. tesseract4.0:win10 +x64+vs2015 源码安装(ViewerDebugging)安装记录

    参考文章: https://blog.csdn.net/u013985291/article/details/78295789 https://blog.csdn.net/u013985291/art ...

  6. MyBatis源码下载安装教程

    一.下载(原文链接:http://www.studyshare.cn/software/details/1177/1 github下载:去下载 百度网盘下载:去下载 提取码:d1er 二.安装 1.检 ...

  7. ElasticSearch:组合查询或复合查询

    Bool查询 允许在单独的查询中组合任意数量的查询,指定的查询语句表名哪些部分是必须匹配(must).应该匹配(should)或不能匹配(must_not) Bool过滤器 和查询功能一致,但是同等情 ...

  8. switch语句(下)(转载)

    之前我们介绍了在switch语句中使用整数类型和枚举类型的情况.这一部分继续介绍使用string类型的情况.string类型是switch语句接受的唯一一种引用类型参数. 下面来看一段C#代码. 代码 ...

  9. 《阿里巴巴Java开发手册1.4.0》阅读总结与心得(二)

    (六)并发处理 12. [推荐] 在并发场景下, 通过双重检查锁(double-checked locking) 实现延迟初始化的优化问题隐患(可参考 The "Double-Checked ...

  10. 深入理解 Handler 消息机制

    记得很多年前的一次面试中,面试官问了这么一个问题,你在项目中一般如何实现线程切换? 他的本意应该是考察 RxJava 的使用,只是我的答案是 Handler,他也就没有再追问下去了.在早期 Andro ...