神末shenmo
deepin
2024-05-20 03:29 Spark-App
Solutions Team Moderator
啧啧啧(摇头,称赞)
有点意思,先mark
用deb分发docker image的架构,似乎也不错
做到服务的傻瓜式部署
Reply Like 2 View the author
啧啧啧(摇头,称赞)
有点意思,先mark
用deb分发docker image的架构,似乎也不错
做到服务的傻瓜式部署
有点类似ACE
妙啊
mark
有点类似ACE
和ACE的单包部署流程差不多
只是ACE部署是手搓的,这个直接用docker的基础设施
啧啧啧(摇头,称赞)
有点意思,先mark
用deb分发docker image的架构,似乎也不错
做到服务的傻瓜式部署
就是为了方便使用docker 镜像弄的,适合一些docker服务类,web应用
直接安装就可以
就是不太适合乌班图,乌班图的桌面启动器文件权限有点奇怪就是用不了
感谢分享。
先收藏了,认真学习。。。
Popular Ranking
ChangePopular Events
More
https://www.i8520.cn/
现在docker容器使用越来越频繁 所以做了一个 打包 docker 镜像 导入 这样一个模板
打包deb-自动导入docker镜像-自动创建容器
使用模板打包的 ollama 镜像 一键安装使用很方便 https://cloud.189.cn/t/zauQVbMN3yEf (访问码:rp3i)
前章:
bash shell https://bbs.deepin.org/zh/post/258659
安装 docker https://bbs.deepin.org/zh/post/258166
docker 使用总结 http://t.csdnimg.cn/b5Di6
lib目录脚本的使用说明 https://note.youdao.com/s/BBlPM7OJ
安装 7z
sudo apt-get update
sudo apt-get install p7zip-full
打包deb-自动导入docker镜像-自动创建容器
启动器运行流程
这个要怎么实现呢,先看一下怎个项目的目录结构,可以看出主要使用功能是
cn.i8520.ubuntu2204/DEBIAN/postinst 脚本实现的
模板下载 cn.i8520.ubuntu2204.zip
注意事项:
应用名称可以自己改,改了以后要修改以下文件
cn.i8520.ubuntu2204/DEBIAN/control Package: cn.i8520.ubuntu2204 cn.i8520.ubuntu2204改成你的应用名字 #------------------------------------ 以下文件需要修改变量的值 DebTemplate="cn.i8520.ubuntu2204" cn.i8520.ubuntu2204改成你的应用名字 cn.i8520.ubuntu2204/DEBIAN/postinst cn.i8520.ubuntu2204/DEBIAN/postrm cn.i8520.ubuntu2204/opt/CN-i8520-MILLET/cn.i8520.ubuntu2204/bin/cmd-link-ServersFile cn.i8520.ubuntu2204/opt/CN-i8520-MILLET/cn.i8520.ubuntu2204/bin/RUN
下面来拆分一下 postinst 脚本实现的代码
1.创建启动文件
自己准备图片放到 opt/CN-i8520-MILLET/cn.i8520.ubuntu2204/icon 里面
首先我们需要自动获取 /opt/CN-i8520-MILLET/cn.i8520.ubuntu2204/icon 里面的图标名字
可以写一个函数来获取,通过字符串拼接就可以实现
#获取图标文件名 DebTemplate="cn.i8520.ubuntu2204" IcomFileDir="/opt/CN-i8520-MILLET/${DebTemplate}/icon" IcomFileDirX(){ cd ${IcomFileDir} ls }
与DebTemplate="cn.i8520.ubuntu2204"的值作为desktop文件的名字,这个也不用管
#快捷方式/启动器名字 AppName="AppNam" #项目名字 DebTemplate="cn.i8520.ubuntu2204" #创建.desktop文件 DesktopFileDir="/opt/CN-i8520-MILLET/${DebTemplate}/DesktopStartupFile" ExecDIR="/opt/CN-i8520-MILLET/${DebTemplate}/bin/cmd-link-ServersFile" if [ ! -f "${DesktopFileDir}/${DebTemplate}.desktop" ] then cat > ${DesktopFileDir}/${DebTemplate}.desktop<<EOT #!/usr/bin/env xdg-open [Desktop Entry] Name=${AppName} Name[zh_CN]=${AppName} Comment=${AppName} Terminal=false Type=Application Categories=Graphics; StartupNotify=true Actions=Configure;Capture; Exec=${ExecDIR} Icon=${IcomFileDir}/`IcomFileDirX` EOT #附加执行权限 /opt/CN-i8520-MILLET/${DebTemplate}/lib/CCCX 755 ${DesktopFileDir}/${DebTemplate}.desktop /opt/CN-i8520-MILLET/${DebTemplate}/lib/CCCX ${DesktopFileDir}/${DebTemplate}.desktop #复制启动器文件到开始菜单和桌面 cp -r ${DesktopFileDir}/${DebTemplate}.desktop /usr/share/applications cp -r ${DesktopFileDir}/${DebTemplate}.desktop "${MY_Desktop}" fi
2.导入镜像
7z压缩包放倒opt/CN-i8520-MILLET/cn.i8520.ubuntu2204/DockerImage
首先需要自己准备tar镜像并且压缩成7z压缩包这样可以节省DEB安装包的体积
还是写函数来进行字符串的拼接
获取7z压缩包的名字
ImageDir=/opt/CN-i8520-MILLET/${DebTemplate}/DockerImage #获取7z文件名的函数 File7z(){ cd ${ImageDir} ls | grep ".7z" } #然后是解压7z 7z x "${ImageDir}/`File7z`" -o${ImageDir}
在来获取镜像名字并导入镜像
#获得镜像名字的函数 ImageFile(){ cd ${ImageDir} ls | grep ".tar" } #导入镜像,并且输出一个日志文件,为自动创建容器做准备 docker load -i "${ImageDir}/`ImageFile`" > /opt/CN-i8520-MILLET/${DebTemplate}/image.docker.load.log
我们把代码重解压7Z到导入镜像整合一下
#------------------------------- # 倒入镜像 #------------------------------- ImageDir=/opt/CN-i8520-MILLET/${DebTemplate}/DockerImage #获取7z文件名的函数 File7z(){ cd ${ImageDir} ls | grep ".7z" } #获得镜像名字的函数 ImageFile(){ cd ${ImageDir} ls | grep ".tar" } if [ -f "/opt/CN-i8520-MILLET/${DebTemplate}/image.docker.load.lock" ]; then echo "镜像已倒入" else echo "" > /opt/CN-i8520-MILLET/${DebTemplate}/image.docker.load.lock #解压镜像 7z x "${ImageDir}/`File7z`" -o${ImageDir} sleep 1 #倒入镜像 docker load -i "${ImageDir}/`ImageFile`" > /opt/CN-i8520-MILLET/${DebTemplate}/image.docker.load.log sleep 1 rm -rf "${ImageDir}/`ImageFile`" echo "镜像已倒入" fi
接下来就是创建容器
docker load -i "${ImageDir}/`ImageFile`" > /opt/CN-i8520-MILLET/${DebTemplate}/image.docker.load.log 这条命令会把导入镜像时最后一行回显写入 /opt/CN-i8520-MILLET/${DebTemplate}/image.docker.load.log 内容大概是这样的 三段 xxx image: ubuntu/22.04:naw 我们就要利用 ubuntu/22.04:naw 第三段 来创建容器 image_docker_load_log="/opt/CN-i8520-MILLET/${DebTemplate}/image.docker.load.log" cat ${image_docker_load_log} | grep "image:" | awk '{print $3}'
下面是具体代码:
注意事项:也就是根据你的镜像需求来写,这个是需要手动改的上面的都是自动实现是
#容器名字 ContainerName="AAAA" 定义的是容器的名字 在postinst脚本开头
#------------------------------- # 创建容器 #------------------------------- Docker_Image_RUN(){ if [ -f "/opt/CN-i8520-MILLET/${DebTemplate}/Docker_Image_RUN.lock" ]; then echo "创建容器 OK" else echo "" > /opt/CN-i8520-MILLET/${DebTemplate}/Docker_Image_RUN.lock image_docker_load_log="/opt/CN-i8520-MILLET/${DebTemplate}/image.docker.load.log" REPOSITORY_TAG=`cat ${image_docker_load_log} | grep "image:" | awk '{print $3}'` REPOSITORY_TAG_NAME="${REPOSITORY_TAG}" #开放的端口 PORT_A="-p 18598:18598 -p 18605:18605 -p 30002:30002 -p 30011:30011" #容器名字 CONTAINER_NAME="${ContainerName}" #映射路径 VOLUME_A="-v ${MY_USER_DIR}/data1:/data1" CMD_INI='/sbin/init' docker run -d --name ${CONTAINER_NAME} ${PORT_A} --privileged=true ${VOLUME_A} ${REPOSITORY_TAG_NAME} ${CMD_INI} fi } Docker_Image_RUN
接下来就是 postrm 脚本很简单 具体自己看一下就明白
#!/bin/bash DebTemplate="cn.i8520.ubuntu2204" NninstalDirShrll="/opt/CN-i8520-MILLET/uninstal/${DebTemplate}" #-------------------------- # 写一个善后函数 叫做 Delete files #------------------------- DeleteFiles(){ MY_USER_DIR=`${NninstalDirShrll}/MY-USER-PWD 1` MY_USER_NAME=`${NninstalDirShrll}/MY-USER-PWD` MY_Desktop=`${NninstalDirShrll}/MY-Desktop` rm -rf /opt/CN-i8520-MILLET/${DebTemplate} rm -rf ${NninstalDirShrll} rm -rf /usr/share/applications/${DebTemplate}.desktop rm -rf ${MY_Desktop}/${DebTemplate}.desktop #把你要善后删除的什么东西的代码写这里 } #-------------------------- # 执行部分 #------------------------ if [ -d "${NninstalDirShrll}" ]; then #执行善后的函数 DeleteFiles else echo "OK" fi exit 0
最后就是启动器文件,打开进入容器的一个流程
#容器名字 ContainerName="AAAA" #容器名字到保存到 ContainerName.TXT echo "${ContainerName}" > /opt/CN-i8520-MILLET/${DebTemplate}/ContainerName.TXT #------------------- #ContainerName.TXT 被以下下文件使用 # 作为终端窗口名字 opt/CN-i8520-MILLET/cn.i8520.ubuntu2204/bin/cmd-link-ServersFile # 作为容器名字来运行容器 opt/CN-i8520-MILLET/cn.i8520.ubuntu2204/bin/RUN