Top.Mail.Ru
中文
Docker · 阅读约 14 分钟

如何为 Docker 选择 VPS,并避免容器数据丢失

容器启动快,但稳定运行取决于虚拟化、内存、磁盘、网络以及数据如何持久化。下面从单机 Docker 到小型 Compose 栈,给出选型、部署、备份和安全方案。

VPS 上的 Docker 容器、持久化卷、反向代理与备份架构
本文目录虚拟化资源磁盘部署数据安全错误常见问题

哪种虚拟化适合 Docker

优先选择 KVM 或其他完整硬件虚拟化。它通常提供独立内核能力、cgroups、网络与文件系统功能,兼容性也更可预测。容器型 VPS 可能限制内核模块、嵌套网络或存储驱动;购买前务必确认服务商明确允许 Docker,而不是只看 Linux 版本。

如果需要 Kubernetes 嵌套虚拟化、特殊 VPN 模块或自定义内核参数,应在试用期验证。独立 IPv4 方便对外提供服务,但多个容器通常通过一个反向代理共享 80/443 端口。

容器需要多少资源

场景建议起点注意事项
一个小型 API 或机器人1–2 vCPU、2 GB 内存限制日志,监控 OOM
应用 + 数据库 + 代理2–4 vCPU、4–8 GB 内存数据库缓存与持久化卷
多个业务服务4+ vCPU、8+ GB 内存资源限制、队列和可观测性
构建服务器或私有 registry快 CPU、NVMe、充足磁盘镜像层、缓存和网络流量

不要只把容器声明的内存相加:操作系统、Docker daemon、page cache、代理和监控同样占用资源。给数据库和高峰请求预留空间,为每个服务设置合理的 limit,避免一个泄漏的进程拖垮整台主机。选择方法可参考CPU 与内存估算

Docker 为什么会悄悄占满磁盘

旧镜像、停止的容器、构建缓存和无限增长的 JSON 日志都会积累。数据库写入 volume,但容器可写层、临时文件和异常日志也会消耗系统盘。NVMe 适合数据库、registry 和频繁构建,不过磁盘容量与持续性能同样重要。

实用部署架构

单台 VPS 可由反向代理负责 TLS 和路由,应用与数据库仅加入内部 Docker 网络。用 Compose 或等效的声明文件记录镜像版本、端口、volume、healthcheck 和重启策略。生产环境不要使用浮动的 latest 标签;版本必须能追溯到源码提交。

  1. 从仓库取得声明文件并校验受控配置。
  2. 从密钥存储注入 secret,不写入镜像或 Git。
  3. 先拉取固定版本镜像并执行数据库备份。
  4. 启动新版本,等待 healthcheck,再切换流量。
  5. 验证日志、指标和关键业务操作。
  6. 保留上一版本及明确回滚步骤。

无意外的更新

应用更新、数据库迁移和镜像更新应分开考虑。先在相同数据结构的测试环境演练。滚动更新不能自动解决不向后兼容的数据库变更;需要 expand/contract、双写或明确维护窗口。

安全发布规则:新版本必须有固定标识、可验证的 healthcheck、可逆的数据变更或独立回滚方案。数据已转换时,“重启容器”远远不够。

如何备份 volume 和数据库

容器不是备份。数据库应使用自身的一致性工具导出,或采用经过验证的物理备份流程;仅复制正在写入的数据目录可能得到不可恢复的副本。上传文件、配置和证书也要备份到 VPS 外部,并设置保留周期和加密。

定期在干净 VPS 上恢复:创建网络与 volume、导入数据库、启动指定镜像并执行功能检查。服务商快照便于整机回滚,但不能替代可移植备份。详见VPS 备份指南

Docker 主机的网络与安全

只暴露反向代理和必要管理端口。不要把数据库端口绑定到 0.0.0.0,也不要把 Docker socket 挂载进不受信任的容器,因为控制 socket 几乎等于主机 root 权限。使用非 root 镜像、只读文件系统和最少 Linux capabilities,及时更新主机与基础镜像。

SSH 使用密钥,防火墙默认拒绝,管理面板最好经 VPN 访问。监控容器重启、OOM、磁盘、证书、5xx、数据库延迟和备份结果。

常见错误

常见问题

1 GB 内存够 Docker 用吗?

单个很小的无数据库服务可能够,但 daemon、系统和更新都会占用空间。生产环境通常从 2 GB 起,多服务栈从 4 GB 起更稳妥。

Docker 需要独立 IPv4 吗?

不需要每个容器一个 IP。一般一个公网 IP 加反向代理即可;是否需要 IPv4 取决于对外访问和 DNS。

值得在单台 VPS 上装 Kubernetes 吗?

学习可以,单机生产通常增加复杂度却没有高可用。Compose 往往更清晰;需要多节点调度时再采用 Kubernetes。

PostgreSQL 可以放在 Docker 中吗?

可以,只要数据位于持久化 volume、版本固定、备份与恢复经过验证。问题通常来自错误存储和运维,而不是容器本身。

如何判断需要升级 VPS?

观察 CPU throttling、OOM、swap、磁盘延迟、容量和响应时间;排除泄漏与错误请求后,升级持续耗尽的那项资源。

查找适合 Docker 的 VPS选择 KVM、足够的内存与磁盘,然后比较完整费用和地区。
查看 KVM VPS

如果栈中包含数据库,可继续查看数据库 VPS 筛选