Docker 安装与配置指南 (Debian & Ubuntu)
2026年4月27日 · 开发

Docker 安装与配置指南 (Debian & Ubuntu)

本文档介绍如何在基于 Debian 的 Linux 发行版(包括 Ubuntu)上安装 Docker Engine。Docker 是目前最流行的容器化平台,能让开发者轻松打包、分发与运行应用程序。

Docker 安装与配置指南 (Debian & Ubuntu)

本文档介绍如何在基于 Debian 的 Linux 发行版(包括 Ubuntu)上安装 Docker Engine。Docker 是目前最流行的容器化平台,能让开发者轻松打包、分发与运行应用程序。

1. 系统要求

  • 操作系统:Ubuntu 20.04+, Debian 11+ (建议)。
  • 权限:具备 sudo 权限的用户。
  • 架构:x86_64 / amd64, arm64。

2. 安装方式一:官方一键脚本 (推荐快速部署)

Docker 官方提供了一个便捷脚本,能自动识别系统版本并安装最新的稳定版 Docker。这适合开发环境或快速测试。

# 下载安装脚本
curl -fsSL https://get.docker.com -o get-docker.sh

# 执行脚本
sudo sh get-docker.sh

3. 安装方式二:手动脚本 (适合生产环境)

如果需要更精确的控制,或者在正式环境中部署,建议使用以下脚本。它会添加 Docker 官方的 GPG 密钥与软件源,确保软件包来源的安全与可靠。

3.1 创建安装脚本

在终端中输入 nano install_docker.sh,然后将以下代码粘贴进去

#!/bin/bash
set -e

# 1. 自动识别系统信息
. /etc/os-release
OS_ID=$ID
OS_CODENAME=$VERSION_CODENAME
echo "--- 检测到系统: $OS_ID | 代号: $OS_CODENAME ---"

# 2. 卸载旧版本
echo "步骤 1: 清理旧版组件..."
sudo apt-get remove -y docker docker-engine docker.io containerd runc 2>/dev/null || true

# 3. 安装基础依赖
echo "步骤 2: 安装必要依赖 (curl/gnupg)..."
sudo apt-get update
sudo apt-get install -y ca-certificates curl gnupg

# 4. 添加 GPG 密钥
echo "步骤 3: 导入 GPG 安全密钥..."
sudo mkdir -p /etc/apt/keyrings
curl -fsSL https://mirrors.aliyun.com/docker-ce/linux/${OS_ID}/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg --yes
sudo chmod a+r /etc/apt/keyrings/docker.gpg

# 5. 添加 Docker 软件仓库地址 (自动匹配 Debian/Ubuntu)
echo "步骤 4: 配置软件下载仓库..."
echo \
  "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] https://mirrors.aliyun.com/docker-ce/linux/${OS_ID} \
  ${OS_CODENAME} stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null

# 6. 安装 Docker 核心组件及 Compose 插件
echo "步骤 5: 安装最新版 Docker Engine & Compose..."
sudo apt-get update
sudo apt-get install -y docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin

# 7. 配置镜像加速器及日志
echo "步骤 6: 配置镜像加速器 (腾讯云/DaoCloud/中科院)..."
sudo mkdir -p /etc/docker
sudo tee /etc/docker/daemon.json <<-'EOF'
{
  "registry-mirrors": [
    "https://docker.1ms.run",
    "https://docker.m.daocloud.io"
  ],
  "log-driver": "json-file",
  "log-opts": {
    "max-size": "100m",
    "max-file": "3"
  }
}
EOF

# 8. 启动并验证
echo "步骤 7: 启动服务并验证..."
sudo systemctl daemon-reload
sudo systemctl enable docker
sudo systemctl restart docker

echo "=========================================="
docker --version
docker compose version
echo "Docker 安装成功,加速器已生效!"
echo "=========================================="

3.2 执行说明

  1. 执行以下命令:chmod +x install_docker.sh
  2. ./install_docker.sh

4. 安装后配置

4.1 免 sudo 运行 Docker

默认情况下只有 root 用户能运行 Docker 命令。执行以下命令可让当前用户直接使用 Docker,无需每次输入 sudo

# 将当前用户加入 docker 用户组
sudo usermod -aG docker $USER

# 立即应用用户组更改 (或者重新登录 SSH)
newgrp docker

4.2 验证安装

运行经典的 Hello World 容器来确认安装是否正常:

docker run hello-world

5. 常用 Docker 命令清单

功能命令
查看正在运行的容器docker ps
查看所有容器 (含停止)docker ps -a
停止容器docker stop <ID/Name>
删除容器docker rm <ID/Name>
查看镜像 (Images)docker images
Docker Compose 启动docker compose up -d

6. 卸载 Docker

6.1 彻底移除 Docker 及相关组件

在终端中输入 nano uninstall_docker.sh,然后将以下代码粘贴进去

#!/bin/bash

# =================================================================
# 脚本名称: Docker 极致清理与粉碎脚本
# 针对痛点: 安装中断残留、运行时 Socket、APT 缓存、Rootless 附加包
# =================================================================

RED='\033[0;31m'
GREEN='\033[0;32m'
YELLOW='\033[1;33m'
BLUE='\033[0;34m'
NC='\033[0m'

if [ "$EUID" -ne 0 ]; then 
  echo -e "${RED}错误: 请以 root 权限运行此脚本。${NC}"
  exit 1
fi

clear
echo -e "${RED}##########################################################${NC}"
echo -e "${RED}#           DOCKER 极致粉碎工具            #${NC}"
echo -e "${RED}##########################################################${NC}"
echo -e "${YELLOW}此脚本将清理以下内容:${NC}"
echo -e " 1. 暴力截杀所有相关进程 (解决 Socket 占用)"
echo -e " 2. 动态扫描所有带 'docker/containerd' 关键字的包并彻底卸载"
echo -e " 3. 清理所有运行时临时目录 (/run/containerd, /opt/containerd)"
echo -e " 4. 清理所有下载的 .deb 缓存文件 (释放被占用的 100MB+ 空间)"
echo -e " 5. 彻底删除阿里云或官方的软件源索引"
echo -e "----------------------------------------------------------"

read -p "确定要开始粉碎吗?请输入 [y/N]: " CONFIRM
[[ "$CONFIRM" =~ ^[yY](es)?$ ]] || { echo "操作取消"; exit 0; }

# --- 步骤 1: 停止服务并暴力截杀进程 ---
echo -e "\n${YELLOW}--- 1. 暴力截杀进程 ---${NC}"
systemctl stop docker.socket docker.service containerd.service 2>/dev/null || true
# 必须杀干净,否则 /run/containerd 里的 sock 文件删不掉
killall -9 docker containerd-shim dockerd containerd 2>/dev/null || true

# --- 步骤 2: 清理系统挂载点 ---
echo -e "${YELLOW}--- 2. 清理系统挂载点 ---${NC}"
for mnt in $(mount | grep -E 'docker|containerd|kubelet' | awk '{print $3}' | sort -r); do
    umount -l "$mnt" 2>/dev/null && echo "已卸载挂载点: $mnt" || true
done

# --- 步骤 3: 动态扫描并彻底卸载包 ---
echo -e "${YELLOW}--- 3. 动态扫描并卸载软件包 ---${NC}"
# 查找所有名字里带 docker 或 containerd 的包
REMAIN_PKGS=$(dpkg -l | grep -iE 'docker|containerd' | awk '{print $2}')
if [ -n "$REMAIN_PKGS" ]; then
    apt-get purge -y $REMAIN_PKGS >/dev/null 2>&1
    dpkg --purge $REMAIN_PKGS >/dev/null 2>&1
    echo "已成功粉碎包: $REMAIN_PKGS"
fi
apt-get autoremove -y >/dev/null 2>&1

# --- 步骤 4: 物理粉碎残留数据 ---
echo -e "${YELLOW}--- 4. 物理粉碎残留路径 ---${NC}"
PATHS=(
    /var/lib/docker
    /var/lib/containerd
    /var/run/docker.sock
    /run/docker
    /run/containerd        
    /opt/containerd       
    /etc/docker
    /etc/containerd
    /root/.docker
    /usr/local/bin/docker-compose
)
for path in "${PATHS[@]}"; do
    if [ -e "$path" ]; then
        rm -rf "$path"
        echo "已物理删除: $path"
    fi
done

# --- 步骤 5: 清理 APT 缓存与索引 ---
echo -e "${YELLOW}--- 5. 清理 APT 缓存与索引 ---${NC}"
apt-get clean   # 重点:清理 /var/cache/apt/archives 下的所有 deb 包
rm -rf /var/lib/apt/lists/mirrors.aliyun.com_docker*
rm -rf /var/lib/apt/lists/download.docker.com*
rm -f /etc/apt/sources.list.d/docker.list /etc/apt/keyrings/docker.gpg

# --- 步骤 6: 网络清理 ---
if ip link show docker0 >/dev/null 2>&1; then
    ip link delete docker0 && echo "已清理 docker0 网桥"
fi
groupdel docker 2>/dev/null || true

# =================================================================
# 深度自检环节
# =================================================================
echo -e "\n${YELLOW}--- 正在进行深度自检 ---${NC}"
FAILED=0
check_res() {
    if [ $1 -eq 0 ]; then echo -e "$2: ${GREEN}PASS${NC}"; else echo -e "$2: ${RED}FAIL (残留)${NC}"; FAILED=$((FAILED+1)); fi
}

[ -z "$(which docker dockerd containerd 2>/dev/null)" ]; check_res $? "[自检] 二进制程序"
[ -z "$(dpkg -l | grep -iE 'docker|containerd')" ]; check_res $? "[自检] 软件包状态"
[ -z "$(ps aux | grep -v grep | grep -E 'docker|containerd')" ]; check_res $? "[自检] 活跃进程"
[ ! -d "/var/lib/docker" ] && [ ! -d "/run/containerd" ]; check_res $? "[自检] 核心与运行时目录"

echo "------------------------------------------"
if [ $FAILED -eq 0 ]; then
    echo -e "${GREEN}✅ 极致清理完成!所有顽固残留已粉碎。${NC}"
else
    echo -e "${RED}❌ 警告:仍有 $FAILED 项残留,建议重启服务器后重试。${NC}"
fi
echo "------------------------------------------"

6.2 执行说明

  1. 执行以下命令:chmod +x uninstall_docker.sh
  2. ./uninstall_docker.sh