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 执行说明
- 执行以下命令:
chmod +x install_docker.sh。 ./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 执行说明
- 执行以下命令:
chmod +x uninstall_docker.sh。 ./uninstall_docker.sh。