1
0
mirror of https://github.com/142vip/408CSFamily.git synced 2026-02-04 02:53:21 +08:00
Files
408CSFamily/scripts/docker
2023-09-06 19:24:23 +08:00

203 lines
4.4 KiB
JavaScript
Executable File
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
#!/usr/bin/env node
/**
*
* 例如:
* - ./scripts/network create
* - ./scripts/network inspect
* - ./scripts/network rm
* - ./scripts/network ls
*/
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',
}
const SupportScriptsInContainer={
run:'',
rm:'',
ps:'docker ps'
}
function getContainerCommand(){
const scriptName=process.argv[3];
if(scriptName==='rm')
return SupportScriptsInContainer.rm
if(scriptName==='run')
return SupportScriptsInContainer.run
if(scriptName==='ps')
return SupportScriptsInContainer.ps
return SupportScriptsInContainer.run
}
const SupportScriptsInImage={
rm:'docker rmi **',
ps:'docker images'
}
function getContainerCommand(){
const scriptName=process.argv[3];
if(scriptName==='rm')
return SupportScriptsInContainer.rm
if(scriptName==='run')
return SupportScriptsInContainer.run
if(scriptName==='ps')
return SupportScriptsInContainer.ps
return SupportScriptsInContainer.run
}
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 getNetworkCommand(){
const scriptName=process.argv[3];
if(SupportScriptsInNetWork.hasOwnProperty(scriptName)){
return SupportScriptsInNetWork[scriptName]
}
if(scriptName==='ls')
return SupportScriptsInNetWork.ls
if(scriptName==='run')
return SupportScriptsInNetWork.create
if(scriptName==='ps')
return SupportScriptsInNetWork.rm
if(scriptName==='inspect')
return SupportScriptsInNetWork.inspect
}
// 支持的命令
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}
`
}
/**
* 获取需要执行的shell命令
* @param scriptName
* @returns {string}
*/
function getCommand(scriptName){
let deployCommand=SupportScripts.ls
switch (scriptName) {
case 'container':
return getContainerCommand();
case 'network':
break;
case 'image':
break;
}
if(scriptName==='ls'){
deployCommand=SupportScripts.ls
}
// 部署到Github
if(scriptName==='rm'){
deployCommand=SupportScripts.rm
}
if(scriptName==='create'){
deployCommand=SupportScripts.create
}
if(scriptName==='inspect'){
deployCommand=SupportScripts.inspect
}
return deployCommand
}
// 执行
;(async ()=>{
const command=getCommand(scriptName)
await execShell(command)
})()