一、卸载旧版本

for pkg in docker.io docker-doc docker-compose docker-compose-v2 podman-docker containerd runc; do
  sudo apt remove $pkg -y 2>/dev/null
done

二、安装 Docker

# 安装依赖
sudo apt update
sudo apt install ca-certificates curl gnupg lsb-release -y

# 创建 GPG 密钥目录
sudo mkdir -p /etc/apt/keyrings

# 添加 Docker 官方 GPG 密钥
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg

# 添加 Docker 仓库
echo "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null

# 安装 Docker
sudo apt update
sudo apt install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin -y

# 启动并设置开机自启
sudo systemctl start docker
sudo systemctl enable docker

三、验证安装

# 查看版本
docker --version
# 输出示例:Docker version 29.4.1, build 055a478

docker compose version
# 输出示例:Docker Compose version v5.1.3

# 运行测试容器
sudo docker run hello-world
# 输出 "Hello from Docker!" 表示安装成功

四、配置国内镜像源

sudo mkdir -p /etc/docker
sudo tee /etc/docker/daemon.json << 'EOF'
{
  "registry-mirrors": [
    "https://mirror.ccs.tencentyun.com",
    "https://registry.docker-cn.com",
    "https://docker.mirrors.ustc.edu.cn",
    "https://docker.m.daocloud.io",
    "https://1ms.run",
    "https://1panel.love"
  ],
  "log-driver": "json-file",
  "log-opts": {
    "max-size": "10m",
    "max-file": "3"
  },
  "live-restore": true,
  "data-root": "/var/lib/docker"
}
EOF

sudo systemctl restart docker

配置说明:

配置项说明
registry-mirrors6 个国内镜像源,加速拉取
log-driver日志驱动:json-file
max-size单日志文件最大 10MB
max-file最多保留 3 个日志文件
live-restoreDocker 重启时容器保持运行
data-root数据目录(可指向 LVM 分区)

五、配置用户权限

# 允许普通用户无需 sudo 运行 Docker
sudo usermod -aG docker $USER

# 刷新用户组(或重新登录)
newgrp docker

# 验证(无需 sudo)
docker ps

六、解决代理冲突

如果系统配置了代理,可能导致 Docker 拉取失败:

# 检查是否配置了代理
env | grep -i proxy

# 方法 1:临时取消代理
unset http_proxy
unset https_proxy

# 方法 2:使用 --noproxy
curl --noproxy "*" https://download.docker.com/linux/ubuntu/gpg

# 方法 3:永久移除代理配置
sudo nano /etc/environment
# 删除或注释 http_proxy / https_proxy 行

# 方法 4:Docker 服务代理(如需通过代理拉取镜像)
sudo mkdir -p /etc/systemd/system/docker.service.d
sudo tee /etc/systemd/system/docker.service.d/http-proxy.conf << 'EOF'
[Service]
Environment="HTTP_PROXY=http://127.0.0.1:8889"
Environment="HTTPS_PROXY=http://127.0.0.1:8889"
Environment="NO_PROXY=localhost,127.0.0.1,172.18.0.0/16"
EOF

sudo systemctl daemon-reload
sudo systemctl restart docker

七、配置 Docker 数据目录(可选)

如果使用了 LVM,将 Docker 数据目录指向独立分区:

# 停止 Docker
sudo systemctl stop docker

# 迁移数据(如有)
sudo rsync -avxHAX /var/lib/docker/ /mnt/new-docker/

# 卸载临时挂载
sudo umount /mnt/new-docker

# 备份原目录
sudo mv /var/lib/docker /var/lib/docker.old
sudo mkdir /var/lib/docker

# 编辑 fstab,添加(替换 UUID)
# UUID=xxxx-xxxx  /var/lib/docker  ext4  defaults  0  2

# 挂载
sudo mount -a

# 重启 Docker
sudo systemctl start docker

# 验证
docker info | grep "Docker Root Dir"
# 输出:Docker Root Dir: /var/lib/docker

# 确认正常后清理旧数据
sudo rm -rf /var/lib/docker.old

八、常用命令

# 查看 Docker 信息
docker info

# 查看存储驱动
docker info | grep "Storage Driver"
# 输出:Storage Driver: overlay2

# 查看日志配置
docker info | grep -A3 "Logging"

# 查看运行的容器
docker ps

# 查看所有容器(含停止的)
docker ps -a

# 查看镜像
docker images

# 清理未使用的资源
docker system prune -a

九、验证清单

项目命令预期结果
版本docker --versionDocker version 29.x.x
Composedocker compose versionDocker Compose version v5.x.x
服务状态systemctl is-active dockeractive
存储驱动docker info | grep Storageoverlay2
日志配置docker info | grep -A3 Loggingjson-file, 10m/3 files
镜像拉取docker run hello-worldHello from Docker!
用户权限docker ps(无需 sudo)正常输出

十、故障排查

问题 1:拉取镜像超时

# 检查网络
ping -c 3 registry-1.docker.io

# 检查镜像源
docker info | grep -A10 "Registry Mirrors"

# 测试拉取
docker pull hello-world

问题 2:权限拒绝

# 检查用户组
groups $USER
# 应包含 docker

# 刷新用户组
newgrp docker

问题 3:代理冲突

# 查看代理配置
env | grep -i proxy

# 取消代理
unset http_proxy
unset https_proxy

更多推荐