2021.2.24 更新
1 概述
本文讲述了如何使用Docker
部署Spring Boot
应用,首先介绍了Docker
的安装过程,接着介绍了Docker
的一些基础知识,最后讲述了Dockerfile
的编写以及部署过程。
2 环境
- 服务器:
aarch64 CentOS8
JDK
:OpenJDK 11
Docker
:19.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
该命令指定基础镜像,adopt
的aarch64
架构的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
版: