Docker 解决了应用环境不一致的顽疾,让部署变成了简单的拉取和启动。但在 Ubuntu 或 Debian 上敲下 apt install docker 往往是后续麻烦的开端。Docker 安装本身没有难度,真正的坑在安装源选择、权限组配置和磁盘膨胀这三件没人提醒的事上。本文将带你避开这些暗礁,一次搞定生产级别的环境配置。
部署前要知道 3 件事
- 资源需求:根据官方文档,Docker Engine 仅需 64-bit 的内核与 CPU,相比起动辄需要 4GB 内存的 Docker Desktop,Engine 本身的开销微乎其微。
- 源的区分:各大 Linux 发行版自带的包停留在老旧版本。想要完整的特性与生产级稳定性,必须使用官方仓库提供的版本(当前稳定版为 29.8.x 系列)。
| 维度 | 系统自带源 (docker.io) | Docker 官方源 (docker-ce) |
|---|---|---|
| 版本新旧 | 通常落后 1-3 年 | 实时同步上游最新稳定版 |
| Compose 支持 | 需要单独配置独立的 Python 包 | 原生集成 docker compose 插件 |
| 安全修复 | 依赖发行版维护者的后撤补丁 | 官方第一时间推送修复 |
| 推荐场景 | 临时沙箱测试 | 所有生产环境与个人主力机 |
- 存储陷阱:Docker 默认将所有镜像、容器和卷存放在
/var/lib/docker。如果不加规划,系统盘空间很快会被吃光。
部署:3 分钟装好官方最新版
使用发行版包管理器会引入过时的依赖,我们直接通过官方 APT 仓库进行安装。这段代码在 Ubuntu 和 Debian 上通用:
# 1. 移除可能存在的老旧版本
sudo apt remove docker.io docker-doc docker-compose docker-compose-v2 podman-docker containerd runc
# 2. 安装依赖并添加官方 GPG 密钥
sudo apt update
sudo apt install ca-certificates curl
sudo install -m 0755 -d /etc/apt/keyrings
sudo curl -fsSL https://download.docker.com/linux/ubuntu/gpg -o /etc/apt/keyrings/docker.asc
sudo chmod a+r /etc/apt/keyrings/docker.asc
# 3. 写入仓库配置(Debian 系统需将链接中的 ubuntu 改为 debian)
sudo tee /etc/apt/sources.list.d/docker.sources <<EOF
Types: deb
URIs: https://download.docker.com/linux/ubuntu
Suites: $(. /etc/os-release && echo "${UBUNTU_CODENAME:-$VERSION_CODENAME}")
Components: stable
Architectures: $(dpkg --print-architecture)
Signed-By: /etc/apt/keyrings/docker.asc
EOF
# 4. 更新源并安装核心组件
sudo apt update
sudo apt install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin
安装完成后,输入 sudo docker run hello-world 即可验证引擎是否正常工作。
加入 docker 组等于发放 root 权限
网上的教程通常会让你执行 sudo usermod -aG docker $USER,以免去每次敲 sudo 的麻烦。千万别在生产环境这么做。
Docker 的守护进程默认以 root 身份运行,并且 docker 组的用户可以无密码直接与该 socket 通信。把普通用户加入该组,等于给了他提权的通道:只需挂载主机的根目录到一个容器里,普通用户就能任意修改系统文件。在安全审计严格的环境中,保留 sudo 前缀是必要的物理防线;如果是纯属个人的折腾机,也请明白这个动作带来的风险边界。
写入 1 个配置文件,把磁盘膨胀扼杀在摇篮
Docker 的默认配置对存储极不友好:容器的控制台日志会无限增长,镜像缓存都堆在系统盘。在刚装完系统时,立刻创建或修改 /etc/docker/daemon.json:
{
"data-root": "/mnt/data/docker",
"log-driver": "json-file",
"log-opts": {
"max-size": "20m",
"max-file": "3"
}
}
修改完成后执行 sudo systemctl restart docker。这两行参数限制了单个容器的日志文件上限为 20MB(最多保留 3 个滚动文件),并将核心存储目录转移到了容量更大的数据盘 /mnt/data/docker。这一步做在前面,胜过日后在磁盘报警时焦头烂额地迁移数据。
引擎开销几乎为零,2核2G 也能跑满业务
很多新手担心服务器配置太低跑不动 Docker。事实上,不带图形界面的 Docker Engine 本质上只是在管理 Linux 的 Namespace 和 Cgroups 规则。它和你的服务器之间,是业务容器在限制系统,而不是 Docker 进程在吃资源。
目前市面上的入门级云服务器(以 2026-10-02 查询的阿里云活动数据为例,2核2G 规格低至 ¥38/年)对于 Docker Engine 来说绰绰有余。只要你的应用本身不吃内存,单台 2核2G 的机器可以同时跑起 Nginx反代、个人博客系统和一个轻量级数据库。
常见问题(FAQ)
Q:为什么输入 docker-compose 提示找不到命令?
新版本中,Compose 已经从独立的 Python 脚本变成了 Docker CLI 的官方插件。请直接使用 docker compose(中间没有横线)。
Q:国内服务器拉取镜像一直超时报错怎么办?
遇到网络连接阻断时,需要在 /etc/docker/daemon.json 中增加 registry-mirrors 数组字段,配置可用的镜像加速器地址,然后重启服务生效。
Q:磁盘还是不够用了,怎么清理老旧数据?
执行 docker system prune -a --volumes。该命令会大扫除,清空所有停止的容器、未使用的网络、悬空的镜像以及没有挂载的存储卷。
当 2核2G 的小机器因为磁盘被撑爆而 SSH 掉线时,你就会明白为什么修改 daemon.json 比学会那些花哨的容器编排命令更重要。工具的易用性往往会掩盖底层的物理限制,把基础设施的规矩立在拉取第一个镜像之前,才是稳定的最终保障。
参考链接:
- Install Docker Engine on Ubuntu
- Install Docker Engine on Debian