# makeImages **Repository Path**: hong-fa-lin/make-images ## Basic Information - **Project Name**: makeImages - **Description**: 镜像构建脚本 - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 2 - **Created**: 2021-12-21 - **Last Updated**: 2022-06-01 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README ## 帮助列表\n helpList="help using add frame" ## 使用帮助\n helpHelp='\n If you cannot view Chinese, please download and view the README.md file\n 构建镜像帮助使用 ./run.sh --help using\n 新增新的镜像构建功能使用 ./run.sh --help add\n 构建脚本功能和流程说明 ./run.sh --help frame\n ' usingHelp='\n ## 镜像构建脚本使用指导\n 1. 设置场景\n 打开config/cfg.sh 设置场景\n \n 2. 准备文件\n 根据sourceFile/fileList.sh将需要打的镜像的所有依赖文件放到sourceFile文件夹\n \n 3. 构建镜像\n ·选择需要执行构建的一个或多个镜像,选择一个或多个指令,执行./run.sh\n ·(指令、镜像参数均无顺序要求,脚本会按指定顺序执行)\n ·当前所有镜像为\n · infer infer_3c infer_sem train mindinsight modelarts license access\n · (推理 推理3c 推理sem 训练 可视化 上云 license access)\n · 其中上云镜像还未整理纳入\n ·当前所有的指令列表为(清理功能不区分镜像)\n · --pre --renew --check --build --saving --clear1 --clear2 --clear3 --clear4 \n · (准备:转移文件、解压等\n · (更新Dockerfile:仅更新config里面的Dockerfile后重新生成目标Dockerfile使用\n · (检查:获取文件版本信息并记录,验证文件版本是否配套,版本信息记录进 makeImage/imageVersion.list\n · (构建:制作镜像,镜像名记录进 makeImage/imageName.list\n · (保存:将镜像打成tar包并保存在imageBag文件夹下,镜像包名记录进 makeImage/imageName.list\n · (清理1:删除构建镜像的中间文件,适合在原有构建包下修改部分源文件重新构建镜像的场景\n · (清理2:清理1的基础上,增加删除镜像压缩包,用于节约空间并保留重新制作镜像功能的场景\n · (清理3:清理2的基础上,增加删除源文件,用于清理空间,但是方便回溯查看版本的场景\n · (清理4:清理3的基础上,增加删除所有记录文件,用于复制上一版本的包直接构建新版本的场景\n ·未选定镜像时,构建cfg.sh中的预设定镜像列表 presetImage\n ·未选定指令时,执行cfg.sh中的预设定指令列表 presetAction\n \n 示例1:根据sourceFile中有的文件构建所有镜像,执行所有步骤\n 命令:./run.sh \n 示例2:推理镜像构建镜像步骤执行失败,仅需重新构建推理、训练镜像并保存\n 命令:./run.sh infer train --build --saving\n 示例3:推理镜像构建失败,发现需要修改配置,修改完配置重新构建\n 命令:./run.sh infer --pre --build\n ' addHelp='\n ## 增加新的镜像构建脚本指导\n 0. 指定镜像名简称,如推理镜像为"infer"、训练镜像为"train"\n 将"简称"加入到"config/cfg.sh"文件的"allImage"中,根据是否默认构建可选加入到"presetImage"变量中\n 将"简称"加入到"run.sh"的流程开始部分,while循环的简称列表中\n \n 1. 需要的文件\n 将构建镜像需要的文件列表增加在"sourceFile/fileList.sh"中,格式为\n 简称 File="文件1 文件2 ..."\n 部分不需要修改,每次都需要使用的文件,如python包、pip清单、启动脚本\n 可以直接提供放在"config/imageFile/简称/文件夹"中\n 或者记录在"fileList.sh"待构建镜像时根据提示放入"sourceFile"文件夹中\n 可参考其他镜像\n \n 2. Dockerfile\n 在"config/imageFile"中以"简称"为名增加文件夹,Dockerfile放在该文件夹内\n Dockerfile中可设定变量,目前有\n "#" 仅在内网修改apt源\n "proxyValue" 为自定义代理\n "pipValue" 为自定义pip源\n 若需新增自定义变量,需在"run.sh"的"pre"函数中定义切换替换规则\n \n 3. 构建镜像前的特殊操作\n 如需要解压压缩包、复制版本信息文件等构建镜像前的特定操作,步骤记录在"run.sh"的"pre"函数特定操作中\n \n 4. 镜像版本号\n 一般以构建镜像文件中更新频率最高的依赖文件版本号作为镜像版本号以便回溯\n 将获取该文件版本信息的命令记录在"run.sh"的"check"函数中,最后赋值给"简称Verison"变量\n \n *5. 在使用删除功能时,可以指定保留的文件,将该文件记录在"config/cfg.sh"的"saveFile"变量\n ' frameHelp='\n ## 脚本框架介绍\n 0. 脚本整理采用变量记录的方式,将各种信息均记录成列表,由run.sh控制整个流程\n 变动传入参数为镜像列表+操作(函数)列表,不填则用默认参数,默认参数记录在config/cfg.sh\n 文件列表记录在sourceFile/fileList.sh,帮助信息列表记录在README.md\n 中间变量,包含日志record/log,版本信息/record/version.info用于回溯\n 镜像版本号makeImage/imageVersion.list,镜像名(含压缩包名)makeImage/imageName.list用于镜像构建完成后的后续操作\n 整体流程为读取操作列表,按顺序调用各个函数,将镜像列表作为参数,各个函数内循环读取镜像列表执行各个镜像的操作 当前操作包含:\n 1. 预处理\n pre函数:功能包含将一般不会变动的文件从config/imageFile中复制到目标文件夹,一般包含Dockerfile、python三方库列表、启动脚本及不会变动的小文件,根据config/cfg.sh中预设的变量值修改Dockerfile中未指定的变量。读取fileList.sh中记录的文件,并逐个检查是否存在,存在则复制到目标文件夹,不存在则提示错误并将该镜像从后续处理的步骤剔除。针对各个镜像需要的特定步骤,如解压、获取版本信息、修改权限等,分别进行操作\n 2. 检查\n check函数:用于根据文件版本,获取版本信息后记录到imageVersion.info,用于后续构建镜像,作为其版本号,同时对于存在需要统一版本号的文件,在这里可以增加检查版本号是否统一,不统一则提示错误并将该镜像从后续处理步骤中剔除\n 3. 保存\n saving函数:设置标志位,构建镜像完成后进行保存(这里原本是应该在全部镜像构建完成后进行保存,但由于依瞳搭建的服务器存在磁盘空间剩余不足15%会自动删除最新生成的镜像,因此会出现在全部镜像构建完成后需要保存时找不到镜像的情况,故而每次在构建完成后立马保存当前生成的镜像)\n 4. 构建\n build函数:从imageVersion.info获取版本号,根据Dockerfile构建镜像并保存成tar包,将生成的镜像的完整镜像名、镜像id、打包好的镜像包名记录到imageName.list中\n ' tmp='\n # 待优化功能\n 5. 优化文件版本记录清单功能\n 7. 新增启动镜像功能 \n 17. 把版本信息放到镜像里(license和access已完成)\n '