Files
lehuo/infra/ubuntu/scripts/install-docker.sh
T

62 lines
1.9 KiB
Bash

#!/usr/bin/env bash
set -Eeuo pipefail
if [[ "${EUID}" -ne 0 ]]; then
echo '请使用 sudo 运行此脚本。' >&2
exit 1
fi
if [[ ! -r /etc/os-release ]]; then
echo '无法识别操作系统。' >&2
exit 1
fi
# shellcheck disable=SC1091
source /etc/os-release
if [[ "${ID:-}" != 'ubuntu' || "${VERSION_ID:-}" != '26.04' ]]; then
printf '本部署包仅验证 Ubuntu 26.04;当前为 %s %s。\n' "${ID:-unknown}" "${VERSION_ID:-unknown}" >&2
exit 1
fi
if docker version >/dev/null 2>&1 && docker compose version >/dev/null 2>&1; then
echo 'Docker Engine 与 Compose plugin 已安装。'
exit 0
fi
conflicts=()
for package in docker.io docker-compose docker-compose-v2 podman-docker containerd runc; do
if dpkg-query -W -f='${Status}' "$package" 2>/dev/null | grep -q 'install ok installed'; then
conflicts+=("$package")
fi
done
if ((${#conflicts[@]})); then
printf '检测到可能冲突的软件包:%s\n' "${conflicts[*]}" >&2
echo '请先人工确认并按 Docker 官方文档移除冲突包,再重新运行;脚本不会自动卸载现有容器运行时。' >&2
exit 1
fi
apt-get update
apt-get install -y ca-certificates curl
install -m 0755 -d /etc/apt/keyrings
curl -fsSL https://download.docker.com/linux/ubuntu/gpg -o /etc/apt/keyrings/docker.asc
chmod a+r /etc/apt/keyrings/docker.asc
architecture="$(dpkg --print-architecture)"
codename="${UBUNTU_CODENAME:-${VERSION_CODENAME}}"
cat > /etc/apt/sources.list.d/docker.sources <<EOF
Types: deb
URIs: https://download.docker.com/linux/ubuntu
Suites: ${codename}
Components: stable
Architectures: ${architecture}
Signed-By: /etc/apt/keyrings/docker.asc
EOF
apt-get update
apt-get install -y docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin
systemctl enable --now docker
docker version
docker compose version
echo 'Docker 安装完成。Docker 组等同 root 权限,本脚本不会自动把普通用户加入 docker 组。'