当前位置:   article > 正文

手搓Docker-Image-Creator(DIC)工具(04):DIC的代码实现

手搓Docker-Image-Creator(DIC)工具(04):DIC的代码实现

此系列的前 3 篇主要是介绍了 Docker 的应用、Docker 编排文件 Dockerfile 的常用命令、以及 Docker 镜像的构建过程等都进行简单介绍。尤其在第 3 篇,讲述了 Docker 运行时、安装用等资源,并在文末提出了存在的不足和改进的方向,本篇就直接从代码开始介绍如何使用 DIC 工具来创建 Docker 镜像。

1 了解框架目录结构

1.1 框架根目录 docker-image-creator(目录可以随意取)

图1  简洁的第一层目录结构

图1 简洁的第一层目录结构

第一级很简洁,只有 3 个文件和 1 个文件夹,分别是:

  • framework 文件夹,是整个工具的基础,用于存放 DIC 工具的资源和工具脚本
  • createApp.sh 文件,根据相关参数信息创建一个应用项目
  • build.sh 文件,根据 Dockerfile 文件的设定,对应用项目进行构建,最终生成 Docker 镜像
  • run.sh 文件,将制定的镜像在 Docker 里以容器的形式运行

1.2 framework 目录结构

既然 framework 是基础,那就重点看看此目录下的内容,如下图:
图2  framework 子目录构成

图2 framework 子目录构成

framework 目录下包含了三个目录,分别是:

  • install - 用来存放最终拷入到镜像里的安装包(安装结束后,最好从镜像里删除)
  • runtime - 用来存放最终考入到镜像里的运行时文件,不能从镜像里删除
  • versions - 用来存放不同版本的安装安装工具包,就是脚本文件,实现多版本的支持。这个版本号需要在创建项目时选择好,并记录在应用的配置文件 config.sh 文件里

下图展示 framework 的目录结构全貌:
图3  framework 的目录结构全貌

图3 framework 的目录结构全貌

在此实例中:

  • install目录下有 1 个安装包 glibc,并区分版本目录,便于存取
  • runtime目录下有 1 个运行时文件,并区分版本目录,便于存取
  • versions目录下有 1 个安装工具包,并区分版本目录,便于选择不同版本的管理脚本

2 创建应用项目

使用该框架的第一步就是要创建一个应用项目,由 createApp.sh 文件来完成,该文件会根据输入的参数信息创建一个应用项目。

2.1 createApp.sh 文件

目前的脚本并不复杂,所以没有使用函数,直接将脚本内容写在 createApp.sh 文件里。

#!/bin/bash

# 用法:./createApp.sh [creatorVersion] [appName] [appVersion]
# 参数
# creatorVersion=$1 - 生成器版本号
# appName=$2 - 应用名称
# appVersion=$3 - 应用版本号

set -e # 遇到错误时退出脚本

# 生成器版本号
creatorVersion=$1
if [ -z "$creatorVersion" ]; then
  echo "请输入生成器版本号"
  exit 1
fi

# 应用名称
appName=$2
if [ -z "$appName" ]; then
  echo "请输入应用名称"
  exit 2
fi

# 应用版本号
appVersion=$3
if [ -z "$appVersion" ]; then
  echo "请输入应用版本号"
  exit 3
fi

# 检查版本号在 framework 目录下是否存在
if [ ! -d "framework/versions/$creatorVersion" ]; then
  echo "生成器版本 $creatorVersion 不存在!创建应用失败!!"
  exit 4
fi

# 调用指定版本下的 _createApp.sh 脚本,需要根据 _createApp.sh 脚本要求传参
. ./framework/versions/$creatorVersion/tools/_createApp.sh $1 $2 $3
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39

从createApp.sh脚本的内容分析,其核心作用在于接收并验证用户传递的参数,然后根据指定的版本信息调用位于 framework/versions/ 目录下对应版本的 _createApp.sh 子脚本来执行实际的项目创建操作。换言之,createApp.sh扮演了引导和参数预处理的角色,而具体的项目构建逻辑实现在各个版本的 _createApp.sh 中。

同样的模式也体现在其他相关脚本中,如build.sh和run.sh。build.sh脚本负责调用对应的 _build.sh 子脚本进行构建任务,而run.sh脚本则是通过调用 _run.sh 子脚本来执行项目的运行操作。这些主脚本与子脚本之间的关系构成了一个模块化的执行结构,每个主脚本作为对外接口统一处理输入和调度,而具体功能的实现则分散在各版本的子脚本中。

这样设计的好处是,可以充分发挥各个版本的功能模块化,每个版本都可以独立扩展和修改,而不会影响其他版本。

2.2 _createApp.sh 文件

_createApp.sh 文件的代码如下:

#!/bin/bash

# 用法:./_createApp.sh [creatorVersion] [appName] [appVersion]

set -e # 遇到错误时退出脚本

# 创建应用目录
mkdir -p apps/$appName # 创建应用目录

# 如果 Dockfile 文件不存在,则创建一个模版
if [ ! -f "apps/$appName/Dockerfile" ]; then
  echo "FROM busybox:latest" > apps/$appName/Dockerfile
fi

# 生成配置文件
ec
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/你好赵伟/article/detail/388955
推荐阅读
相关标签
  

闽ICP备14008679号