在单台 Linux 服务器上部署 Docker,最佳实践应围绕安全性、可维护性、资源隔离与监控展开。以下是经过验证的核心建议:
✅ 一、基础环境与安装规范
-
使用官方推荐方式安装
# 移除旧版本(如有) sudo yum remove docker docker-client docker-client-latest docker-common docker-latest docker-latest-logrotate docker-logrotate docker-engine # 安装依赖 sudo yum install -y yum-utils # 添加 Docker 官方仓库(以 CentOS/RHEL 为例) sudo yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo # 安装最新稳定版 sudo yum install docker-ce docker-ce-cli containerd.io docker-compose-plugin💡 避免从第三方源或
apt-get install docker.io(Debian 默认包可能非最新版)。 -
启用 systemd 管理 + 开机自启
sudo systemctl enable --now docker sudo systemctl status docker -
配置镜像提速(国内用户必做)
编辑/etc/docker/daemon.json:{ "registry-mirrors": [ "https://docker.m.daocloud.io", "https://huecker.io" ], "insecure-registries": [], "log-driver": "json-file", "log-opts": { "max-size": "10m", "max-file": "3" } }⚠️ 重启 Docker:
sudo systemctl daemon-reload && sudo systemctl restart docker
🔒 二、安全加固(关键!)
| 措施 | 说明 |
|---|---|
| 非 root 运行容器 | 默认禁止 --privileged;应用层用 USER 指令指定非 root 用户 |
| 限制 capabilities | 如:docker run --cap-drop=ALL --cap-add=NET_BIND_SERVICE ... |
| 只读根文件系统 | --read-only --tmpfs /tmp:rw,size=100M |
| 网络隔离 | 创建自定义 bridge 网络;避免 --network host |
| 禁用 TCP 监听暴露 | 除非必要,不绑定 -p 0.0.0.0:xxx,改用 -p 127.0.0.1:xxx 或反向X_X |
| 定期更新 & 漏洞扫描 | 结合 docker scan(需 Docker Scout)或 Trivy 扫描镜像 |
示例安全启动命令:
docker run -d
--name myapp
--read-only
--cap-drop=ALL
--cap-add=NET_BIND_SERVICE
--security-opt=no-new-privileges:true
-p 127.0.0.1:8080:80
--user 1000:1000
myapp-image
📦 三、项目组织与生命周期管理
- 统一目录结构(推荐):
~/docker/ ├── projects/ │ └── myapp/ │ ├── docker-compose.yml │ ├── .env │ └── data/ # 持久化数据挂载点 ├── logs/ # 集中日志(可选) └── backup/ # 备份策略 - 使用 Compose 编排:避免手动
docker run,用docker compose up -d管理多服务。 - 标签规范:镜像打语义化标签(如
myapp:v1.2.3),避免latest用于生产。 - 清理机制:
# 定期清理悬空镜像、停止容器、未使用卷 docker system prune -a --volumes
📊 四、监控与日志
- 日志驱动:默认
json-file已合理;若量大可切换为fluentd或syslog。 - 内置监控:
docker stats # 实时资源占用 docker inspect <id> # 详细配置查看 - 推荐集成 Prometheus + Grafana:通过
cAdvisor或node-exporter采集指标。 - 告警设置:对 CPU/内存/磁盘使用率设置阈值告警(如使用 Alertmanager)。
🛡️ 五、备份与灾难恢复
- 数据持久化:始终将
/data,/var/lib/postgresql等挂载到宿主机目录或 volume。 - 备份策略:
# 示例:备份所有 volumes tar czf ~/backup/volumes-backup-$(date +%F).tar.gz $(docker volume ls -q) - 测试恢复流程:每季度验证一次备份可用性。
❌ 常见反模式(避免!)
- 直接
docker run -it长期运行服务(无守护进程管理) - 大量使用
--privileged或--net=host - 将敏感信息(密码、密钥)硬编码进镜像或环境变量明文
- 忽略磁盘空间监控 → 导致
/var/lib/docker爆满使系统崩溃
需要我针对你的具体场景(如:Web 服务、数据库、CI/CD 节点)提供定制化配置模板吗?
云知识