docker自动构建脚本

#/bin/bash

# 安装 Docker
install_docker() {
    if ! command -v docker &> /dev/null; then
        echo "docker未安装,正在安装..."
        sudo apt update
        sudo curl -fsSL https://get.docker.com | bash -s docker --mirror Aliyun 
        
    else
        echo "(√) docker已安装"
    fi
    sudo docker -v
}

# 安装 Docker-Compose
install_docker_compose() {
    if ! command -v docker-compose &> /dev/null; then
        echo "docker-compose未安装,正在安装..."
        sudo apt update
        sudo curl -L "https://github.com/docker/compose/releases/latest/download/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
        sudo chmod +x /usr/local/bin/docker-compose
    else
        echo "(√) docker-compose已安装"
    fi
    sudo docker-compose -v
}

# 设置docker命令简写
set_docker_alias() {
    if ! grep -q "alias dps=\"docker ps --format \\\"table {{.ID}}\\t{{.Names}}\\t{{.Ports}}\\\"\"" /root/.bashrc; then
    echo 'alias dps="docker ps --format \\"table {{.ID}}\\t{{.Names}}\\t{{.Ports}}\\""' >> /root/.bashrc
    fi

    if ! grep -q "alias dpsa=\"docker ps -a --format \\\"table {{.ID}}\\t{{.Image}}\\t{{.Ports}}\\t{{.Status}}\\t{{.Names}}\\\"\"" /root/.bashrc; then
        echo 'alias dpsa="docker ps -a --format \\"table {{.ID}}\\t{{.Image}}\\t{{.Ports}}\\t{{.Status}}\\t{{.Names}}\\""' >> /root/.bashrc
    fi

    if ! grep -q "alias di=\"docker images\"" /root/.bashrc; then
        echo 'alias di="docker images"' >> /root/.bashrc
    fi

    if ! grep -q "alias dstart=\"docker start\"" /root/.bashrc; then
        echo 'alias dstart="docker start"' >> /root/.bashrc
    fi

    if ! grep -q "alias dstop=\"docker stop\"" /root/.bashrc; then
        echo 'alias dstop="docker stop"' >> /root/.bashrc
    fi

    if ! grep -q "alias de=\"docker exec\"" /root/.bashrc; then
        echo 'alias de="docker exec"' >> /root/.bashrc
    fi

    source /root/.bashrc
}


# 拉取指定镜像和版本
pull_docker_image() {
    local image_name=$1
    local image_version=$2

    # 检查本地是否已有该镜像
    if docker image inspect $image_name:$image_version &> /dev/null; then
        echo -e "==> $image_name $image_version 镜像已经存在于本地。\n"
    else
        # 拉取镜像
        docker pull $image_name:$image_version

        # 检查拉取是否成功
        if [ $? -eq 0 ]; then
            echo "$image_name $image_version 镜像下载成功!"
        else
            echo "(×) 下载失败!!!"
        fi
    fi
}

docker_pull(){
    while true; do
        # 显示选择表格
        echo "========= docker pull ========="
        echo "请选择要拉取的镜像(q退出):"
        echo "1. MySQL"
        echo "2. Nginx"
        echo "3. Redis"
        echo "4. 自定义"


        # 提示用户输入选择
        read -p "输入相应的数字序号: " choice

        # 根据用户选择调用相应的函数
        case $choice in
            1)
                read -p "请输入要下载的MySQL版本: " mysql_version
                pull_docker_image "mysql" $mysql_version
                ;;
            2)
                read -p "请输入要下载的Nginx版本: " nginx_version
                pull_docker_image "nginx" $nginx_version
                ;;
            3)
                read -p "请输入要下载的Redis版本: " redis_version
                pull_docker_image "redis" $redis_version
                ;;
            4)
                read -p "请输入要下载的镜像名称image_name: " custom_image_name
                read -p "请输入要下载的镜像版本image_version: " custom_image_version
                # 如果用户未提供版本,默认设置为 latest
                if [ -z "$custom_image_version" ]; then
                    custom_image_version="latest"
                fi
                pull_docker_image $custom_image_name $custom_image_version
                ;;
            q)
                break
                ;;
            *)
                echo "无效的选择,请输入正确的数字序号。"
                ;;
        esac
    done
}


docker_run(){
    echo "-----------------------------"
    echo "========= docker run ========="
    read -p "请输入镜像名称(images): " image_name
    read -p "请输入容器名称(--name): " container_name
    read -p "请输入端口映射(-p): 
    " port_mapping
    read -p "请输入其他docker run参数(可选,如-v、-e、--privileged、--network、-m、-uroot): 
    " other_params
    echo "-----------------------------"

    docker_run_command="docker run -d"

    if [ -n "$container_name" ]; then
        docker_run_command+=" --name $container_name"
    fi

    if [ -n "$port_mapping" ]; then
        docker_run_command+=" -p $port_mapping"
    fi

    # 构建docker run命令
    docker_run_command+=" $other_params $image_name"

    # 执行docker run命令
    echo -e "执行的docker run命令为:\n$docker_run_command"

    # 检查docker run命令执行结果
    if eval "$docker_run_command"; then
        echo "(√) $container_name 已启动~"
    else
        echo "(×) $container_name 启动失败!"
    fi

    
    docker ps
    echo "=============================="
}

# 主函数
main() {
    sudo apt update
    echo "-----------------------------"
    echo "开始安装Docker..."
    install_docker
    echo "开始安装Docker-Compose..."
    install_docker_compose
    # set_docker_alias
    echo -e "-----------------------------\n"

    # 可直接run 无需pull
    # docker_pull

    docker_run

}

# 执行主函数
main

  • 3
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值