2. Docker 安装与配置

说实话,装 Docker 本身不难,但很多人一上来就踩坑。
我在好几个团队里都见过这种情况——开发机上装完就跑,结果线上环境不是权限炸了,就是 daemon 没起来。
这一节,我把安装、配置、权限收尾一套走完。
你会发现,流程其实很简单,但每个节点都有值得注意的细节。

2.1 各平台安装 Docker Engine

不同系统,安装命令差别不小。
下面我只写最常用的三种:Ubuntu、CentOS、macOS(Windows 流程类似,详看官方文档)。
记住:生产环境建议用 Linux 服务器,不要用 Docker Desktop 跑生产——我在项目里见过因为 Docker Desktop 虚拟化性能问题导致线上抖动的案例。

Ubuntu / Debian

sudo apt update
sudo apt install -y ca-certificates curl gnupg lsb-release
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg
echo "deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
sudo apt update
sudo apt install -y docker-ce docker-ce-cli containerd.io

等几分钟,安装完成。
可以用 sudo docker version 快速检查一下。

CentOS / RHEL

sudo yum install -y yum-utils
sudo yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
sudo yum install -y docker-ce docker-ce-cli containerd.io
sudo systemctl enable docker
sudo systemctl start docker

嗯,这里要注意:CentOS 8 以上的内核里 overlay2 驱动已经是默认,但如果你遇到 overlay 性能问题,可以检查一下 dmesg。
我曾经在一台 CentOS 7 服务器上见过存储驱动自动降级为 devicemapper,导致容器 IO 极差……后来手动改成 overlay2 才解决。

macOS / Windows

直接用 Docker Desktop 安装包。从官网下载 .dmg 或 .exe,双击安装。
我个人习惯在 macOS 上勾选“Use virtualization framework”以提升性能。
Windows 用户记得启用 WSL 2,否则容器运行会慢到怀疑人生。

2.2 Docker Daemon 配置

安装好只是第一步。
Docker Daemon 的默认配置很保守,尤其在中国大陆,你不配个镜像加速,拉镜像能等到下班。
配置文件在 /etc/docker/daemon.json(如果不存在就新建)。
下面是我常用的生产级配置:

{
  "registry-mirrors": ["https://docker.mirrors.ustc.edu.cn"],
  "log-driver": "json-file",
  "log-opts": {
    "max-size": "10m",
    "max-file": "3"
  },
  "data-root": "/data/docker",
  "exec-opts": ["native.cgroupdriver=systemd"],
  "storage-driver": "overlay2",
  "debug": false
}
注意: 修改 data-root 后,如果已有镜像/容器,需要迁移旧数据。我建议初次安装时就指定,避免后期搬家。

改完配置,重启 daemon:

sudo systemctl daemon-reload
sudo systemctl restart docker

检查是否生效:

docker info | grep -E "Storage Driver|Data Root|Registry Mirrors"

你想想看,如果没有配置 log 限制,一个无限输出的容器能把/var/lib/docker 撑满。我在一个 demo 环境里就吃过这个亏,半夜接到告警说磁盘满了……排查发现是某容器日志一天写了 5GB。从那以后,log-opts 成了我的必配项。

2.3 用户组设置与验证

刚装完 Docker,每次运行都要加 sudo,很烦对不对?
其实只需要把当前用户加到 docker 组:

sudo usermod -aG docker $USER
newgrp docker

然后重新登录终端(或者直接 newgrp docker 切换组会话)。
验证一下:

docker version
docker run hello-world

如果出现 Got permission denied,说明用户组没生效。
最常见的原因是:用户组添加后没有重新登录。我曾经有一个同事加了组,但直接打开新终端仍然报错——因为他用 SSH 建立的会话并不会自动刷新组信息,必须断开重连。

小技巧: 可以用 groups 命令确认当前用户所属组里有没有 docker。如果没有,执行 exec su -l $USER 刷新 session。

2.4 完整验证流程

上面三步走完,我建议做一次完整的健康检查:

docker info
docker container run --rm alpine echo "Docker is working"
docker ps -a
systemctl status docker

输出应该显示状态 active、存储驱动 overlay2、cgroup 驱动 systemd。
如果一切正常,恭喜——你已经拥有一个可用、配置合理的 Docker 环境了。

核心总结:
  • 安装:选官方源,不走第三方脚本(安全考量)。
  • 配置:镜像加速 + 日志限制 + 数据目录分离。
  • 权限:用户组 + 重新登录。
  • 验证:docker info 和 run hello-world。

下面我用一张图梳理整个安装与配置流程,方便你对照操作:

Docker 安装与配置流程 Docker 安装与配置流程 安装 Docker Engine Ubuntu / CentOS / macOS 配置 Docker Daemon daemon.json & 重启服务 用户组设置 usermod -aG docker 验证测试 docker info / hello-world 避坑提醒 重新登录后才能使用 docker 命令 (不加 sudo)