在生产环境主机上安装 Docker 需谨慎,避免影响现有服务。以下是关键注意事项和操作建议:
一、系统兼容性检查
操作系统版本
- Linux:主流发行版(CentOS 7+/Ubuntu 18.04+/Debian 10+),建议使用 LTS 版本。
- 内核要求:Linux 内核 ≥ 3.10(推荐 4.19+),可通过
uname -r
检查。 - 不支持:生产环境不建议在 macOS/Windows 上部署 Docker 服务端。
架构支持
- 确认主机架构(x86_64、ARM64 等),Docker 官方仅支持主流架构。
二、依赖与冲突检查
卸载旧版本
sudo yum remove docker \ docker-client \ docker-client-latest \ docker-common \ docker-latest \ docker-latest-logrotate \ docker-logrotate \ docker-engine
检查冲突软件
- 避免与 LXC、Rkt、Podman 等容器技术共存。
- 若已安装 Containerd/Runc,需确保版本兼容(Docker ≥ 20.10 依赖 Containerd ≥ 1.4)。
三、安装方式选择
推荐:官方仓库安装
# 添加 Docker 官方 GPG 密钥 curl -fsSL https://download.docker.com/linux/$(. /etc/os-release; echo "$ID")/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/$(. /etc/os-release; echo "$ID") $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null # 安装 Docker Engine sudo apt-get update && sudo apt-get install docker-ce docker-ce-cli containerd.io
避免:包管理器直接安装
- 如
yum install docker
或apt install docker
可能安装旧版,需通过官方仓库安装最新稳定版。
- 如
四、生产环境优化配置
数据目录规划
- 修改
/etc/docker/daemon.json
,指定数据存储路径(避免默认/var/lib/docker
占满系统盘):{ "data-root": "/data/docker", "storage-driver": "overlay2" }
- 修改
性能优化
- 使用
overlay2
存储驱动(替代aufs
/devicemapper
):sudo mkdir -p /etc/docker echo '{ "storage-driver": "overlay2" }' | sudo tee /etc/docker/daemon.json
- 使用
日志限制
- 配置容器日志大小限制,避免日志撑爆磁盘:
{ "log-driver": "json-file", "log-opts": { "max-size": "10m", "max-file": "3" } }
- 配置容器日志大小限制,避免日志撑爆磁盘:
五、安全强化措施
最小权限原则
- 避免使用
root
用户运行 Docker,创建专用用户并加入docker
组:sudo usermod -aG docker $USER
- 避免使用
禁用 Docker 远程 API
- 生产环境默认不暴露 2375/2376 端口,如需远程管理,使用 SSH 隧道或 TLS 加密。
镜像安全扫描
- 安装 Trivy/Clair 等工具,扫描镜像漏洞:
docker run --rm -v /var/run/docker.sock:/var/run/docker.sock aquasec/trivy:latest image nginx:alpine
- 安装 Trivy/Clair 等工具,扫描镜像漏洞:
六、网络与防火墙配置
网络策略
- 避免容器与宿主机端口冲突,使用端口映射时优先选择高位端口(>1024)。
防火墙规则
- 关闭不必要的端口,仅开放业务所需端口:
# 允许 Docker 内部通信 sudo firewall-cmd --permanent --zone=trusted --add-interface=docker0 sudo firewall-cmd --reload
- 关闭不必要的端口,仅开放业务所需端口:
七、监控与日志集成
资源监控
- 集成 Prometheus+Grafana 监控 Docker 服务:
# 启动 cAdvisor 收集容器指标 docker run -d --name=cadvisor --volume=/:/rootfs:ro --volume=/var/run:/var/run:rw --volume=/sys:/sys:ro --volume=/var/lib/docker/:/var/lib/docker:ro --publish=8080:8080 google/cadvisor:latest
- 集成 Prometheus+Grafana 监控 Docker 服务:
日志聚合
- 配置 Fluentd/ELK 收集容器日志:
{ "log-driver": "fluentd", "log-opts": { "fluentd-address": "localhost:24224" } }
- 配置 Fluentd/ELK 收集容器日志:
八、验证安装
# 启动 Docker 服务
sudo systemctl start docker && sudo systemctl enable docker
# 验证安装
sudo docker run --rm hello-world
九、生产环境最佳实践
版本管理
- 锁定 Docker 版本(如 24.0.6),避免自动升级引入兼容性问题。
备份策略
- 定期备份
/var/lib/docker
(数据目录)和配置文件。
- 定期备份
高可用设计
- 生产集群建议使用 Docker Swarm/Kubernetes,避免单点故障。
十、常见问题排查
存储驱动冲突
- 若启动报错
overlay2: the backing xfs filesystem is formatted without d_type
,需重新格式化磁盘并添加ftype=1
选项。
- 若启动报错
DNS 解析问题
- 在
/etc/docker/daemon.json
中配置 DNS 服务器:{ "dns": ["8.8.8.8", "8.8.4.4"] }
- 在
通过以上步骤,可确保 Docker 在生产环境中安全、稳定运行,同时避免对现有服务造成影响。