zoukankan      html  css  js  c++  java
  • 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版:

  • 相关阅读:
    redis发布订阅
    redis学习笔记(面试题)
    redis安全 (error) NOAUTH Authentication required
    HDU3001 Travelling —— 状压DP(三进制)
    POJ3616 Milking Time —— DP
    POJ3186 Treats for the Cows —— DP
    HDU1074 Doing Homework —— 状压DP
    POJ1661 Help Jimmy —— DP
    HDU1260 Tickets —— DP
    HDU1176 免费馅饼 —— DP
  • 原文地址:https://www.cnblogs.com/6b7b5fc3/p/13670497.html
Copyright © 2011-2022 走看看