当前位置: 首页 > news >正文

Dockerfile构建Springboot镜像

Dockerfile构建Springboot镜像

文章目录

  • Dockerfile构建Springboot镜像
    • 简介
    • 实例演示
      • 前期准备
        • Docker环境
        • Springboot项目
        • Dockerfile文件
      • Windows
        • 要求
        • 构建镜像
        • 启动测试
      • Linux
        • 要求
        • 构建镜像
        • 启动测试

简介

容器技术大流行的时代,也是docker大流行的时代。

此文章以一个简单的实例为基础,帮助大家学习和了解:如何使用Dockerfile指令构建一个Springboot的Java项目镜像。

提示:实例非常简单,旨在帮助大家了解基础知识,本文的知识在实际工作中肯定是不够用的,还需要自行根据实际情况去学习,感谢您的阅读。

实例演示

  • 具体操作介绍了WindowsLinux两种方式。

前期准备

Docker环境

  • Windows请安装Docker Desktop:https://docs.docker.com/desktop/install/windows-install/

  • Linux请安装Docker:https://docs.docker.com/desktop/install/linux-install/

Springboot项目

  • 源码:learn/java/docker-springboot at main · DingDangDog/learn (github.com)

  • Jar包下载地址:docker-springboot-1.0.jar.zip

  • Controller代码示例:

package io.github.dingdangdog.controller;
import io.github.dingdangdog.utils.FileUtilOm;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
/*** say hello** @author DingDangDog* @since 2022/10/4 11:13*/
@RestController
@RequestMapping("/say")
public class SayController {@GetMapping("/hello")public String hello(String name) {System.out.println(name);// 保存文件FileUtilOm.saveFile("/tmp/", name, name);return "Hello " + name + " !";}
}

Dockerfile文件

  • 文件名必须为Dockerfile,无拓展名!!!请放在jar包同级目录下。
# 基础镜像
FROM openjdk:8-jdk
# 作者声明,原为MAINTAINER,变更为LABEL
# MAINTAINER DingDangDog
LABEL author="DingDangDog"
# 容器卷设置
VOLUME /tmp
# 向基础镜像内添加文件,并重命名为`docker_boot.jar`
add docker-springboot-1.0.jar docker_boot.jar
# 执行前置脚本。据说是修改文件时间?不太明白具体作用,望有大佬指点迷津!
RUN bash -c 'touch /docker_boot.jar'
# 最终执行脚本
ENTRYPOINT ["java", "-jar", "/docker_boot.jar"]
# 暴露端口
EXPOSE 10240

指令解析请参考文章:Dockerfile基础一文通

Windows

要求

  1. 前期准备

  2. Windows可以正常启动Docker服务:

如下图,运行状态绿色为正在运行
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-kYndCTFA-1670767109761)(https://github.com/DingDangDog/ddd-document/blob/main/docker/images/image-20221004122548749.png?raw=true)]

构建镜像

  • 在jar包所在文件夹下打开cmd命令行窗口,运行构建命令:

    docker build -t docker_boot:1.0 .

    命令解析:

    • docker build:构建镜像
    • -t docker_boot:1.0-t=--tag,指定镜像名称为docker_boot,版本为1.0
    • . :指定Dockerfile文件在当前文件夹下
  • 构建成功日志如下:

    [+] Building 76.3s (9/9) FINISHED=> [internal] load build definition from Dockerfile                                                               0.0s=> => transferring dockerfile: 254B                                                                               0.0s=> [internal] load .dockerignore                                                                                  0.0s=> => transferring context: 2B                                                                                    0.0s=> [internal] load metadata for docker.io/library/openjdk:8-jdk                                                   4.6s=> [auth] library/openjdk:pull token for registry-1.docker.io                                                     0.0s=> [internal] load build context                                                                                  0.1s=> => transferring context: 19.65MB                                                                               0.1s=> [1/3] FROM docker.io/library/openjdk:8-jdk@sha256:86e863cc57215cfb181bd319736d0baf625fe8f150577f9eb58bd937f5  70.8s=> => resolve docker.io/library/openjdk:8-jdk@sha256:86e863cc57215cfb181bd319736d0baf625fe8f150577f9eb58bd937f54  0.0s=> => sha256:86e863cc57215cfb181bd319736d0baf625fe8f150577f9eb58bd937f5452cb8 1.04kB / 1.04kB                     0.0s=> => sha256:3af2ac94130765b73fc8f1b42ffc04f77996ed8210c297fcfa28ca880ff0a217 1.79kB / 1.79kB                     0.0s=> => sha256:001c52e26ad57e3b25b439ee0052f6692e5c0f2d5d982a00a8819ace5e521452 55.00MB / 55.00MB                  24.0s=> => sha256:2068746827ec1b043b571e4788693eab7e9b2a95301176512791f8c317a2816a 10.88MB / 10.88MB                  13.1s=> => sha256:b273004037cc3af245d8e08cfbfa672b93ee7dcb289736c82d0b58936fb71702 7.81kB / 7.81kB                     0.0s=> => sha256:d9d4b9b6e964657da49910b495173d6c4f0d9bc47b3b44273cf82fd32723d165 5.16MB / 5.16MB                    18.0s=> => sha256:9daef329d35093868ef75ac8b7c6eb407fa53abbcb3a264c218c2ec7bca716e6 54.58MB / 54.58MB                  43.2s=> => sha256:d85151f15b6683b98f21c3827ac545188b1849efb14a1049710ebc4692de3dd5 5.42MB / 5.42MB                    25.5s=> => sha256:52a8c426d30b691c4f7e8c4b438901ddeb82ff80d4540d5bbd49986376d85cc9 210B / 210B                        25.3s=> => extracting sha256:001c52e26ad57e3b25b439ee0052f6692e5c0f2d5d982a00a8819ace5e521452                          1.9s=> => sha256:8754a66e005039a091c5ad0319f055be393c7123717b1f6fee8647c338ff3ceb 105.92MB / 105.92MB                68.4s=> => extracting sha256:d9d4b9b6e964657da49910b495173d6c4f0d9bc47b3b44273cf82fd32723d165                          0.2s=> => extracting sha256:2068746827ec1b043b571e4788693eab7e9b2a95301176512791f8c317a2816a                          0.2s=> => extracting sha256:9daef329d35093868ef75ac8b7c6eb407fa53abbcb3a264c218c2ec7bca716e6                          2.1s=> => extracting sha256:d85151f15b6683b98f21c3827ac545188b1849efb14a1049710ebc4692de3dd5                          0.2s=> => extracting sha256:52a8c426d30b691c4f7e8c4b438901ddeb82ff80d4540d5bbd49986376d85cc9                          0.0s=> => extracting sha256:8754a66e005039a091c5ad0319f055be393c7123717b1f6fee8647c338ff3ceb                          2.1s=> [2/3] ADD docker-springboot-1.0.jar docker_boot.jar                                                            0.3s=> [3/3] RUN bash -c 'touch /docker_boot.jar'                                                                     0.4s=> exporting to image                                                                                             0.1s=> => exporting layers                                                                                            0.1s=> => writing image sha256:0fcc9c262e90d6a05213ec432924e6835647d233a64ad0747cf7dd406a2a40bd                       0.0s=> => naming to docker.io/library/docker_boot:1.0                                                                 0.0sUse 'docker scan' to run Snyk tests against images to find vulnerabilities and learn how to fix them
  • 查看镜像

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-n3Vw2A5r-1670767109762)(https://github.com/DingDangDog/ddd-document/blob/main/docker/images/image-20221004123749354.png?raw=true)]

启动测试

  1. 启动容器

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-92J0OcAd-1670767109763)(https://github.com/DingDangDog/ddd-document/blob/main/docker/images/image-20221004124258074.png?raw=true)]

  1. 调用测试

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-bNIzrXeA-1670767109764)(https://github.com/DingDangDog/ddd-document/blob/main/docker/images/image-20221004124524928.png?raw=true)]

  1. 查看本地文件:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-UER0fLaz-1670767109764)(https://github.com/DingDangDog/ddd-document/blob/main/docker/images/image-20221004124636663.png?raw=true)]

Linux

要求

  • 前期准备

构建镜像

  • 在jar包所在文件夹下运行构建命令:

    docker build -t docker_boot:1.0 .

    解析:

    • docker build:构建镜像

    • -t docker_boot:1.0-t=--tag,指定镜像名称为docker_boot,版本为1.0

    • . :指定Dockerfile文件在当前文件夹下

  • 构建成功日志:

    Sending build context to Docker daemon  19.65MB
    Step 1/7 : FROM openjdk:8-jdk
    8-jdk: Pulling from library/openjdk
    001c52e26ad5: Pull complete 
    d9d4b9b6e964: Pull complete 
    2068746827ec: Pull complete 
    9daef329d350: Pull complete 
    d85151f15b66: Pull complete 
    52a8c426d30b: Pull complete 
    8754a66e0050: Pull complete 
    Digest: sha256:86e863cc57215cfb181bd319736d0baf625fe8f150577f9eb58bd937f5452cb8
    Status: Downloaded newer image for openjdk:8-jdk---> b273004037cc
    Step 2/7 : MAINTAINER DingDangDog---> Running in 6b19d92591a8
    Removing intermediate container 6b19d92591a8---> 8a491c04d897
    Step 3/7 : VOLUME /tmp---> Running in 696221f7868c
    Removing intermediate container 696221f7868c---> ad7eff7b71e1
    Step 4/7 : add docker-springboot-1.0.jar docker_boot.jar---> 77eb15fd7557
    Step 5/7 : RUN bash -c 'touch /docker_boot.jar'---> Running in 0704d4fd8ab2
    Removing intermediate container 0704d4fd8ab2---> aa9e4ca18365
    Step 6/7 : ENTRYPOINT ["java", "-jar", "/docker_boot.jar"]---> Running in 78ae0e314f8f
    Removing intermediate container 78ae0e314f8f---> cb6f8c91f76c
    Step 7/7 : EXPOSE 10240---> Running in 697a7506c8c8
    Removing intermediate container 697a7506c8c8---> 20bafbe3127b
    Successfully built 20bafbe3127b
    Successfully tagged docker_boot:1.0
  • 查看镜像docker images

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-jWIs3PEn-1678172652173)(https://github.com/DingDangDog/ddd-document/blob/main/docker/images/image-20221004125527515.png?raw=true)]

启动测试

  1. 启动容器

    docker run -v /var/local/docker/docker-boot-test/tmp:/tmp -p 10240:10240 -d --name docker_boot_test docker_boot:1.0
  2. 调用测试

    curl http://localhost:10240/say/hello?name=ddd
    # Hello ddd !

相关文章:

Dockerfile构建Springboot镜像

Dockerfile构建Springboot镜像 文章目录 Dockerfile构建Springboot镜像 简介实例演示 前期准备 Docker环境Springboot项目Dockerfile文件 Windows 要求构建镜像启动测试 Linux 要求构建镜像启动测试 简介 容器技术大流行的时代,也是docker大流行的时代。 此文…...

从深分页查询到覆盖索引

最近看到一道面试题,如何优化深分页查询 最简单的例子是 select * from web_bill_main limit 30000,10;分页达到30000行,需要把前面29999行都过滤掉,才能找到这10条数据 所以整体时间花了80ms(工具显示时间) 我当时的第一反应是&#xff0…...

Go语言学习的第三天--下部分(Gin框架的基础了解)

每天都会分享Go的知识,喜欢的朋友关注一下。每天的学习分成两部分基础(必要的,基础不牢地动山摇),另一部分是Go的一些框架知识(会不定时发布,因为小Wei也是一名搬砖人)。但是可以保证…...

JDK的动态代理(powernode 文档)(内含源代码)

JDK的动态代理(powernode 文档)(内含源代码) 源代码下载链接地址:https://download.csdn.net/download/weixin_46411355/87546086 一、动态代理 目录JDK的动态代理(powernode 文档)&#xff0…...

第1章 多线程基础

第1章 多线程基础 1.1.2 线程与进程的关系 进程可以看成是线程的容器,而线程又可以看成是进程中的执行路径。 1.2 多线程启动 线程有两种启动方式:实现Runnable接口;继承Thread类并重写run()方法。 执行进程中的任务时才会产生线程&a…...

Linux基本指令(一)

文章目录文件操作文档操作系统管理网络通信备份压缩Ctrl Alt T 打开终端 文件操作 1.复制文件 cp afile bfile (将名为afile的文件复制到名为bfile的文件夹中,如果bfile文件不存在,系统将会创建此文件,如果bfile文件已经存在&a…...

el-dialog子组件在mounted周期内获取不到dom?

el-dialog子组件在mounted周期内获取不到dom?一、问题描述二、分析原因三、猜测正常父子组件在mounted生命周期内可以获得dom 父created—子created—子mounted—父mounted----子updated—父updated 一、问题描述 ** el-dialog控制显示隐藏是css控制的display&…...

第九章 opengl之光照(光照贴图)

OpenGL光照贴图漫反射贴图镜面光贴图光照贴图 一个物体的不同部分是不同的材质,那么会有不同的环境光和漫反射颜色表现。 漫反射贴图 原理就是:纹理。 是对同样的原理使用了不同的名字:其实都是使用一张覆盖物体的图像,让我们能…...

JDK动态代理(powernode CD2207 video)(内含教学视频+源代码)

JDK动态代理(powernode CD2207 video)(内含教学视频源代码) 教学视频原代码下载链接地址:https://download.csdn.net/download/weixin_46411355/87545977 目录JDK动态代理(powernode CD2207 video&#xf…...

【Linux】Sudo的隐晦bug引发的一次业务问题排查

Sudo的隐晦bug引发的一次业务问题排查写在前面问题描述问题排查高负载现象排查日志排查跟踪任务调度过程Sudo引发的问题手动复现问题分析处理方案写在前面 记录一次生产环境sudo启动进程频繁被Kill且不报错的异常处理过程,如果遇到同样的问题只想要解决方案&#x…...

Java VisualVM 安装 Visual GC 插件图文教程

文章目录1. 通过运行打开 Java VisualVM 监控工具2. 菜单栏初始视图说明3. 工具插件菜单说明4. 手工安装插件5. 重启监控工具查看 Visual GC1. 通过运行打开 Java VisualVM 监控工具 首先确保已安装 Java 环境,如此处安装版本 JDK 1.8.0_161 C:\Users\niaonao>j…...

【C语言】详解静态变量static

关键字static 在C语言中:static是用来修饰变量和函数的static主要作用为:1. 修饰局部变量-静态局部变量 2. 修饰全局变量-静态全局变量3. 修饰函数-静态函数在讲解静态变量之前,我们应该了解静态变量和其他变量的区别: 修饰局部变量 //代码1 #include &l…...

SpringBoot整合ElasticSearch实现模糊查询,排序,分页,高亮

目录 前言 1.框架集成-SpringData-整体介绍 1.1Spring Data Elasticsearch 介绍 2.框架集成Spring Data Elasticsearch 2.1版本说明 2.2.idea创建一个springboot项目 2.3.导入依懒 2.3.增加配置文件 2.4Spring Boot 主程序。 2.5.数据实体类 2.6.配置类 2.7.DAO 数据…...

YARN基本架构

主要由ResourceManager、NodeManager、ApplicationMaster和Container等组件构成,如图所YA示。 ResourceManager(RM) RM是全局资源管理器,负责整个系统的资源管理和分配 主要由两个组件构成:Scheduler调度器和应用程序…...

【C++复习】类和对象全知识点总结

类和对象写在前面类和对象面向对象类类的定义类的访问限定符类的作用域类的实例化类对象大小this指针类的默认成员函数构造函数析构函数拷贝构造函数运算符重载赋值运算符重载前置后置重载取地址及const取地址操作符重载const 成员static 成员友元友元函数有元类内部类匿名对象…...

基于轻量级YOLOv5开发构建汉字检测识别分析系统

汉字检测、字母检测、手写数字检测、藏文检测、甲骨文检测在我之前的文章中都有做过了,今天主要是因为实际项目的需要,之前的汉字检测模型较为古老了还使用的yolov3时期的模型,检测精度和推理速度都有不小的滞后了,这里要基于yolo…...

leetcode-每日一题-66(简单题,数组)

这道题其实还没那么简单,中间还是有的绕的。。。。给定一个由 整数 组成的 非空 数组所表示的非负整数,在该数的基础上加一。最高位数字存放在数组的首位, 数组中每个元素只存储单个数字。你可以假设除了整数 0 之外,这个整数不会…...

LeetCode295之数据流的中位数(相关话题:优先队列)

题目描述 中位数是有序整数列表中的中间值。如果列表的大小是偶数,则没有中间值,中位数是两个中间值的平均值。 例如 arr [2,3,4] 的中位数是 3 。例如 arr [2,3] 的中位数是 (2 3) / 2 2.5 。 实现 MedianFinder 类: MedianFinder() 初始化 Media…...

助你加速开发效率!告别IDEA卡顿困扰的性能优化技巧

在现代软件开发中,IDE(集成开发环境)是一个必不可少的工具。IntelliJ IDEA是一个广受欢迎的IDE,但有时候IDE的性能可能会受到影响,导致开发人员的工作效率降低。本文将介绍一些可以提高IDE性能的技巧,帮助开…...

Java设计模式-适配器模式

1、简介 适配器模式是作为两个不兼容的接口之间的桥梁。这种类型的设计模式属于结构型模式,它结合了两个独立接口的功能。 这种模式涉及到一个单一的类,该类负责加入独立的或不兼容的接口功能。 2、适配器模式分类 目标接口(Target&#x…...

接口测试中缓存处理策略

在接口测试中,缓存处理策略是一个关键环节,直接影响测试结果的准确性和可靠性。合理的缓存处理策略能够确保测试环境的一致性,避免因缓存数据导致的测试偏差。以下是接口测试中常见的缓存处理策略及其详细说明: 一、缓存处理的核…...

国防科技大学计算机基础课程笔记02信息编码

1.机内码和国标码 国标码就是我们非常熟悉的这个GB2312,但是因为都是16进制,因此这个了16进制的数据既可以翻译成为这个机器码,也可以翻译成为这个国标码,所以这个时候很容易会出现这个歧义的情况; 因此,我们的这个国…...

工业安全零事故的智能守护者:一体化AI智能安防平台

前言: 通过AI视觉技术,为船厂提供全面的安全监控解决方案,涵盖交通违规检测、起重机轨道安全、非法入侵检测、盗窃防范、安全规范执行监控等多个方面,能够实现对应负责人反馈机制,并最终实现数据的统计报表。提升船厂…...

Mybatis逆向工程,动态创建实体类、条件扩展类、Mapper接口、Mapper.xml映射文件

今天呢,博主的学习进度也是步入了Java Mybatis 框架,目前正在逐步杨帆旗航。 那么接下来就给大家出一期有关 Mybatis 逆向工程的教学,希望能对大家有所帮助,也特别欢迎大家指点不足之处,小生很乐意接受正确的建议&…...

linux arm系统烧录

1、打开瑞芯微程序 2、按住linux arm 的 recover按键 插入电源 3、当瑞芯微检测到有设备 4、松开recover按键 5、选择升级固件 6、点击固件选择本地刷机的linux arm 镜像 7、点击升级 (忘了有没有这步了 估计有) 刷机程序 和 镜像 就不提供了。要刷的时…...

论文解读:交大港大上海AI Lab开源论文 | 宇树机器人多姿态起立控制强化学习框架(一)

宇树机器人多姿态起立控制强化学习框架论文解析 论文解读:交大&港大&上海AI Lab开源论文 | 宇树机器人多姿态起立控制强化学习框架(一) 论文解读:交大&港大&上海AI Lab开源论文 | 宇树机器人多姿态起立控制强化…...

Spring Boot+Neo4j知识图谱实战:3步搭建智能关系网络!

一、引言 在数据驱动的背景下,知识图谱凭借其高效的信息组织能力,正逐步成为各行业应用的关键技术。本文聚焦 Spring Boot与Neo4j图数据库的技术结合,探讨知识图谱开发的实现细节,帮助读者掌握该技术栈在实际项目中的落地方法。 …...

涂鸦T5AI手搓语音、emoji、otto机器人从入门到实战

“🤖手搓TuyaAI语音指令 😍秒变表情包大师,让萌系Otto机器人🔥玩出智能新花样!开整!” 🤖 Otto机器人 → 直接点明主体 手搓TuyaAI语音 → 强调 自主编程/自定义 语音控制(TuyaAI…...

MySQL JOIN 表过多的优化思路

当 MySQL 查询涉及大量表 JOIN 时,性能会显著下降。以下是优化思路和简易实现方法: 一、核心优化思路 减少 JOIN 数量 数据冗余:添加必要的冗余字段(如订单表直接存储用户名)合并表:将频繁关联的小表合并成…...

LabVIEW双光子成像系统技术

双光子成像技术的核心特性 双光子成像通过双低能量光子协同激发机制,展现出显著的技术优势: 深层组织穿透能力:适用于活体组织深度成像 高分辨率观测性能:满足微观结构的精细研究需求 低光毒性特点:减少对样本的损伤…...