Docker一键安装脚本信息

Docker一键安装脚本信息

脚本内容:

bash 复制代码
#!/bin/bash

set -e

LOGFILE="setup_docker.log"

# 将输出重定向到日志文件,同时在终端显示
exec > >(tee -i $LOGFILE)
exec 2>&1

# 检查命令是否可用
check_command() {
    command -v "$1" >/dev/null 2>&1 || {
        echo >&2 "$1 是必需的命令但未安装。正在终止。"
        exit 1
    }
}

# 检查网络连接
check_network() {
    echo "检查网络连接..."
    curl -s --head https://www.baidu.com | head -n 1 | grep "200\|301\|302" >/dev/null || {
        echo "无法连接到互联网,请检查网络连接。"
        exit 1
    }
}

# 打印当前内核版本信息
print_kernel_version() {
    echo "当前内核版本:"
    uname -r
}

# 备份 yum 源配置
backup_yum_repos() {
    echo "备份现有的 yum 源配置..."
    sudo cp -r /etc/yum.repos.d /etc/yum.repos.d.backup || {
        echo "备份 yum 源配置失败。正在终止。"
        exit 1
    }
}

# 更新 yum 源为阿里云镜像
update_yum_repos() {
    echo "更新 yum 源为阿里云镜像..."
    sudo curl -o /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo || {
        echo "更新 yum 源失败。正在终止。"
        exit 1
    }
}

# 清理和重新生成 yum 缓存
refresh_yum_cache() {
    echo "清理 yum 缓存..."
    sudo yum clean all || {
        echo "清理 yum 缓存失败。正在终止。"
        exit 1
    }
    echo "重新生成 yum 缓存..."
    sudo yum makecache || {
        echo "生成 yum 缓存失败。正在终止。"
        exit 1
    }
}

# 更新系统
update_system() {
    echo "更新系统软件包..."
    sudo yum update -y || {
        echo "更新系统软件包失败。正在终止。"
        exit 1
    }
}

# 安装必要的软件包
install_packages() {
    echo "安装必要的软件包..."
    sudo yum install -y yum-utils device-mapper-persistent-data lvm2 || {
        echo "安装必要的软件包失败。正在终止。"
        exit 1
    }
}

# 添加 Docker CE 仓库
add_docker_repo() {
    echo "添加 Docker CE 仓库..."
    sudo yum-config-manager --add-repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo || {
        echo "添加 Docker CE 仓库失败。正在终止。"
        exit 1
    }
    echo "替换 Docker CE 仓库的下载地址为阿里云镜像..."
    sudo sed -i 's/download.docker.com/mirrors.aliyun.com\/docker-ce/g' /etc/yum.repos.d/docker-ce.repo || {
        echo "替换 Docker CE 仓库下载地址失败。正在终止。"
        exit 1
    }
}

# 安装 Docker CE
install_docker() {
    echo "安装 Docker CE..."
    sudo yum install -y docker-ce-25.0.5 docker-ce-cli-25.0.5 containerd.io || {
        echo "安装 Docker CE 失败。正在终止。"
        exit 1
    }
}

# 下载并设置 Docker Compose
setup_docker_compose() {
    echo "下载 Docker Compose..."
    sudo curl -L https://gitee.com/fustack/docker-compose/releases/download/v2.24.1/docker-compose-linux-x86_64 -o /usr/local/bin/docker-compose || {
        echo "下载 Docker Compose 失败。正在终止。"
        exit 1
    }
    echo "赋予 Docker Compose 执行权限..."
    sudo chmod +x /usr/local/bin/docker-compose || {
        echo "赋予 Docker Compose 执行权限失败。正在终止。"
        exit 1
    }
}

# 启动和设置 Docker 服务
manage_docker_service() {
    echo "启动 Docker 服务..."
    sudo systemctl start docker || {
        echo "启动 Docker 服务失败。正在终止。"
        exit 1
    }
    echo "设置 Docker 服务开机启动..."
    sudo systemctl enable docker || {
        echo "设置 Docker 服务开机启动失败。正在终止。"
        exit 1
    }
    echo "重启 Docker 服务..."
    sudo systemctl restart docker || {
        echo "重启 Docker 服务失败。正在终止。"
        exit 1
    }
}

# 主函数
main() {
    # 进度提示
    local steps=("检查命令" "检查网络连接" "打印内核版本" "备份 yum 源配置" "更新 yum 源" "清理和生成 yum 缓存" "更新系统" "安装必要软件包" "添加 Docker 仓库" "安装 Docker" "设置 Docker Compose" "管理 Docker 服务")

    # 步骤计数器
    local step_counter=1

    echo "开始执行脚本,共 ${#steps[@]} 个步骤..."

    # 检查必要的命令是否可用
    echo "步骤 ${step_counter}/${#steps[@]}: ${steps[$((step_counter-1))]}"
    check_command curl
    check_command yum
    check_command sudo
    check_command systemctl
    step_counter=$((step_counter + 1))

    # 检查网络连接
    echo "步骤 ${step_counter}/${#steps[@]}: ${steps[$((step_counter-1))]}"
    check_network
    step_counter=$((step_counter + 1))

    echo "步骤 ${step_counter}/${#steps[@]}: ${steps[$((step_counter-1))]}"
    print_kernel_version
    step_counter=$((step_counter + 1))

    echo "步骤 ${step_counter}/${#steps[@]}: ${steps[$((step_counter-1))]}"
    backup_yum_repos
    step_counter=$((step_counter + 1))

    echo "步骤 ${step_counter}/${#steps[@]}: ${steps[$((step_counter-1))]}"
    update_yum_repos
    step_counter=$((step_counter + 1))

    echo "步骤 ${step_counter}/${#steps[@]}: ${steps[$((step_counter-1))]}"
    refresh_yum_cache
    step_counter=$((step_counter + 1))

    echo "步骤 ${step_counter}/${#steps[@]}: ${steps[$((step_counter-1))]}"
    update_system
    step_counter=$((step_counter + 1))

    echo "步骤 ${step_counter}/${#steps[@]}: ${steps[$((step_counter-1))]}"
    install_packages
    step_counter=$((step_counter + 1))

    echo "步骤 ${step_counter}/${#steps[@]}: ${steps[$((step_counter-1))]}"
    add_docker_repo
    step_counter=$((step_counter + 1))

    echo "步骤 ${step_counter}/${#steps[@]}: ${steps[$((step_counter-1))]}"
    install_docker
    step_counter=$((step_counter + 1))

    echo "步骤 ${step_counter}/${#steps[@]}: ${steps[$((step_counter-1))]}"
    setup_docker_compose
    step_counter=$((step_counter + 1))

    echo "步骤 ${step_counter}/${#steps[@]}: ${steps[$((step_counter-1))]}"
    manage_docker_service
    step_counter=$((step_counter + 1))

    echo "脚本执行成功!"
}

main

验证:

bash 复制代码
docker pull hello-world

原文阅读:【巨人肩膀社区·专栏·分享】03 Docker一键安装脚本信息

相关推荐
乌托邦的逃亡者1 小时前
Docker的/var/lib/docker/目录占用100%的处理方法
运维·docker·容器
ldj20201 小时前
Jenkins 流水线配置
运维·jenkins
古希腊数通小白(ip在学)4 小时前
stp拓扑变化分类
运维·服务器·网络·智能路由器
OKUNP5 小时前
Docker高级管理--容器通信技术与数据持久化
docker·容器·php
12点一刻6 小时前
搭建自动化工作流:探寻解放双手的有效方案(2)
运维·人工智能·自动化·deepseek
未来之窗软件服务6 小时前
东方仙盟AI数据中间件使用教程:开启数据交互与自动化应用新时代——仙盟创梦IDE
运维·人工智能·自动化·仙盟创梦ide·东方仙盟·阿雪技术观
o不ok!7 小时前
Linux面试问题-软件测试
linux·运维·服务器
用户6855449692739 小时前
第一周作业
docker
宇钶宇夕10 小时前
SIMATIC S7-1200的以太网通信能力:协议与资源详细解析
运维·服务器·数据库·程序人生·自动化