2021.2.24 更新

1 概述

本文讲述了如何使用Docker部署Spring Boot应用,首先介绍了Docker的安装过程,接着介绍了Docker的一些基础知识,最后讲述了Dockerfile的编写以及部署过程。

2 环境

  • 服务器:aarch64 CentOS8
  • JDKOpenJDK 11
  • Docker19.03.9

3 Docker安装

(已安装了Docker可以跳过该部分)

由于大部分的教程都是针对x86架构的服务器的,这里笔者的服务器为aarch64架构,因此记录一下Docker的安装过程。

Docker安装方法主要有两种,一种是通过官网的脚本自动安装,一种是通过yum手动安装。

3.1 自动安装

curl -fsSL https://get.docker.com | bash -s docker --mirror Aliyun

curl -sSL https://get.daocloud.io/docker | sh

默认安装的是最新版本的,x86的一般都可以,但如果出现像笔者这样的错误:

表明containerd.io的版本过低,使用yum install containerd.io安装的话:

可以看到是1.2.0版本,并不符合安装的最低要求,解决这种问题有两个办法:

  • 手动下载rpm包安装
  • 安装没那么新版本的Docker

因此采用手动安装的方法,这里选择的是第一种方法,手动下载rpm包进行安装。

3.2 手动安装

3.2.1 下载rpm

可以戳这里下载rpm包:

选择好版本即可,笔者选择的是:

  • containerd.io-1.2.13-3.2.el7.aarch64.rpm
  • docker-ce-19.03.9-3.el7.aarch64.rpm
  • docker-ce-cli-19.03.9-3.el7.aarch64.rpm

3.2.2 安装

上传到服务器后,安装即可:

yum install \
containerd.io-1.2.13-3.2.el7.aarch64.rpm \
docker-ce-19.03.9-3.el7.aarch64.rpm \
docker-ce-cli-19.03.9-3.el7.aarch64.rpm \
-y

3.3 测试

先开启服务:

systemctl start docker

版本查看:

docker version

运行Hello World

docker run hello-world

4 打包

新建一个Demo工程,启动类如下:

@SpringBootApplication
@RestController
public class DemoApplication { @GetMapping("/test")
public String test()
{
return "success";
} public static void main(String[] args) {
SpringApplication.run(DemoApplication.class, args);
}
}

接着使用Maven/Gradle打成JAR包:

5 Dockerfile

5.1 关于Dockerfile

Dockerfile是一个用于组合镜像的文本文件,Docker通过读取Dockerfile的内容自动生成镜像,一般分为四部分:

  • 基础镜像信息
  • 维护者信息
  • 镜像操作指令
  • 容器启动指令

更多的内容请参考其他博客或者官网,下面给出一个Demo

5.2 Dockerfile示例

Demo采用的Dockerfile如下:

FROM adoptopenjdk/openjdk11:aarch64-centos-jdk-11.0.8_10

MAINTAINER XXXXX <XXX@XXX.com>

VOLUME /tmp

EXPOSE 8080

ADD demo.jar demo.jar

ENTRYPOINT ["java","-jar","demo.jar"]

下面逐行进行详细说明。

5.2.1 指定基础镜像

FROM adoptopenjdk/openjdk11:aarch64-centos-jdk-11.0.8_10

该命令指定基础镜像,adoptaarch64架构的JDK11,注意如果服务器架构为x86需要对应修改,具体可以戳这里查看:

5.2.2 维护者

MAINTAINER XXXXX <XXX@XXX.com>

该命令指定了维护者的信息,可以只写名字或者只写邮箱,组合的话需要加上<>

5.2.3 持久化目录

VOLUME /tmp

该命令指定了持久化目录,准确来说,volume的意思,这是指定的位置,一般来说如果需要数据持久化则需要数据卷。

5.2.4 暴露端口

EXPOSE 8080

该命令暴露的是8080端口,因为Spring Boot应用默认运行在8080上,如果修改了application.yaml或者application.properties请对应修改端口。

5.2.5 添加命令

ADD demo.jar demo.jar

将本地文件添加到容器中,tar类型文件会自动解压,这里是将demo.jar添加

5.2.6 运行容器

ENTRYPOINT ["java","-jar","demo.jar"]

该命令用于配置容器的运行命令。

6 制作镜像

6.1 基本操作

先说一下容器的基本操作:

  • docker run:创建一个新容器并运行
  • docker start/stop/restart:启动/停止/重启容器
  • docker rm:删除容器
  • docker create:创建容器但不启动
  • docker ps:列出容器

镜像基本操作:

  • docker build:创建镜像
  • docker rmi:删除镜像
  • docker images:列出镜像

这里简单说一下镜像和容器的区别:

  • 镜像相当于一个模板,可以从一个镜像创建出多个容器
  • 用面向对象的思想比如,就是,镜像相当于一个类,而容器相当于一个类实例,也就是对象

知道了一些基础命令后就可以来制作镜像了。

6.2 创建镜像

上传Dockerfile以及JAR包,新建一个目录把JAR以及Dockerfile放在同一个文件夹下,并进入该文件夹,接着创建镜像:

build build -t demo .

创建完成后可以查看镜像:

docker images

6.3 运行

docker run -d -p 8888:8080 demo

该命令表示从镜像demo创建一个容器并运行,将8080端口映射到8888端口上,主要防火墙需要开启8888端口,服务器记得配置安全组。

6.4 测试

直接输入ip:端口/test即可访问:

7 源码

Java版:

Kotlin版:

Spring Boot demo系列(五):Docker部署的更多相关文章

  1. Spring Boot demo系列(二):简单三层架构Web应用

    2021.2.24 更新 1 概述 这是Spring Boot的第二个Demo,一个只有三层架构的极简Web应用,持久层使用的是MyBatis. 2 架构 一个最简单的Spring Boot Web应 ...

  2. Spring Boot demo系列(九):Jasypt

    2021.2.24 更新 1 概述 Jasypt是一个加密库,Github上有一个集成了Jasypt的Spring Boot库,叫jasypt-spring-boot,本文演示了如何使用该库对配置文件 ...

  3. Spring Boot demo系列(六):HTTPS

    2021.2.24 更新 1 概述 本文演示了如何给Spring Boot应用加上HTTPS的过程. 2 证书 虽然证书能自己生成,使用JDK自带的keytool即可,但是生产环境是不可能使用自己生成 ...

  4. Spring Boot demo系列(十):Redis缓存

    1 概述 本文演示了如何在Spring Boot中将Redis作为缓存使用,具体的内容包括: 环境搭建 项目搭建 测试 2 环境 Redis MySQL MyBatis Plus 3 Redis安装 ...

  5. Spring Boot demo系列(四):Spring Web+Validation

    2021.2.24 更新 1 概述 本文主要讲述了如何使用Hibernate Validator以及@Valid/@Validate注解. 2 校验 对于一个普通的Spring Boot应用,经常可以 ...

  6. Spring Boot demo系列(一):Hello World

    2021.2.24 更新 1 新建工程 打开IDEA选择新建工程并选择Spring Initializer: 可以在Project JDK处选择JDK版本,下一步是选择包名,语言,构建工具以及打包工具 ...

  7. Spring Boot demo系列(三):Spring Web+MyBatis Plus

    2021.2.24 更新 1 概述 Spring Web+MyBatis Plus的一个Demo,内容和上一篇类似,因此重点放在MyBatis Plus这里. 2 dao层 MyBatis Plus相 ...

  8. Spring Boot demo系列(八):Swagger

    2021.2.24 更新 1 概述 Swagger主要用于生成API文档,本文演示了如何使用目前最新的OpenAPI3以及Swagger来进行接口文档的生成. 2 依赖 <dependency& ...

  9. Spring Boot干货系列:(五)开发Web应用JSP篇

    Spring Boot干货系列:(五)开发Web应用JSP篇 原创 2017-04-05 嘟嘟MD 嘟爷java超神学堂 前言 上一篇介绍了Spring Boot中使用Thymeleaf模板引擎,今天 ...

随机推荐

  1. 基于SaaS平台的iHRM项目的前端项目介绍

    1.下载安装node.js 访问https://nodejs.org/en/,然后下载安装即可 2. 查看是否安装成功 打开cmd命令行,输入node -v 如果出现对应的版本号,即为安装成功 3.从 ...

  2. 后端程序员之路 8、一种内存kv数据库的实现

    键值(Key-Value)存储数据库,这是一种NoSQL(非关系型数据库)模型,其数据按照键值对的形式进行组织.索引和存储.KV存储非常适合不涉及过多数据关系业务关系的业务数据,同时能有效减少读写磁盘 ...

  3. springboot全局属性

    ```properties # =================================================================== # COMMON SPRING ...

  4. c++指针类型的函数

    下面随笔将讲述c++指针类型的函数. 原创链接:https://www.cnblogs.com/iFrank/p/14444379.html 指针类型的函数 若函数的返回值是指针,该函数就是指针类型的 ...

  5. 167. 两数之和 II - 输入有序数组 + 哈希表 + 双指针

    167. 两数之和 II - 输入有序数组 LeetCode_167 题目描述 方法一:暴力法(使用哈希表) class Solution { public int[] twoSum(int[] nu ...

  6. a标签不能继承父级的颜色

    <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title> ...

  7. java将一个list转换成一个String,中间用分隔符隔开

    List sn=[123,1231,1231,231] sn.toString();//[123,1231,1231,231] sn.join(',').toString();//123,1231,1 ...

  8. C++高精度计算(大整数类)

    Java和Pathon可以不用往下看了 C++的基本数据类型中,范围最大的数据类型不同编译器不同,但是最大的整数范围只有[-2^63-2^63-1](对应8个字节所对应的二进制数大小).但是对于某些需 ...

  9. idea配置struts2.5环境

    struts2不是struts1的下一代产品,是在struts1和WebWork技术的基础上进行合并后的全新框架,虽然两个名字相似,但是设计思想却有很大的不同. 使用本地的l ib 或者downloa ...

  10. P2261 [CQOI2007]余数求和 【整除分块】

    一.题面 P2261 [CQOI2007]余数求和 二.分析 参考文章:click here 对于整除分块,最重要的是弄清楚怎样求的分得的每个块的范围. 假设$ n = 10 ,k = 5 $ $$  ...