Dockerfile构建Springboot镜像

news2024/11/19 3:21:06

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.0s
    
    Use '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

docker

启动测试

  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 !
    
  3. 查看本地文件:

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/81014.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

无线网卡收包流程

环境 x86_64 Linux, AR9462 无线网卡,PCIe 接口 ath9k 驱动 收包过程 ① 无线网卡从空气中捕获到无线数据包 【物理层】 ② 无线网卡把帧 DMA 到内存的 Ring Buffer ③ 无线网卡向 CPU 发起中断请求 ④ CPU 响应中断,执行 ISR,…

fatfs相关宏定义说明

fat16文件系统DBR 宏定义如下: #define BS_JmpBoot 0 //跳转指令。3字节。/* x86 jump instruction (3-byte) */ #define BS_OEMName 3 //OEM名称。8字节。/* OEM name (8-byte) */ #define BPB_BytsPerSec 11 //扇区字节数。2字节。/* Sector size [byte…

Python学习基础笔记四十五——包

C:\Program Files\Python310\Lib 1、 包的概念:把解决同一类问题的模块放在同一个文件夹里,我们就称为包。 2、在PyCharm中创建一个包: 文件夹中会有一个init.py文件。 在Python3中没有这个__init__.py文件也没有问题。 3、在包A和包B下有同…

Go设计与实现 -- map哈希表

Go语言中的哈希表有它自己的一套实现方式。和Java的哈希表还是有些不同的,但是为了保证知识体系的完整性,我还是准备从头开始说起。 哈希表设计原理 哈希表的读写时间复杂度是O(1),因为它提供了键值之间的映射。要实现一个性能优异的哈希表…

spring——AOP面向切面编程——基于XML的AspectJ AOP开发(转载)

我们可以在 Spring 项目中通过 XML 配置,对切面(Aspect 或 Advisor)、切点(PointCut)以及通知(Advice)进行定义和管理,以实现基于 AspectJ 的 AOP 开发。Spring 提供了基于 XML 的 AOP 支持,并提供了一个名为“aop”的命名空间,该…

Docker笔记--使用Docker部署MySQL

1--Docker部署MySQL ① 搜索MySQL镜像 docker search mysql ② 拉取MySQL镜像 docker pull mysql:latest ③ 创建MySQL容器 首先在宿主机创建MySQL的映射目录,即数据卷: cd /home mkdir mysql cd mysql 之后在当前目录创建MySQL容器($PW…

【事故复盘】吐血整理一场线上事故——CPU飙升200%

🔍 经验使你在第二次犯相同错误时及时发现。 —— 琼斯 🔖 事故时间:12.7日 17:43 ~ 21:03 🔖 事故影响:服务接口查询慢,用户查看数据转圈 🔖 事故过程: 那是一个宛如平静的下午&…

128-150-mysql-高级篇-索引及调优篇

115-mysql-高级篇-索引及调优篇: 索引及调优篇 1、索引的创建与设计原则 1. 索引的声明与使用 1.1 索引的分类 从功能逻辑上说,索引主要有 4 种,分别是普通索引、唯一索引、主键索引、全文索引。按照物理实现方式,索引可以分…

BUUCTF Web1

[极客大挑战 2019]EasySQL 试了个万能密码就能上去了 flag: flag{8e685472-02e4-440a-b04e-b0d9b6d9c27f} [HCTF 2018]WarmUp 看源码有个source.php <?phphighlight_file(__FILE__);class emmm{public static function checkFile(&$page){$whitelist ["source&qu…

Mysql 创建存储过程和函数及各种例子

Mysql 创建存储过程和函数及各种例子1. Mysql 创建存储过程1.1 前言知识1.1.1 语法结构1.1.2 简单解释1.2 创建存储过程入门例子1.2.1 无参存储过程1.2.1.1 不带变量1.2.1.2 带变量1.2.2 有入参的存储过程1.2.3 有出参的存储过程1.2.4 有入参和存储的存储过程1.2.5 inout的存储…

如何将镜像上传至阿里云?如何从阿里云中拉取自己的镜像?

目录 如何将制作好的镜像上传至阿里云&#xff1f; 一、前期准备 1、注册阿里云账户 2、登录账号 3、配置Docker加速器 4、创建镜像仓库的命名空间&#xff08;私有的&#xff09; 5.创建镜像仓库(创建镜像仓库时要绑定一个代码托管网站&#xff0c;例如&#xff1a;githu…

Zookeeper集群搭建

文章目录前言Zookeeper集群搭建&#xff08;一&#xff09;LeaderFollower模式&#xff08;二&#xff09;下载zookeeeper的压缩包&#xff08;三&#xff09;解压&#xff08;四&#xff09;修改配置文件&#xff08;五&#xff09;添加myid配置&#xff08;六&#xff09;安装…

痞子衡嵌入式:存储器大厂Micron的NOR Flash芯片特殊丝印设计(FBGA代码)

大家好&#xff0c;我是痞子衡&#xff0c;是正经搞技术的痞子。今天痞子衡给大家讲的是存储器大厂Micron的NOR Flash芯片特殊丝印设计(FBGA代码)。 痞子衡之前写过一篇文章 《J-Flash在Micron Flash固定区域下载校验失败的故事》&#xff0c;这篇文章里提及了 Micron 家的串行…

明峰医疗IPO终止:亏损超过14亿元,王瑶法、潘华素夫妇为实控人

近日&#xff0c;上海证券交易所科创板披露的信息显示&#xff0c;明峰医疗系统股份有限公司&#xff08;下称“明峰医疗”&#xff09;向上海证券交易所提交了撤回上市申请文件的申请&#xff0c;保荐人海通证券提交了撤回保荐的申请。 因此&#xff0c;上海证券交易所决定终…

设计模式之创建型模式---单例模式

文章目录1.介绍2.应用场景3.实现3.1 结构3.2 类图3.3 代码示例3.3.1 饿汉式3.3.2 懒汉式3.3.3 双重检验锁3.3.3 静态内部类实现单例3.3.4 枚举类实现单例总结1.介绍 单例模式(singleton) 是指某个类中能生成一个实例&#xff0c;该类提供了一个全局访问点&#xff0c;提供一个唯…

JUC并发编程与源码分析笔记07-volatile与JMM

被volatile修饰的变量有两大特点 可见性、有序性&#xff0c;但是不保证原子性。 当写一个volatile变量时&#xff0c;JMM会把该线程对应的本地内存中的共享变量值立即刷新回主内存中。当读一个volatile变量时&#xff0c;JMM会把该线程对应的本地内存设置为无效&#xff0c;重…

Java开发:汇编语言

一、为什么学习汇编语言 中国人和中国人沟通需要学习汉语 中国人和美国人沟通在会汉语的基础上还要学习英语 那么&#xff0c;人和机器沟通的话需要学习哪些语言呢&#xff1f; 答案是&#xff1a;人类的语言机器语言 但是&#xff0c;机器语言都是由0和1组成&#xff0c;人类…

opencv图像直方图

灰度直方图&#xff1a;从数学上来说&#xff0c;图像直方图是描述图像的各个灰度级的统计特性&#xff0c;它是图像灰度值的函数&#xff0c;统计图像中各个灰度级出现的次数或频率。从图像上来说&#xff0c;灰度直方图是一个二维图像&#xff0c;横坐标为图像中各个像素点的…

git stash命令用法详解(临时存储代码)

1、需求背景 有时候在开发过程中&#xff0c;在一个分支上&#xff08;dev1&#xff09;已经写了一部分代码&#xff0c;但是需要紧急切换到别的分支(dev2)上修改某个代码&#xff0c;这时候不能直接从dev1分支上切换到dev2分支上&#xff0c;提示你需要保存代码。此时dev1分支…

Linux内存模型

sparse内存模型前言1.SPARSEMEM原理:2.vmemmap在虚拟地址空间位置3.virt&#xff0c;phys&#xff0c;page&#xff0c;pfn之间的转换关系3.1内核态虚拟地址和物理内存地址转换关系3.2页帧pfn、物理内存的page指针的关系3.3其他快捷的转换总结前言 Linux中的物理内存被按页框划…