go restful 接口、shell 实现docker容器增减

4 篇文章 0 订阅
2 篇文章 0 订阅

shell 控制docker container 增减

#!/bin/bash


#if deal equals 0, run new container
#else if deal equals 1, stop and remove container
DEAL=$1

PORT=$2

if [ $DEAL -eq 0 ]
then
  echo "[log]run container zukalp$PORT"
  docker run -p $PORT:9999 --cap-add=SYS_ADMIN --name zukalp$PORT zukrec_alpine_29
else
  echo "[log]rm container zukalp$PORT"
  docker stop zukalp$PORT
  docker rm zukalp$PORT
fi

使用 gin 编写restful 接口,调用 shell脚本

package main

import "github.com/gin-gonic/gin"
import "os/exec"
import "strconv"
import "bytes"
import "github.com/gin-contrib/cors"

var num [5] int

func main() {

    r := gin.Default()

    //cors
	r.Use(cors.New(cors.Config{
        AllowOrigins:  []string{"*"},
        AllowMethods:  []string{"PUT", "PATCH", "GET", "POST", "DELETE"},
        AllowHeaders:  []string{"content-type"},
        ExposeHeaders: []string{"X-Total-Count"},
    }))

    //run a container, uplimit is 5
    r.GET("/run", func(c *gin.Context) {

    	var port int
    	i := 0
        for ; i < 5; i++ {
        	if num[i] == 0 {
        		num[i] = 9994+i
        		port = num[i]
        		break
        	}
        }
        if i < 5 {
        	cmd := exec.Command("/bin/bash", "-c", "./docker.sh 0 " + strconv.Itoa(port))
		    cmd.Start()
        }
        c.JSON(200, gin.H{
            "port": port,
        })
    })

    //remove a container which port matchs the parameter [:port]
    r.GET("/rm/:port", func(c *gin.Context) {

    	port,err := strconv.Atoi(c.Param("port"))
    	i := 0
        for ; i < 5; i++ {
        	if num[i] == port {
        		num[i] = 0
        		break
        	}
        }
        var outStr string
        if i < 5 {
        	cmd := exec.Command("/bin/bash", "-c", "./docker.sh 1 " + strconv.Itoa(port))
	        var out bytes.Buffer
		    cmd.Stdout = &out
		    cmd.Run()
		    outStr = out.String()
        }else {
        	outStr = "no this task"
        }
        c.JSON(200, gin.H{
            "port": port,
            "out": outStr,
            "err": err,
        })
    })

    r.Run(":9999") // listen on 0.0.0.0:9999
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值