这是《Docker 与 Kubernetes 零基础实战指南》的独立章节版。本章从概念、实操和生产排查三个视角展开,代码块保留了原书可直接运行的版本。 本章安装 Docker Desktop、Docker Engine,并梳理生产环境的目录规划、权限、代理、镜像加速和验证方法。
2.1 安装前检查
Linux 检查:
uname -a
cat /etc/os-release
df -h
docker --version
确认:
- 操作系统版本受支持;
- 内核版本满足当前 Docker 版本要求;
- 数据盘空间充足;
- 不与 Podman、containerd 旧配置冲突;
- 企业网络代理和证书策略明确。
2.2 Linux 安装
以 Ubuntu 官方仓库为例:
sudo apt-get update
sudo apt-get install -y 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 apt-get update
sudo apt-get install -y docker-ce docker-ce-cli containerd.io \
docker-buildx-plugin docker-compose-plugin
启动:
sudo systemctl enable --now docker
docker version
docker compose version
2.3 Windows 与 macOS
安装 Docker Desktop 后检查:
docker version
docker info
docker run --rm hello-world
桌面版适合学习开发,不建议作为生产服务端。Windows 还要确认 WSL2 或 Hyper-V 后端正常。
2.4 权限配置
把用户加入 docker 组:
sudo usermod -aG docker $USER
重新登录后生效。
注意:能访问 /var/run/docker.sock 约等于拥有宿主机高权限。生产构建机不应随意授予普通用户 docker 组权限,可选 rootless Docker 或受控 CI。
2.5 数据目录
默认 Docker 数据目录常在 /var/lib/docker。生产建议独立数据盘:
{
"data-root": "/data/docker"
}
配置文件:
/etc/docker/daemon.json
重启:
sudo systemctl restart docker
查看:
docker info --format '{{.DockerRootDir}}'
2.6 镜像加速与代理
daemon.json 示例:
{
"registry-mirrors": [
"https://mirror.example.com"
]
}
构建代理:
sudo systemctl edit docker
[Service]
Environment="HTTP_PROXY=http://proxy.internal:7890"
Environment="HTTPS_PROXY=http://proxy.internal:7890"
Environment="NO_PROXY=localhost,127.0.0.1,.internal"
2.7 日志限制
避免容器日志无限增长:
{
"log-driver": "json-file",
"log-opts": {
"max-size": "50m",
"max-file": "5"
}
}
已有容器需要重建后生效。
2.8 验证安装
docker info
docker run --rm hello-world
docker run -d --name nginx-test -p 8080:80 nginx:1.27
curl -I http://127.0.0.1:8080
docker rm -f nginx-test
常见问题:
| 问题 | 排查 |
|---|---|
| permission denied | docker 组或 sudo |
| cannot connect to daemon | 服务、socket、WSL |
| pull timeout | 网络、镜像源、代理 |
| no space left | data-root 磁盘 |
| certificate error | 企业 CA 配置 |
本章小结
安装 Docker 的关键是规划数据目录、日志上限、网络代理和权限边界。开发环境追求方便,生产环境必须控制 Docker Socket 和镜像来源。
思考题
- 为什么生产要独立规划
data-root? - docker 组权限有什么风险?
- 如何限制容器日志增长?
- 拉取镜像超时如何排查?
- Rootless Docker 适合什么场景?