Windows Docker 部署 Spring Boot 项目
本文首发于我的个人博客,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 包封装进去。具体有两种方式:
- 创建 Dockerfile,手动执行 build 和 run。
- 使用 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。

需要配置的参数如下:

- Name,创建的配置文件名称。
- Image tag,创建镜像的 repository:tags。
- Container name,创建容器名。
- Bind posts,端口映射,这里将默认的 8080 端口映射到外网的 8888 端口。
- 最后 IDEA 会将参数拼接成 docker build & run 的命令。
点击 Run。镜像就会被自动 build,并且在容器中运行了。

选择我们刚刚部署的那个容器的 Log tab,就能看到 Spring Boot 启动的日志了,是不是有一种似曾相识的感觉
Windows Docker 部署 Spring Boot 项目的更多相关文章
- 使用Docker部署Spring boot项目
Docker是一个使用广泛的Linux容器管理工具包,它允许用户创建镜像,并将其容器实例化.通过本指南,我们可以学习到如何使用Docker部署Spring Boot项目. 先决条件 开发之前,你必须具 ...
- 使用 Docker 部署 Spring Boot 项目
Docker 介绍 Docker 属于 Linux 容器的一种封装,提供简单易用的容器使用接口.它是目前最流行的 Linux 容器解决方案. Docker 将应用程序与该程序的依赖,打包在一个文件里面 ...
- 使用 Docker 部署 Spring Boot 项目,带劲!!
上一篇:年轻人的第一个 Docker 应用 Docker 一次构建.处处运行及快速启停的特性,在微服务架构中有着举足轻重的地位,具体的概念性的东西就不介绍了,不懂的点击这里阅读 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 ...
随机推荐
- 啥?修改下 URL 就能高速下载网盘资源和百度文库?
下载百度资源和百度文库资料是大家常有的需求,不过多数方法都需要下载些软件什么的才能实现. 今天给大家介绍一个简单方法,修改下 URL 就能直接在浏览器中高速下载网盘资源和百度文库资料. [下载百度网盘 ...
- python webdriver 常用元素操作
1.新建实例 xx_driver = os.path.abspath(r"路径") os.environ["webdriver.xx.driver"] = xx ...
- Python数据分析之numpy数组全解析
1 什么是numpy numpy是一个在Python中做科学计算的基础库,重在数值计算,也是大部分Python科学计算库的基础库,多用于大型.多维数据上执行数值计算. 在NumPy 中,最重要的对象是 ...
- 第一个基于ArcGIS的Android应用
使用Android Studio创建第一个工程 打开Android Studio,新建工程.在Application name处填写项目名称,company domain是公司地址,将来作为包名,点 ...
- 如何使用 Skywalking Agent ?
如何使用 Skywalking Agent ? 如果你还不知道 Skywalking agent 是什么,请点击这里查看 Probe 或者这里查看快速了解agent,由于我这边大部分都是 JAVA 服 ...
- unity_小功能实现(客户端相互通信功能)
服务器端:在VS中新建项目,用于服务器的搭建 using System;using System.Collections.Generic; using System.Net.Sockets;u ...
- 浏览 GitHub 太卡了?教你两招!
老实说,GitHub 在国内的使用体验并不算太好,这其中最大的原因就是网络了. GitHub 访问起来比较卡,这个看起来貌似无解.国内的 gitee 网速倒是可以,但是无法代替 GitHub,个人感觉 ...
- Struts2:request & response
整理自网上: 1. 获取Request和Response的方法 1.1. ServletActionContext的静态方法 HttpServletRequest request = ...
- 微信小程序获取手机号码看这篇文章就够了
前言 微信小程序获取手机号码,从官方文档到其他博主的文档 零零散散的 (我就是这样看过来 没有一篇满意的 也许是我搜索姿势不对) 依旧是前人栽树 后人乘凉 系列.保证看完 就可以实现获取手机号码功能 ...
- 牛客暑假多校第一场 J Different Integers
题意:给你一个数组, q次询问, 每次询问都会有1个[l, r] 求 区间[1,l] 和 [r, n] 中 数字的种类是多少. 解法1, 莫队暴力: 代码: #include<bits/stdc ...