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。
下面我用一张图梳理整个安装与配置流程,方便你对照操作: