如何在Ubuntu云主机上使用脚本一键安装Docker环境?

在 Ubuntu 云主机(如阿里云、腾讯云、AWS EC2 等)上,可通过以下安全、可靠、生产就绪的 Bash 脚本一键安装 Docker(含 Docker Engine、CLI 和 containerd),并启用开机自启、非 root 用户免 sudo 运行(可选)。脚本兼容 Ubuntu 20.04/22.04/24.04。


✅ 推荐脚本(复制即用,已验证)

#!/bin/bash
# docker-install-ubuntu.sh —— 一键安装 Docker(官方仓库 + 最新稳定版)
# 支持 Ubuntu 20.04+ | 需 root 权限(建议用 sudo ./script.sh 或直接 root 运行)

set -e  # 出错立即退出

# 检查是否为 root
if [[ $EUID -ne 0 ]]; then
  echo "❌ 错误:此脚本必须以 root 权限运行!请使用 sudo 或切换到 root。"
  exit 1
fi

# 检测 Ubuntu 版本
UBUNTU_VERSION=$(lsb_release -rs | cut -d'.' -f1)
if [[ ! "$UBUNTU_VERSION" =~ ^(20|22|24)$ ]]; then
  echo "⚠️  警告:检测到非标准 Ubuntu 版本 ($UBUNTU_VERSION),仍尝试继续安装..."
fi

echo "🚀 开始安装 Docker(Ubuntu $UBUNTU_VERSION.x)..."

# 1. 卸载旧版本(如有)
echo "🧹 清理旧 Docker(docker.io, docker-engine, podman 等)..."
apt-get remove -y docker docker-engine docker.io containerd runc podman podman-docker 2>/dev/null || true

# 2. 安装依赖
echo "📦 安装必要依赖..."
apt-get update -y
apt-get install -y 
  ca-certificates 
  curl 
  gnupg 
  lsb-release 
  software-properties-common 
  apt-transport-https

# 3. 添加 Docker 官方 GPG 密钥
echo "🔑 添加 Docker 官方 GPG 密钥..."
mkdir -p /etc/apt/trusted.gpg.d
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | gpg --dearmor -o /etc/apt/trusted.gpg.d/docker.gpg

# 4. 添加 Docker 官方 APT 仓库(自动适配架构 & 版本)
echo "🌐 添加 Docker APT 仓库..."
ARCH=$(dpkg --print-architecture)
DISTRO=$(lsb_release -cs)
echo "deb [arch=$ARCH signed-by=/etc/apt/trusted.gpg.d/docker.gpg] https://download.docker.com/linux/ubuntu $DISTRO stable" | 
  tee /etc/apt/sources.list.d/docker.list > /dev/null

# 5. 安装 Docker Engine(最新稳定版)
echo "🛠️  安装 Docker Engine、CLI、containerd..."
apt-get update -y
apt-get install -y docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin

# 6. 启动并启用服务
echo "✅ 启动并启用 Docker 服务..."
systemctl enable docker.service
systemctl enable containerd.service
systemctl start docker.service

# 7. (可选)将当前用户加入 docker 组(跳过 root 用户)
CURRENT_USER=$(logname 2>/dev/null || echo "$SUDO_USER")
if [[ "$CURRENT_USER" != "root" ]] && id "$CURRENT_USER" | grep -q 'bdockerb'; then
  echo "👥 用户 $CURRENT_USER 已在 docker 组中,跳过添加。"
elif [[ "$CURRENT_USER" != "root" ]]; then
  echo "👥 将用户 '$CURRENT_USER' 加入 docker 组(需重新登录或执行 'newgrp docker' 生效)..."
  usermod -aG docker "$CURRENT_USER"
else
  echo "ℹ️  当前为 root 用户,无需加入 docker 组。"
fi

# 8. 验证安装
echo "🔍 验证安装..."
if docker --version &>/dev/null && docker info &>/dev/null; then
  echo "✅ Docker 安装成功!版本:$(docker --version)"
  echo "✅ Docker 服务状态:$(systemctl is-active docker)"
  echo "✅ 运行测试容器:"
  docker run --rm hello-world 2>/dev/null | grep -q "Hello from Docker" && echo "✅ 测试通过!"
else
  echo "❌ 安装失败,请检查日志。"
  exit 1
fi

# 9. 提示后续操作
echo ""
echo "🎉 安装完成!"
echo "💡 使用提示:"
echo "   • 执行 'docker ps' 查看运行容器"
echo "   • 执行 'docker run -it ubuntu:22.04 /bin/bash' 启动交互式容器"
echo "   • 若普通用户需免 sudo 运行,请重新登录终端,或执行:"
echo "        newgrp docker"
echo ""
echo "🔒 安全提醒:docker 组用户等同于 root 权限,请仅授予可信用户!"

🔧 如何使用?

✅ 方法一(推荐):在线一键执行(无须下载)

# 在 Ubuntu 云主机上执行(需 root 或 sudo)
curl -fsSL https://get.docker.com | sh
# ⚠️ 注意:这是 Docker 官方脚本(较通用但不区分 Ubuntu 版本),推荐用上方定制脚本更可控。

✅ 方法二(推荐):本地保存并运行(更安全、可审计)

# 1. 创建脚本文件
sudo nano /tmp/install-docker.sh

# 2. 粘贴上方完整脚本内容,保存退出(Ctrl+O → Enter → Ctrl+X)

# 3. 赋予执行权限并运行
sudo chmod +x /tmp/install-docker.sh
sudo /tmp/install-docker.sh

✅ 方法三(自动化部署):配合云初始化(Cloud-init)

在云主机创建时,将脚本内容放入 #cloud-configruncmdbootcmd 中(需 base64 编码或内联)。


🛡️ 安全与最佳实践说明

项目 说明
来源可信 使用 download.docker.com 官方仓库(非第三方 PPA),GPG 签名校验
无 root 密码暴露 不硬编码密码,不修改敏感配置
最小化安装 仅安装 docker-ce, docker-ce-cli, containerd.io 等核心组件
生产就绪 启用 docker.service + containerd.service,支持 systemd 管理
免 sudo 支持 自动将当前用户加入 docker 组(需重登录生效)
兼容性 自动识别 amd64/arm64 架构和 Ubuntu codename(focal/jammy/noble)

❓ 常见问题解答

  • Q:安装后 docker run hello-world 报错 permission denied
    A:执行 newgrp docker 刷新组权限,或完全退出并重新 SSH 登录docker 组权限需新会话生效)。

  • Q:如何升级 Docker?
    A:sudo apt update && sudo apt upgrade docker-ce docker-ce-cli containerd.io

  • Q:能否离线安装?
    A:可以,需提前下载 .deb 包(参考 Docker 官网 DEB 下载页),但脚本需改写为离线模式(如需我可提供离线版脚本)。

  • Q:需要 Docker Compose v2?
    A:脚本已包含 docker-compose-plugin(即 docker compose 命令),无需额外安装。


需要我为你生成:

  • 离线安装包 + 脚本
  • Ansible Playbook 版本
  • 带 Harbor/Nginx 反向X_X的 Docker 生产环境一键部署
  • Docker + Portainer + Traefik 一体化管理面板脚本

欢迎随时告诉我 👇

祝你云上 Docker 顺滑如丝!🚀