#!/bin/bash # 空白机器安装 Docker 28.0.1。数据放在 /usr/cluster,默认运行时用 nvidia。 # 不要在已经跑着业务的 prod102 上执行。 set -eu export DEBIAN_FRONTEND=noninteractive if [ "$(hostname)" = "prod102" ] && [ -S /var/run/docker.sock ]; then echo "prod102 上 Docker 已经在跑。这份脚本是给空机器的,停在这里。" exit 1 fi install -m 0755 -d /etc/apt/keyrings curl -fsSL https://download.docker.com/linux/ubuntu/gpg \ | gpg --dearmor --yes -o /etc/apt/keyrings/docker.gpg echo "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/ubuntu jammy stable" \ > /etc/apt/sources.list.d/docker.list apt-get update ver=$(apt-cache madison docker-ce | awk '/28.0.1/{print $3; exit}') if [ -z "$ver" ]; then echo "apt 里没有 docker-ce 28.0.1" exit 1 fi apt-get install -y "docker-ce=$ver" "docker-ce-cli=$ver" containerd.io mkdir -p /usr/cluster/docker /etc/docker cat > /etc/docker/daemon.json << 'EOF' { "data-root": "/usr/cluster/docker", "exec-opts": ["native.cgroupdriver=systemd"], "default-runtime": "nvidia", "runtimes": { "nvidia": { "path": "nvidia-container-runtime" } }, "registry-mirrors": [ "https://docker.1ms.run", "https://docker.xuanyuan.me", "https://docker.m.daocloud.io", "https://hub-mirror.c.163.com" ] } EOF systemctl enable docker systemctl restart docker docker info --format 'root={{.DockerRootDir}} cgroup={{.CgroupDriver}} runtime={{.DefaultRuntime}}' echo DOCKER_OK