手搓 Docker Image Creator(DIC)工具(01):前言

设计并实现一款名为 Docker Image Creator(DIC)的脚本工具,该工具能够高效地利用提供的 Dockerfile 文件,自动化完成从源文件构建定制化镜像的全过程,并无缝集成镜像的功能性运行测试环节,旨在提供一站式的镜像构建与验证解决方案。

1 项目缘由

日常开发中,我常常依赖 Docker Hub 中现成的镜像资源,但有时这些镜像无法满足特定的定制化需求。因此,我计划转向利用 Dockerfile 手动构建符合个人需求的镜像。整个过程涉及 Dockerfile 的编写、编译以及新构建镜像的功能验证,而且这一系列步骤是需要反复进行的,显得相对繁琐,准备采用一种简化的方式来处理这个流程。

考虑到自身需求较为基础,我不打算花费过多时间搜索并评估市面上已有的相关工具。鉴于此,决定动手创建一个简单的自动化脚本来实现这一目标,名称就叫 Docker Image Creator,简称:DIC。由于 Dockerfile 的语法结构直观易懂,此次实现的功能也不算复杂,我选择了 Shell 脚本作为实现工具,它与 Docker 命令结合紧密。这样一来,我可以直接通过编写 Shell 脚本来驱动 Docker 编译 Dockerfile、构建镜像及执行相应的镜像功能测试,从而达到一站式构建与验证的目的。

2 项目核心功能

2.1 Image 构建

该项目借助 Dockerfile 实现自定义镜像的编译过程,确保按照预设配置生成一个新的 image。

2.2 镜像功能验证

为了确认生成的 image 是否具备可用性,我们采用标准的 docker run 命令启动容器实例,对新构建的 image 进行全面的功能性测试。通过观察容器启动状况以及内部服务响应情况,我们可以准确判断 image 是否满足设计要求与实际应用场景的需求。

2.3 建立本地资源库

为了提升镜像构建效率和资源管理规范性,我们可以采取以下措施:将镜像构建过程中所需的全部资源文件进行整理和归档,并将其存储在本地磁盘,构建出一个本地资源库。这样,在进行镜像编译生成的过程中,可以直接从本地资源库中提取所需的资源文件,显著减少网络传输带来的等待时间。
此外,通过这种方式建立本地资源库还有助于进行严格的版本控制,确保每次镜像构建所使用的资源版本一致性,避免因外部资源服务器内容变动导致的不稳定性问题,进而提高整体开发环境和部署流程的可控性和可靠性。

3 项目特点

  • 脚本可执行,不需要安装依赖
  • 支持多个应用并行开发、编译、调试

4 项目结构

项目结构如下:

docker-image-creator —— DIC 项目根目录|— apps —— 应用集合|   |— app1 —— 应用1|   |   |— framework —— 框架 framework 的软连接,引入框架在app内部使用|   |   |   |— ...【内容略,同根目录下的 framework】|   |   |- build.sh —— 构建脚本【调用 framework/scripts/_build.sh 脚本】|   |   |- build_run.sh —— 构建并运行的脚步【调用 framework/scripts/_build_run.sh 脚本】|   |   |— config.sh —— 配置脚本|   |   |— Dockerfile|   ||   |— app2 —— 应用2|   |   |— ...|   |   |— ...||— framework —— 框架【正式运行时设置为只读,避免被改写】|   |— resources —— 资源集合|   |   |— runtime —— 运行时资源集合|   |   |   |— xxxx —— 供选用的运行时资源|   |   ||   |   |— install —— 用来被 image 从本地安装的资源集合|   |       |— xxxx —— 供选用的安装资源|   ||   |— scripts —— 脚本集合|       |— _build.sh —— 真正实现构建的脚本|       |— _build_run.sh —— 真正实现镜像构建、并生成容器测试运行的脚本||- createApp.sh —— 创建应用的脚本|— readme.md —— 说明文件

5 使用简介

5.1 创建应用:

在项目根目录(docker-image-builder)下,执行 createApp.sh 脚本,创建应用。

./createApp.sh appName appVersion

创建应用后,会在 apps 目录下生成应用目录,目录结构同前述的 app1,同时创建一个最简单示例的 Dockerfile,相当于创建 image 的 “Hello World” 示例。

5.2 构建镜像:

在应用目录(如示例中的 app1)下,执行 build.sh 脚本,构建镜像。

5.3 构建并运行镜像:

在应用目录(如示例中的 app1)下,执行 build_run.sh 脚本,构建并运行镜像。

6 项目特别说明

  • 此项目是仅供学习参考,请勿轻易用于生产环境
  • 考虑到 Windows、macOS 是平时工作、学习最常用的操作系统,因此只在 Windows、macOS 上测试
  • 此项目由于是临时发起,边学边写,所以不会很严谨,欢迎拍砖、更希望能引玉
  • 原创码字不易,欢迎评论、点赞、收藏、关注

下一节内容介绍 —— 预备知识
主要简单介绍一下 Docker、Dockerfile 的基本概念,Dockerfile 对的基本语法,Windows 和 macOS 下 Docker 桌面的安装,Docker 镜像的创建和运行测试等。

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

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

相关文章

GPU-CPU-ARM-X86-RISC-CUDA

CPU更适合处理复杂逻辑运算和单线程任务,而GPU则更适合处理大规模并行计算任务。 CPU(中央处理器)通常具有较少的核心数量(一般在2到16个之间),但每个核心的性能较强,擅长执行复杂的运算和逻辑…

HTTP/1.1 特性(计算机网络)

HTTP/1.1 的优点有哪些? 「简单、灵活和易于扩展、应用广泛和跨平台」 1. 简单 HTTP 基本的报文格式就是 header body,头部信息也是 key-value 简单文本的形式,易于理解。 2. 灵活和易于扩展 HTTP 协议里的各类请求方法、URI/URL、状态码…

专升本-云计算

被誉为第三次信息技术革命 什么是云计算? 云计算是一种商业的计算模式,它将任务分布在大量计算机构成的资源池上,用户可以按需通过网络存储空间,计算能力和信息等服务 云计算的产生和发展: 起源:上世纪6…

投稿指南【NO.12_9】【极易投中】核心期刊投稿(现代电子技术)

近期有不少同学咨询投稿期刊的问题,大部分院校的研究生都有发学术论文的要求,少部分要求高的甚至需要SCI或者多篇核心期刊论文才可以毕业,但是核心期刊要求论文质量高且审稿周期长,所以本博客梳理一些计算机特别是人工智能相关的期…

Swagger文档转html和pdf格式_亲测成功

Swagger文档转html和pdf格式_亲测成功 spring maven项目 使用Swagger作为接口文档时,可以导出html和pdf格式. maven项目pom.xml引入 <properties><project.build.sourceEncoding>UTF-8</project.build.sourceEncoding><project.reporting.outputEncodin…

集成百兆,千兆,万兆网络变压器等电子元器件的RJ45 Jack连接器在屏显控制系统中的应用

Hqst华轩盛(石门盈盛)电子导读&#xff1a;集成百兆&#xff0c;千兆&#xff0c;万兆网络变压器等电子元器件的RJ45 Jack连接器在屏显控制系统中的应用 一 ﹑集成百兆&#xff0c;千兆&#xff0c;万兆网络变压器等电子元器件的RJ45 Jack连接器在屏显控制系统中的应用前景 近年…

Go-JWT完整示例

依赖安装 go get -u github.com/golang-jwt/jwt/v5 文档地址 文档 创建对象 jwt的相关配置 # jwt configuration jwt:signing-key: xxxexpires-time: 7dbuffer-time: 1dissuer: fancy_fishclaim-strings: fancy_fish_to_do_listclaims类型配置 package requestimport (&…

【m122】webrtc的比较

uint16的比较IsNewerSequenceNumber 和 u32的比较LatestTimestamp G:\CDN\WEBRTC-DEV\libwebrtc_build\src\modules\include\module_common_types_public.h/** Copyright (c) 2017 The WebRTC project authors. All Rights Reserved.** Use of this source code is governed …

Node.js中Router的使用

文章目录 介绍router的优点1.导入Express和创建Router&#xff1a;2. 定义路由&#xff1a;3.将router暴露到模块外&#xff1a;4. 将Router挂载到Express应用中&#xff1a;4.1.引入router4.2.使用中间件让router在Express应用中生效(三种写法) 5. 完整示例&#xff1a;5.1.编…

面试题:Spring Boot应用的打包部署方式(jar/war、内嵌服务器)

Spring Boot应用的打包部署方式主要有两种&#xff1a; jar 和 war &#xff0c;分别对应不同的部署场景和需求。 ### 1. 打包成 JAR 包部署 #### JAR (Java Archive) 方式 Spring Boot的一个核心特性就是其内嵌服务器&#xff08;默认是Tomcat&#xff0c;也可更换为J…

【Web】NSSCTF Round#20 Basic 两道0解题的赛后谈

目录 前言 baby-Codeigniter 组合拳&#xff01; 前言 本想着说看看go的gin框架就睡了的&#xff0c;r3师傅提醒说赛题环境已经上了&#xff0c;那不赶紧研究下&#x1f600; 主要来谈谈做题的心路历程 baby-Codeigniter 拿到题目的第一反应应该是&#xff1a;“什么是C…

jmeter性能压测的标准和实战中会遇到的问题

1.性能标准建议 CPU 使用率&#xff1a;不超过 70% 内存使用率&#xff1a;不超过 70% 磁盘&#xff1a;%util到达80%严重繁忙 &#xff08;os.disIO.filesystem.writeKbPS 每秒写入的千字节&#xff09; 响应时间&#xff1a;95%的响应时间不超过8000ms 事务成功率&#xff1a…

pytest中文使用文档----6临时目录和文件

1. 相关的fixture 1.1. tmp_path1.2. tmp_path_factory1.3. tmpdir1.4. tmpdir_factory1.5. 区别 2. 默认的基本临时目录 1. 相关的fixture 1.1. tmp_path tmp_path是一个用例级别的fixture&#xff0c;其作用是返回一个唯一的临时目录对象&#xff08;pathlib.Path&#xf…

阿里云2核4G服务器租用价格_30元3个月_165元一年_199元

阿里云2核4G服务器租用优惠价格&#xff0c;轻量2核4G服务器165元一年、u1服务器2核4G5M带宽199元一年、云服务器e实例30元3个月&#xff0c;活动链接 aliyunfuwuqi.com/go/aliyun 活动链接如下图&#xff1a; 阿里云2核4G服务器优惠价格 轻量应用服务器2核2G4M带宽、60GB高效…

PCL点云处理之 基于垂直度检测与距离聚类 的路面点云提取方案 (二百三十九)

PCL点云处理之 基于垂直度检测与距离聚类 的路面点云提取方案 (二百三十九) 一、算法流程二、具体步骤1.垂直度检测与渲染1.代码2.效果2.水平分布点云提取1.代码2.效果3.路面连通点云提取1.代码2.效果三、完整代码四、参考文献一、算法流程

Chapter 1 - 6. Introduction to Congestion in Storage Networks

NVMe/TCP NVMe/TCP carries NVMe commands over TCP transport (Figure 1-8) for accessing remote block storage via a lossy or sometimes lossless network. It is an OSI layer 5 (sessions layer) protocol. NVMe/TCP 通过 TCP 传输(图 1-8)传输 NVMe 命令,以便通过有…

Flutter 开发学习笔记(2):第一个简单的Flutter项目(下)

文章目录 前言官方Flutter案例侧边栏添加代码初始化展示效果 子组件私有数据空间导航栏转为有状态WidgetsetState手动转换页面实现效果 响应式动态切换宽度添加收藏夹&#xff0c;跨Widget传数据实现效果 完整代码后续进阶效果总结 前言 接着继续上一章的内容 官方Flutter案例…

简单了解策略模式

什么是策略模式&#xff1f; 策略模式提供生成某一种产品的不同方式 Strategy策略类定义了某个各种算法的公共方法&#xff0c;不同的算法类通过继承Strategy策略类&#xff0c;实现自己的算法 Context的作用是减少客户端和Strategy策略类之间的耦合&#xff0c;客户端只需要…

react hook 为循环出来的多个子组件添加ref

react hook 为循环出来的多个子组件添加ref 在React函数组件中&#xff0c;可以使用useRef钩子来获取当前组件的标签&#xff08;DOM元素&#xff09;。 父组件 const details useState([{name:A},{name:B},{name:C}])const bodyRefs useRef({});// 把ref挂载在循环出来的子组…

UE4 面试题整理

1、new与malloc的区别 new&#xff1a; new首先会去调用operator new函数&#xff0c;申请足够的内存&#xff08;大多数底层用malloc实现&#xff09;&#xff0c;然后调用类型的构造函数来初始化变量&#xff0c;最后返回自定义类型的指针&#xff0c;delete先调用析构函数&…