完整脚本内容

#!/bin/bash
# openEuler 22.03 一键安装Docker脚本
# 作者:LMZF
# 日期:2025-11-19

set -e

# 颜色定义
RED='\033[0;31m'
GREEN='\033[0;32m'
YELLOW='\033[1;33m'
NC='\033[0m'

# 日志函数
log_info() {
    echo -e "${GREEN}[INFO]${NC} $1"
}

log_warn() {
    echo -e "${YELLOW}[WARN]${NC} $1"
}

log_error() {
    echo -e "${RED}[ERROR]${NC} $1"
}

# 检查系统版本
check_os_version() {
    if [ ! -f /etc/openEuler-release ]; then
        log_error "当前系统不是openEuler,脚本退出"
        exit 1
    fi

    OS_VERSION=$(cat /etc/openEuler-release | grep -oP 'release \K[0-9.]+')
    log_info "检测到系统版本: openEuler $OS_VERSION"

    if [[ "$OS_VERSION" != "22.03" ]]; then
        log_warn "此脚本专为openEuler 22.03设计,当前版本可能不兼容"
    fi
}

# 卸载旧版本Docker
remove_old_docker() {
    log_info "检查并卸载旧版本Docker..."
    yum remove -y docker \
                  docker-client \
                  docker-client-latest \
                  docker-common \
                  docker-latest \
                  docker-latest-logrotate \
                  docker-logrotate \
                  docker-engine \
                  2>/dev/null || true
}


# 安装依赖包
install_dependencies() {
    log_info "安装必要依赖包..."
    yum install -y dnf-plugins-core device-mapper-persistent-data lvm2
}

# 配置Docker仓库
setup_docker_repo() {
    log_info "配置Docker CE仓库..."

    # 添加Docker官方仓库(使用华为云镜像加速)
    dnf config-manager --add-repo  https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo

    # 修改仓库配置,将$releasever替换为8(因为openEuler 22.03基于CentOS 8)
    sed -i 's+\$releasever+8+' /etc/yum.repos.d/docker-ce.repo

    # 更新yum缓存
    dnf makecache
}

# 安装Docker CE
install_docker() {
    log_info "开始安装Docker CE..."

    # 查询可用版本
    log_info "可用的Docker版本:"
    dnf list docker-ce --showduplicates | sort -r | head -10

    # 安装指定版本(推荐安装较新的稳定版本)
    DOCKER_VERSION="24.0.7"
    log_info "安装Docker版本: $DOCKER_VERSION"

    dnf install -y docker-ce-$DOCKER_VERSION \
                   docker-ce-cli-$DOCKER_VERSION \
                   containerd.io \
                   docker-buildx-plugin \
                   docker-compose-plugin
}

# 配置Docker
configure_docker() {
    log_info "配置Docker..."

    # 创建配置目录
    mkdir -p /etc/docker

    # 创建daemon.json配置文件
    cat > /etc/docker/daemon.json << EOF
{
  "data-root": "/var/lib/docker",
  "registry-mirrors": [
    "https://docker.1panel.live",
    "https://docker.1ms.run",
    "https://dytt.online",
    "https://docker-0.unsee.tech",
    "https://lispy.org",
    "https://docker.xiaogenban1993.com",
    "https://666860.xyz",
    "https://hub.rat.dev",
    "https://docker.m.daocloud.io",
    "https://demo.52013120.xyz",
    "https://proxy.vvvv.ee",
    "https://registry.cyou",
    "https://mirror.ccs.tencentyun.com"
  ],
  "log-opts": {
    "max-size": "10m",
    "max-file": "3"
  },
  "storage-driver": "overlay2",
  "exec-opts": ["native.cgroupdriver=systemd"]
}
EOF
}

# 启动Docker服务
start_docker_service() {
    log_info "启动Docker服务..."

    # 启动并设置开机自启
    systemctl enable docker --now

    # 检查服务状态
    if systemctl is-active --quiet docker; then
        log_info "Docker服务启动成功"
    else
        log_error "Docker服务启动失败"
        journalctl -u docker --no-pager -n 20
        exit 1
    fi
}

# 验证安装
verify_installation() {
    log_info "验证Docker安装..."

    # 检查Docker版本
    docker --version

    # 运行测试容器
    if docker run --rm hello-world; then
        log_info "Docker安装验证成功!"
    else
        log_error "Docker安装验证失败"
        exit 1
    fi

    # 显示Docker信息
    docker info | grep -E "Server Version|Containers|Running|Paused|Stopped|Images|Storage Driver"
}

# 安装后优化
post_install_optimization() {
    log_info "进行安装后优化..."

    # 将当前用户加入docker组(避免每次使用sudo)
    if id -u $SUDO_USER >/dev/null 2>&1; then
        usermod -aG docker $SUDO_USER
        log_info "已将用户 $SUDO_USER 添加到docker组,重新登录后生效"
    fi

    # 显示使用提示
    echo ""
    log_info "=== Docker安装完成 ==="
    log_info "常用命令:"
    log_info "  docker ps                  # 查看运行中的容器"
    log_info "  docker images             # 查看镜像"
    log_info "  docker run -it ubuntu bash # 运行Ubuntu容器"
    log_info "  docker-compose up -d       # 启动docker-compose服务"
}

# 主函数
main() {
    log_info "开始openEuler 22.03 Docker一键安装..."

    # 检查是否为root用户
    if [[ $EUID -ne 0 ]]; then
        log_error "请使用root用户运行此脚本"
        echo "使用: sudo bash $0"
        exit 1
    fi

    # 执行安装步骤
    check_os_version
    remove_old_docker
    install_dependencies
    setup_docker_repo
    install_docker
    configure_docker
    start_docker_service
    verify_installation
    post_install_optimization

    log_info "Docker安装全部完成!"
}

# 执行主函数
main "$@"

Logo

鲲鹏昇腾开发者社区是面向全社会开放的“联接全球计算开发者,聚合华为+生态”的社区,内容涵盖鲲鹏、昇腾资源,帮助开发者快速获取所需的知识、经验、软件、工具、算力,支撑开发者易学、好用、成功,成为核心开发者。

更多推荐