Docker简单管理脚本


#!/bin/bash
​
green(){
​
        back='\e[0m'
        gr='\e[0;32m'
        echo -e "${gr}$1${back}"
}
​
red(){
​
        re='\e[1;31m'
        back='\e[0m'
        echo -e "${re}$1${back}"
}
​
show_container(){
    green "已经存在的容器: "
    green "-----------------------------------------------"
    docker ps -a | awk 'BEGIN{print "\tID","\t\tIMAGES","\t\tNAME"}NR!=1{print "  "$1,"\t\t"$2,"\t\t"$NF}'
    green "-----------------------------------------------"
}# 创建
​
create_bridge(){
    docker images
    green "请输入镜像名称: "
    read images_name
    show_container
    green "请输入新容器名称: "
    read container_name
    docker run --name $container_name -dit $images_name /bin/bash &> /dev/null
    pd=`docker ps | awk '{print $NF}' | grep -v "NAMES" | grep -x $container_name | wc -l`
    if [ $pd -eq 1 ]
    then
        green "容器 [$container_name] 创建并运行成功"
    else
        red "容器 [$container_name] 运行失败"
    fi
}
​
create_none(){
    docker images
    green "请输入镜像名称: "
    read images_name
    show_container
    green "请输入新容器名称: "
    read container_name
    # 获取宿主机的 docker0 的 ip
    docker0_ip=`ifconfig | grep -1 docker0 | awk '/inet/{print $2}'`
    # 获取 docker0ip 的网段
    docker0_wd=`echo $docker0_ip | sed "s/\([0-9]*\)\.\([0-9]*\)\.\([0-9]*\)\.\([0-9]*\)/\1.\2.\3.0\/16/"`
    green "请输入网段为 $docker0_wd 的固定ip: " 
    read ip
    docker run --name $container_name -dit --net=none $images_name /bin/bash &> /dev/null
    # 获取容器的进程 pid
    pid_num=`docker inspect -f "{{.State.Pid}}" $container_name`
    mkdir /var/run/netns &> /dev/null
    ln -s /proc/$pid_num/ns/net /var/run/netns/$pid_num &> /dev/null
    # 获取对应容器的 id 的前 10 个字符
    number=`docker ps -a | awk '/[0-9a-z]*\ '"$container_name"'$/{print $1}' | cut -c 1-10`
    ip link add veth_$number type veth peer name X
    brctl addif docker0 veth_$number
    ip link set veth_$number up
    ip link set X netns $pid_num
    ip netns exec $pid_num ip link set dev X name eth0
    ip netns exec $pid_num ip link set eth0 up
    ip netns exec $pid_num ip addr add $ip/16 dev eth0
    ip netns exec $pid_num ip route add default via $docker0_ip
    # 判断该容器是否运行起来
    pd=`docker ps | awk '{print $NF}' | grep -v "NAMES" | grep -x $container_name | wc -l`
    if [ $pd -eq 1 ]
    then
        green "容器 [$container_name] 创建并运行成功"
    else
        red "容器 [$container_name] 运行失败"
    fi
}
​
create(){
clear
while true
do
cat<<EOF
----------------------------
    1. 随机IP(bridge)
    2. 固定IP(none)
    q. 返回
----------------------------
EOF
green "请输入操作选项[1|2|q]: "
read option
case $option in
    1)
        create_bridge
        ;;
    2)
        create_none
        ;;
    q)
        break
        ;;
    *)
        red "请输入正确的选项"
        ;;
esac
done
}
​
​
# 删除
​
delete_one(){
    show_container 
    green "请输入要删除的容器名称: " 
    read name
    docker rm -f $name &> /dev/null
    green "容器 [$name] 删除成功"
}
​
delete_all(){
    show_container
    red "确定将所有容器全部删除吗?(y/n)"
    read option
    case $option in
        y|yes|Y|YES)
            docker rm -f $(docker ps -qa)
            green "所有容器删除成功"
            ;;
        n|N|NO|no)
            green "感谢你的谨慎^-^"
            ;;
        *)
            red "请输入正确的选项"
            ;;
    esac
}
​
delete(){
clear
while true
do
cat<<EOF
----------------------------
    1. 删除单个容器
    2. 删除所有容器
    q. 返回
----------------------------
EOF
    green "请输入操作选项[1|2|q]: "
    read option
    case $option in
        1)
            delete_one
            ;;
        2)
            delete_all
            ;;
        q)
            break
            ;;
        *)
            red "请输入正确的选项"
            ;;
    esac
done
}
​
​
# 整体操作
​
operation(){
while true
do
clear
cat<<EOF
----------------------------
    1. 创建容器
    2. 删除容器
    q. 退出
----------------------------
EOF
    green "请输入操作选项[1|2|q]: "
    read option
    case $option in
        1)
            create
            ;;
        2)
            delete
            ;;
        q)
            exit
            ;;
        *)
            red "请输入正确的选项"
            ;;
    esac
done
}
​
operation

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值