#!/usr/bin/env node /** * docker cli工具 * 例如: * - ./scripts/docker container xxx 容器相关 * - ./scripts/network image xxx 镜像相关 * - ./scripts/docker network xxx 网络相关 */ const { execShell, BaseSetting} = require("./.exec"); const scriptName=process.argv[2]; /** * 网络基础信息 * - 网络名称 * - 子网掩码 * - 网关地址 */ const dockerNetworkInfo={ defaultName:'service_env_net', subnet:'172.30.0.0/24', gateway:'172.30.0.1', } /** * docker containers 容器相关指令 */ const SupportScriptsInContainer={ run:'', rm:'', ps:'docker ps' } /** * docker images 相关脚本指令 */ const SupportScriptsInImage = { rm: 'docker rmi **', ps: 'docker images' } /** * docker network 相关脚本指令 */ const SupportScriptsInNetWork={ ls:'docker network ls', create:[ // 创建网关 ` docker network create \ --subnet=${dockerNetworkInfo.subnet} \ --gateway=${dockerNetworkInfo.gateway} \ ${dockerNetworkInfo.defaultName} `, // 查看创建后基本信息 ` docker network inspect ${dockerNetworkInfo.defaultName} ` ], rm:[ // 参数校验 ` if test -z "${dockerNetworkInfo.defaultName}";then echo "参数错误 网络名称不能为空。脚本执行eg: bash xxx.sh rm 网络名称" exit 1; fi `, // 判断网络是否存在 ` docker network ls | grep -w "${dockerNetworkInfo.defaultName}" if [ $? -eq 1 ] ;then echo "容器网络:${dockerNetworkInfo.defaultName} 不存在,删除无效" exit 1; fi `, // 删除网络 ` docker network rm "${dockerNetworkInfo.defaultName}" ` ], inspect: ` docker network inspect ${dockerNetworkInfo.defaultName} ` } function getContainerCommand(){ const name=process.argv[3]; if(SupportScriptsInContainer.hasOwnProperty(name)){ return SupportScriptsInContainer[name] } // 默认查看所有容器 return SupportScriptsInContainer.ps } function getImageCommand(){ const name=process.argv[3]; if(SupportScriptsInImage.hasOwnProperty(name)){ return SupportScriptsInImage[name] } return SupportScriptsInImage.ps } function getNetworkCommand(){ const name=process.argv[3]; if(SupportScriptsInNetWork.hasOwnProperty(name)){ return SupportScriptsInNetWork[scriptName] } return SupportScriptsInNetWork.ls } // 支持的命令 const SupportScripts={ ls:'docker network ls', create:[ // 创建网关 ` docker network create \ --subnet=${dockerNetworkInfo.subnet} \ --gateway=${dockerNetworkInfo.gateway} \ ${dockerNetworkInfo.defaultName} `, // 查看创建后基本信息 ` docker network inspect ${dockerNetworkInfo.defaultName} ` ], rm:[ // 参数校验 ` if test -z "${dockerNetworkInfo.defaultName}";then echo "参数错误 网络名称不能为空。脚本执行eg: bash xxx.sh rm 网络名称" exit 1; fi `, // 判断网络是否存在 ` docker network ls | grep -w "${dockerNetworkInfo.defaultName}" if [ $? -eq 1 ] ;then echo "容器网络:${dockerNetworkInfo.defaultName} 不存在,删除无效" exit 1; fi `, // 删除网络 ` docker network rm "${dockerNetworkInfo.defaultName}" ` ], inspect: ` docker network inspect ${dockerNetworkInfo.defaultName} ` } function getCommand(){ const scriptName=process.argv[3]; switch (scriptName){ case 'network': return getNetworkCommand() case 'container': return getContainerCommand() case 'image': return getImageCommand() } } // 执行 ;(async ()=>{ const command=getCommand(scriptName) await execShell(command) })()