Files
AIRegulation-Deployment/scripts/00_install_docker_ubuntu.sh
2026-04-23 09:58:47 +08:00

118 lines
5.1 KiB
Bash
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

#!/usr/bin/env bash
# ══════════════════════════════════════════════════
# 00_install_docker_ubuntu.sh
# Ubuntu 22.04 LTS 安装 Docker CE + nvidia-container-toolkit
# 用法bash scripts/00_install_docker_ubuntu.sh
# ══════════════════════════════════════════════════
set -euo pipefail
RED='\033[0;31m'; GREEN='\033[0;32m'; YELLOW='\033[1;33m'; BLUE='\033[0;34m'; NC='\033[0m'
info() { echo -e "${BLUE}[INFO]${NC} $*"; }
ok() { echo -e "${GREEN}[OK]${NC} $*"; }
warn() { echo -e "${YELLOW}[WARN]${NC} $*"; }
error() { echo -e "${RED}[ERROR]${NC} $*"; exit 1; }
# ── 检查 root 权限 ──────────────────────────────
if [[ $EUID -ne 0 ]]; then
error "请以 root 或 sudo 运行sudo bash scripts/00_install_docker_ubuntu.sh"
fi
# ── 检测 Ubuntu 版本 ────────────────────────────
. /etc/os-release
info "检测到 OS$NAME $VERSION_ID"
if [[ "$ID" != "ubuntu" ]]; then
warn "非 Ubuntu 系统脚本可能不适用。继续y/n"
read -r ans; [[ "$ans" != "y" ]] && exit 0
fi
# ── Step 1换国内源可选──────────────────────
info "Step 1/5配置 APT 源..."
if [[ "${USE_MIRROR:-false}" == "true" ]]; then
sed -i 's/archive.ubuntu.com/mirrors.aliyun.com/g' /etc/apt/sources.list
sed -i 's/security.ubuntu.com/mirrors.aliyun.com/g' /etc/apt/sources.list
ok "已切换到阿里云镜像"
fi
apt-get update -qq
# ── Step 2安装依赖 ────────────────────────────
info "Step 2/5安装依赖包..."
apt-get install -y -qq \
ca-certificates \
curl \
gnupg \
lsb-release \
apt-transport-https
# ── Step 3安装 Docker CE ──────────────────────
info "Step 3/5安装 Docker CE..."
if command -v docker &>/dev/null; then
DOCKER_VER=$(docker --version)
warn "Docker 已安装:$DOCKER_VER"
warn "跳过 Docker 安装。如需重装请先运行apt-get remove docker docker-engine docker.io containerd"
else
# 添加 Docker 官方 GPG 密钥
install -m 0755 -d /etc/apt/keyrings
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | \
gpg --dearmor -o /etc/apt/keyrings/docker.gpg
chmod a+r /etc/apt/keyrings/docker.gpg
# 添加 Docker 仓库
echo "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] \
https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable" | \
tee /etc/apt/sources.list.d/docker.list > /dev/null
apt-get update -qq
apt-get install -y -qq docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin
# 启动并设置开机自启
systemctl enable docker
systemctl start docker
ok "Docker CE 安装完成"
fi
# 验证
docker --version
docker compose version
# ── Step 4将当前用户加入 docker 组 ────────────
info "Step 4/5配置 Docker 用户组..."
CURRENT_USER=${SUDO_USER:-$USER}
if [[ -n "$CURRENT_USER" && "$CURRENT_USER" != "root" ]]; then
usermod -aG docker "$CURRENT_USER"
ok "用户 $CURRENT_USER 已加入 docker 组(重新登录后生效)"
fi
# ── Step 5安装 nvidia-container-toolkit可选
info "Step 5/5检查 NVIDIA GPU..."
if command -v nvidia-smi &>/dev/null; then
info "检测到 NVIDIA GPU安装 nvidia-container-toolkit..."
nvidia-smi --query-gpu=name --format=csv,noheader
# 添加 NVIDIA 仓库
curl -fsSL https://nvidia.github.io/libnvidia-container/gpgkey | \
gpg --dearmor -o /usr/share/keyrings/nvidia-container-toolkit-keyring.gpg
curl -s -L https://nvidia.github.io/libnvidia-container/stable/deb/nvidia-container-toolkit.list | \
sed 's#deb https://#deb [signed-by=/usr/share/keyrings/nvidia-container-toolkit-keyring.gpg] https://#g' | \
tee /etc/apt/sources.list.d/nvidia-container-toolkit.list
apt-get update -qq
apt-get install -y -qq nvidia-container-toolkit
nvidia-ctk runtime configure --runtime=docker
systemctl restart docker
ok "nvidia-container-toolkit 安装完成"
else
warn "未检测到 NVIDIA GPU跳过 nvidia-container-toolkit 安装"
warn "如有 GPU 请手动安装驱动后重新运行本脚本"
fi
echo ""
echo -e "${GREEN}══════════════════════════════════════════${NC}"
echo -e "${GREEN} Docker 安装完成!${NC}"
echo -e "${GREEN}══════════════════════════════════════════${NC}"
echo ""
echo " Docker 版本:$(docker --version)"
echo " Compose 版本:$(docker compose version)"
echo ""
echo -e "${YELLOW} 注意:${NC}请重新登录以使 docker 组权限生效"
echo " 验证命令docker run hello-world"