• Spring Boot demo系列(五):Docker部署


    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版:

  • 相关阅读:
    unittest(生成 HTMLTestRunner 模块)
    unittest(discover 批量执行用例)
    SAP SD 基础知识之定价配置(Pricing Configuration)
    SAP SD基础知识之凭证流(Document Flow)
    SAP SD 基础知识之行项目类别(Item Category)
    pjd-fstest The test suite checks POSIX compliance
    网络上一些有趣的项目和文章
    博士生传给硕士生的经验
    man -k, man -f : nothing appropriate ; 更新 whatis 数据库
    supervisor 工具使用
  • 原文地址:https://www.cnblogs.com/6b7b5fc3/p/13670497.html
Copyright © 2020-2023  润新知