Ubuntu 24.04 安装 Docker Engine

Ubuntu 24.04 安装 Docker Engine

本文档整理并总结 Ubuntu 24.04 LTS(Noble) 上安装 Docker Engine(非 Docker Desktop) 的完整、稳定、可复用方案,适用于开发机与生产/测试服务器场景。


一、安装目标与原则

安装内容

  • Docker Engine(docker-ce)
  • Docker CLI(docker-ce-cli)
  • containerd(由 Docker 管理)
  • docker-buildx-plugin
  • docker-compose-plugin(Compose v2)

明确不做的事情

  • ❌ 不使用 Docker Desktop
  • ❌ 不使用 snap 版 docker
  • ❌ 不安装 Python 版 docker-compose(已废弃)

适用场景

  • 多容器编排(docker compose)
  • Elasticsearch / MinIO / RAGFlow / Celery
  • 私有 Harbor 镜像仓库
  • 长期运行服务

二、清理历史残留(必须)

如果系统上 曾经安装过 docker / docker-desktop / snap docker,必须先清理:

bash 复制代码
sudo systemctl stop docker docker.socket containerd 2>/dev/null || true

sudo apt remove -y \
  docker \
  docker-engine \
  docker.io \
  docker-doc \
  docker-compose \
  docker-compose-v2 \
  podman-docker \
  docker-desktop

sudo rm -rf \
  /var/lib/docker \
  /var/lib/containerd \
  /etc/docker

sudo apt autoremove -y

确认 docker 不存在:

bash 复制代码
which docker || echo "docker not found"

三、安装基础依赖

bash 复制代码
sudo apt update
sudo apt install -y \
  ca-certificates \
  curl \
  gnupg \
  lsb-release

四、配置 Docker 官方仓库(Ubuntu 24.04 正确方式)

Ubuntu 24.04 同时支持 .list 和 .sources(deb822)
同一仓库只能保留一种方式,否则会导致 Signed-By 冲突

1️⃣ 清理旧的 Docker 源(关键)

bash 复制代码
sudo rm -f /etc/apt/sources.list.d/docker.sources
sudo rm -f /etc/apt/sources.list.d/docker*.list

2️⃣ 创建 keyrings 目录

bash 复制代码
sudo install -m 0755 -d /etc/apt/keyrings

3️⃣ 添加 Docker 官方 GPG Key(生成 docker.gpg)

bash 复制代码
curl -fsSL https://download.docker.com/linux/ubuntu/gpg \
  | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg

sudo chmod a+r /etc/apt/keyrings/docker.gpg

4️⃣ 添加 Docker 官方 apt 源(noble)

bash 复制代码
echo "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/ubuntu noble stable" \
| sudo tee /etc/apt/sources.list.d/docker.list > /dev/null

5️⃣ 验证 Docker 源唯一性

bash 复制代码
grep -R "download.docker.com/linux/ubuntu" /etc/apt/sources.list /etc/apt/sources.list.d/* 2>/dev/null

期望结果 只有一条,且指向 docker.gpg。

五、安装 Docker Engine

bash 复制代码
sudo apt update
sudo apt install -y \
  docker-ce \
  docker-ce-cli \
  containerd.io \
  docker-buildx-plugin \
  docker-compose-plugin

六、启动 Docker 并设置开机自启

bash 复制代码
sudo systemctl enable docker
sudo systemctl start docker

查看状态:

bash 复制代码
systemctl status docker --no-pager

七、配置非 root 用户使用 Docker(强烈推荐)

bash 复制代码
sudo usermod -aG docker $USER
newgrp docker

验证无需 sudo:

bash 复制代码
docker ps

八、推荐的 Docker 全局配置(生产友好)

编辑配置文件:

bash 复制代码
sudo mkdir -p /etc/docker
sudo nano /etc/docker/daemon.json

推荐内容:

bash 复制代码
{
  "log-driver": "json-file",
  "log-opts": {
    "max-size": "50m",
    "max-file": "3"
  },
  "exec-opts": ["native.cgroupdriver=systemd"],
  "storage-driver": "overlay2",
  "features": {
    "buildkit": true
  }
}

应用配置:

bash 复制代码
sudo systemctl daemon-reexec
sudo systemctl restart docker

九、验证清单(必须全部通过)

bash 复制代码
docker version
docker info | grep -E 'Cgroup|Storage Driver'
docker compose version

期望结果:

Cgroup Driver: systemd

Storage Driver: overlay2

Docker Compose v2.x

十、常见坑说明(Ubuntu 24.04 特有)

Signed-By 冲突错误示例

Signed-By: /etc/apt/keyrings/docker.gpg != /etc/apt/keyrings/docker.asc

原因

同时存在:

docker.list(signed-by=docker.gpg)

docker.sources(signed-by=docker.asc)

Ubuntu 24.04 会同时加载 .list 和 .sources

解决原则

同一仓库只能保留一种格式

本文统一使用:.list + docker.gpg

十一、与服务器场景强相关的附加建议

1️⃣ Elasticsearch 必须的内核参数

bash 复制代码
sudo sysctl -w vm.max_map_count=262144
echo "vm.max_map_count=262144" | sudo tee /etc/sysctl.d/99-elasticsearch.conf

2️⃣ 私有 Harbor / 内网仓库

后续可直接配置:

bash 复制代码
/etc/docker/certs.d/<harbor-domain>/

十二、结论


Ubuntu 24.04 上 Docker Engine + docker-compose-plugin 是最稳妥方案

Docker Desktop 在 Linux 上 没有必要

正确处理 .sources 与 .list 是 24.04 的关键点

相关推荐
永恒-龙啸2 小时前
闲置机安装istoreos+常用软件介绍
linux·github·开源软件·istoreos
lhyzws2 小时前
CENTOS上的网络安全工具(三十三) Portainer Kafka-Clickhouse部署(2)
linux·运维·centos
凯子坚持 c2 小时前
Docker存储卷深度解析:机制、管理与数据持久化实战
运维·docker·容器
TeleostNaCl2 小时前
如何在 Vim 启用行号显示和语法高亮功能
linux·经验分享·编辑器·vim
蟑螂恶霸2 小时前
使用docker安装windows 11
运维·docker·容器
Starry_hello world2 小时前
Linux 信号 (2)
linux
代码游侠2 小时前
学习笔记——Linux内核链表
linux·运维·笔记·学习·算法·链表
MicoZone2 小时前
docker
docker
sheeta19982 小时前
LeetCode 每日一题笔记 日期:2025.12.14 题目:2147.分隔长廊的方案数
linux·笔记·leetcode