Docker容器脚本编写(Macvlan)

要创建一个包含Docker容器操作的shell脚本(例如创建、查看状态、停止和启动容器等),你可以按照以下步骤来编写:

首先,创建一个新的文本文件,并将其命名为docker_operations.sh。然后,使用文本编辑器(如vim或nano)打开此文件,开始编写脚本。

复制代码
#!/bin/bash

# 定义网络名和基本容器配置
CONTAINER_NAME="net-1"
VOLUME_MOUNT="-v /home/norten/Public/tools:/mnt"
IMAGE_NAME="ubuntu"

# 检查是否安装了docker,如果没有则提示安装
if ! command -v docker &> /dev/null; then
    echo "Docker is not installed. Please install Docker and try again."
    exit 1
fi

# 动态创建并运行容器的函数
function create_and_start_container() {
    local num="$1"
    local CONTAINER_NAME="container-$num"
    local IP_ADDRESS="192.168.0.$((60 + num))"
    
    docker run -itd \
        --name $CONTAINER_NAME \
        --network=$NETWORK_NAME \
        --ip=$IP_ADDRESS \
        $VOLUME_MOUNT \
        $IMAGE_NAME
    echo "Container $CONTAINER_NAME created and started with IP $IP_ADDRESS."
}

# 查看容器日志
function view_container_logs() {
    docker logs $CONTAINER_NAME
}

# 查看容器状态
function check_container_status() {
    docker ps -a | grep $CONTAINER_NAME
}

# 停止容器
function stop_container() {
    docker stop $CONTAINER_NAME
    echo "Container $CONTAINER_NAME stopped."
}

# 启动已停止的容器
function start_container() {
    docker start $CONTAINER_NAME
    echo "Container $CONTAINER_NAME started."
}

# 删除容器
function remove_container() {
    docker rm -f $CONTAINER_NAME
    echo "Container $CONTAINER_NAME removed."
}

# 主程序
case "$1" in
    create)
        create_and_start_container
        ;;
    logs)
        view_container_logs
        ;;
    status)
        check_container_status
        ;;
    stop)
        stop_container
        ;;
    start)
        start_container
        ;;
    remove)
        remove_container
        ;;
    *)
        echo "Usage: $0 {create|logs|status|stop|start|remove}"
        exit 1
esac

exit 0

这个脚本定义了一些基本的函数,分别对应于创建并启动容器、查看日志、检查状态、停止、启动和删除容器的操作。你可以根据需要修改容器名、网络名、IP地址以及挂载的目录路径等。

保存文件后,给脚本执行权限:

复制代码
chmod +x docker_operations.sh

现在你可以通过以下方式调用不同的操作:

复制代码
./docker_operations.sh create    # 创建并启动容器
./docker_operations.sh logs     # 查看容器日志
./docker_operations.sh status  # 查看容器状态
./docker_operations.sh stop     # 停止容器
./docker_operations.sh start   # 启动容器
./docker_operations.sh remove  # 删除容器

"$1"表示获取脚本运行时的第一个参数。

复制代码
#!/bin/bash

# 定义网络名和基本容器配置
NETWORK_NAME="net-1"
VOLUME_MOUNT="-v /home/norten/Public/tools:/mnt"
IMAGE_NAME="ubuntu"

# 检查是否安装了docker
if ! command -v docker &> /dev/null; then
    echo "Docker is not installed. Please install Docker and try again."
    exit 1
fi

# 查看帮助命令
function help() {
    docker logs $CONTAINER_NAME
}

# 动态创建并运行容器的函数
function create_and_start_container() {
    local num="$1"
    local CONTAINER_NAME="container-$num"
    local IP_ADDRESS="192.168.0.$((60 + num))"
    
    docker run -itd \
        --name $CONTAINER_NAME \
        --network=$NETWORK_NAME \
        --ip=$IP_ADDRESS \
        $VOLUME_MOUNT \
        $IMAGE_NAME
    echo "Container $CONTAINER_NAME created and started with IP $IP_ADDRESS."
}

# 主程序
#[ -z "$2" ]检查第二个参数($2)是否存在,如果为空(即没有提供第二个参数),则打印一条错误信息,指导用户如何正确使用脚本,并以错误码1退出。
case "$1" in
    create)
        if [ -z "$2" ]; then
            echo "Please provide a number to create the container (e.g., ./docker_operations.sh create 31)."
            exit 1
        fi
        create_and_start_container "$2"  # 修正函数名为create_and_start_container
        ;;
    help)  # 新增的帮助选项
        echo "Usage: $0 {create <num>|logs|status|stop|start|remove}"
        echo "  create <num>: 创建一个容器,其中<num>是要创建的容器编号。"
        echo "  logs: 查看指定容器的日志(功能待实现)"
        echo "  status: 查看容器状态(功能待实现)"
        echo "  stop: 停止指定容器(功能待实现)"
        echo "  start: 启动指定容器(功能待实现)"
        echo "  remove: 删除指定容器(功能待实现)"
        exit 0
        ;;
    logs|status|stop|start|remove)
        echo "Functionality for $1 is not updated to handle numbered containers yet."
        exit 1
        ;;
    *)
        echo "Invalid command. Use './docker_operations.sh help' for usage instructions."
        exit 1
        ;;
esac

exit 0
相关推荐
一叶之秋14122 小时前
Linux基础IO
linux·运维·服务器
longerxin20205 小时前
在 Linux 上使用 SCP 将文件传输到 Windows(已开启 SSH)
linux·运维·ssh
zhaotiannuo_19988 小时前
渗透测试之docker
运维·docker·容器
王正南8 小时前
kali-linux 虚拟机连接安卓模拟器
android·linux·运维·虚拟机连接模拟器·安卓模拟器,linux虚拟机
三不原则9 小时前
故障案例:容器启动失败排查(AI运维场景)——从日志分析到根因定位
运维·人工智能·kubernetes
吳所畏惧9 小时前
Linux环境/麒麟V10SP3下离线安装Redis、修改默认密码并设置Redis开机自启动
linux·运维·服务器·redis·中间件·架构·ssh
孤岛悬城9 小时前
54 安装k8s-1.20.11
云原生·容器·kubernetes
yueguangni9 小时前
sysstat 版本 10.1.5 是 CentOS 7 的默认版本,默认情况下确实不显示 %wait 字段。需要升级到新版sysstat
linux·运维·centos
funfan05179 小时前
【运维】MySQL数据库全量备份与恢复实战指南:从入门到精通
运维·数据库·mysql
-dcr10 小时前
49.python自动化
运维·python·自动化