【Docker实战 01】低配VPS运行10个核心服务
2026-08-14 · DevCraft Studio
1核1G 甚至 512MB 的小鸡也能跑十几个服务。本文讲透 OOM Killer、Swap、zRAM、容器内存限制与反代,并推荐一批真·轻量开源应用。
低配 Docker 实战 · 共 2 篇
延伸阅读
更多相关攻略推荐:【10刀以内VPS系列 01】年付不到70块钱的便宜VPS,到底能用、【IP 地址 05】IPv6-Only VPS + Cloudfla、512MB/1GB 小内存 VPS 优化实战:1 美元机器能跑什么 、2026 实测:VPS 自托管 Whisper 语音转写——用 fa、点几下鼠标就能管服务器:cPanel、宝塔、1Panel 与 Hes。
一、先泼盆冷水:1GB 内存到底怎么分的
很多人一看到「1 核 1G」就觉得啥也干不了,其实真不是。一台刚装好系统的 Debian 12,开机啥都不干大概就吃掉 150~250MB 内存,Docker 守护进程(dockerd)本身常驻再占 80~150MB。也就是说,留给你的容器实际有 600MB 上下 的空间。只要肯精打细算,跑 10 个轻量服务完全没问题——但前提是,你得先学会「防饿死」。
低配机最大的敌人不是 CPU,而是 内存耗尽后触发的 OOM Killer(Out Of Memory Killer)。这是 Linux 内核的一个保命机制:当物理内存和 Swap 全被吃光,内核会挑一个「评分最高」的进程直接杀掉,腾出空间保系统不崩。问题来了——它经常挑错人,把你正在用的数据库或者反代干掉,服务就全瘫了。下面三道防线,咱们一道一道布。
有人会问:都 2026 年了,几刀真的够用吗?实测够。拿我个人举例,一台年付 $10 出头的 1 核 1G 机器,常年挂着监控、RSS、笔记、密码库、文件管理器,CPU 长期 5% 以下,内存靠 zRAM 撑到等效 2GB+,半年没重启过。关键在于「架构」而不是「堆配置」:把重活交给 Cloudflare 缓存、把状态外置、给每个容器划清资源红线。下面全按这个思路来。
二、第一道防线:Swap 交换分区(保命底线)
Swap 就是把磁盘划出一块当「虚拟内存」。速度比内存慢几百倍,但有它就不会被 OOM 直接杀。低配小鸡,尤其是 Oracle 免费机、RackNerd 那种年付几刀的,强烈建议开上。1GB 内存就建 1GB 的 Swap,512MB 内存建 1GB 也行。
最干净的做法是用 fallocate 直接预分配一个文件(比 dd 快得多):
sudo fallocate -l 1G /swapfile
sudo chmod 600 /swapfile
sudo mkswap /swapfile
sudo swapon /swapfile确认一下有没有生效:
swapon --show
free -h光 swapon 只是临时生效,重启就没了。要永久生效,把下面这行写进 /etc/fstab:
/swapfile none swap sw 0 0顺手调一下 vm.swappiness,这个参数决定系统「多乐意用 Swap」。默认是 60(比较积极),低配机建议设成 10,让它尽量先用物理内存,实在不够才换到磁盘,避免频繁读写磁盘导致卡顿:
echo 'vm.swappiness=10' | sudo tee -a /etc/sysctl.conf
echo 'vm.vfs_cache_pressure=50' | sudo tee -a /etc/sysctl.conf
sudo sysctl -p三、第二道防线:zRAM 内存压缩(把 1GB 当 2~3GB 用)
Swap 在磁盘上,慢。zRAM 的思路更妙:它在内存里划出一块「压缩区块」,把不常用的数据在内存里压缩存着。典型压缩比能到 2:1 甚至 3:1,等于白送你一倍多可用内存,而且全程在内存里跑,没有磁盘 I/O 抖动,比 Swap 快得多。
在 Debian / Ubuntu 上开 zRAM 最省事,装个 zram-tools 就完事:
sudo apt update
sudo apt install -y zram-tools编辑配置文件 /etc/default/zramswap,用 zstd 算法、占用 75% 内存、优先级拉满:
ALGO=zstd
PERCENT=75
PRIORITY=100重启服务让它生效,并刷新所有交换设备:
sudo systemctl restart zramswap
sudo swapoff -a && sudo swapon -a验证一下(应该能看到 /dev/zram0):
swapon --show
zramctl经验值:1GB 内存配 PERCENT=75 大约生成 768MB 的 zRAM。压缩不是免费魔法,CPU 也要干活,所以别贪心配到 200% 以上。理想组合是 zRAM + 一个小 Swapfile:平时靠 zRAM 顶,极端情况 Swapfile 兜底。
四、第三道防线:给容器戴上「紧箍咒」
光靠系统层面还不够,你得防止单个容器把内存吃光拖垮全机。两个关键手段:
1)内存上限(memory limit)。 用 docker run 起容器时直接限死:
docker run -d --name uptime-kuma \
--memory=256m --memory-swap=256m \
-p 3001:3001 louislam/uptime-kuma:1注意:--memory-swap 和 --memory 设成一样,意思是禁止这个容器再用 Swap,逼它只在物理内存里活动,保护宿主机更稳。在 docker-compose.yml 里对应写法是:
services:
uptime-kuma:
image: louislam/uptime-kuma:1
mem_limit: 256m
memswap_limit: 256m2)oom_score_adj(调 OOM 优先级)。 每个进程在 /proc/<pid>/oom_score_adj 里有个 -1000 到 1000 的评分。值越低越不容易被杀,-1000 代表「永不杀」。把反代、数据库这类关键容器调低,把 RSSHub 这种可重建的调高,OOM 来时内核就会先杀不重要的:
docker run -d --name nginx-proxy \
--oom-score-adj=-300 \
-p 80:80 -p 443:443 jc21/nginx-proxy-manager:2三条防线叠加,你的小鸡基本就告别「半夜被 OOM 干醒」了。
五、端口不够用?一个反代扛所有
10 个服务如果每个都暴露不同端口,域名、证书、防火墙全是噩梦。正确姿势是:只开 80 和 443,前面放一个反向代理,靠域名(SNI / Host 头)把流量分发给后端不同容器。两个主流选择:
Nginx Proxy Manager(NPM,新手友好):带网页后台,点点鼠标就能加站点、自动申请 Let's Encrypt 证书。管理界面在 81 端口,默认账号 admin@example.com / changeme,第一次登录务必改密码。
services:
npm:
image: jc21/nginx-proxy-manager:2
restart: unless-stopped
ports:
- "80:80"
- "443:443"
- "81:81"
volumes:
- ./data:/data
- ./letsencrypt:/etc/letsencrypt
mem_limit: 256m在后台 Add Proxy Host,填域名、选 http、转发主机填容器名或 docker 内部服务名、端口填容器内部端口(比如 Uptime Kuma 是 3001),SSL 标签页点一下申请证书、勾 Force SSL 即可。
Traefik(高阶、自动化):它本身盯着 Docker 守护进程,你只要在别的容器上贴几个 label,它就自动配好路由和证书,加新服务零手动操作。适合服务经常变动的人:
labels:
- "traefik.enable=true"
- "traefik.http.routers.kuma.rule=Host(`status.example.com`)"
- "traefik.http.routers.kuma.entrypoints=websecure"
- "traefik.http.routers.kuma.tls.certresolver=letsencrypt"
- "traefik.http.services.kuma.loadbalancer.server.port=3001"多域名共用 80/443 的原理就是 SNI:客户端在建立 TLS 连接时就带着想访问的域名,反代据此决定转发给谁,所以一个 IP 能挂无数个站点。
六、真·轻量应用推荐(附内存占用量级)
下面这些是我亲测在 1G 小鸡上能长期稳定跑的,内存都是空闲/典型占用,实际会随使用量涨:
- Uptime Kuma(监控):~150MB,站点/接口宕机微信钉钉推送,必装。
- 静态博客 / Hugo / Hexo:~10~30MB,本质就是 Nginx 吐文件,几乎零负担。
- FreshRSS(RSS 阅读器):~50MB,默认用 SQLite,不用再起数据库容器,省心。
- RSSHub(RSS 生成器):~150~300MB,纯 Node 抓取,开内存缓存
CACHE_TYPE=memory减少对源站压力。 - File Browser(文件管理):~30~50MB,网页版文件管理器,传文件比 SFTP 还顺手。
- memos(轻笔记):~50~80MB,类 flomo 的碎片化笔记,用 SQLite,超低占用。
- Vaultwarden(密码库):~10~30MB,Bitwarden 的轻量复刻,强烈推荐。
- Beszel / Netdata(监控面板):~35~80MB,看整机资源曲线。
算笔账:上面这些加起来空闲也就 600~800MB,配合 zRAM 和 Swap,1GB 小鸡稳稳塞下 10 个。注意别碰 Nextcloud(吃 CPU)、Jellyfin/Plex(要转码)、GitLab(要吃 4G+)、Elasticsearch——这些是低配机杀手。
七、一个 compose 把它们串起来
建一个共享网络,反代和所有后端都连上去,后端不暴露公网端口,只让反代转:
docker network create proxy-net然后每个服务都加 networks: - proxy-net,反代也连这个网。所有配置、数据目录用 volume 或 bind mount 落盘,比如:
services:
memos:
image: neosmemo/memos:stable
restart: unless-stopped
mem_limit: 128m
volumes:
- ./memos:/var/opt/memos
networks:
- proxy-net
networks:
proxy-net:
external: true八、日常维护三件套
- 看实时占用:
docker stats看每个容器吃多少内存,free -h看整机。 - 清垃圾:
docker system prune -f删掉停止的容器和悬空镜像,省磁盘。 - 限日志:在 compose 里加
logging: options: max-size: "10m",否则容器日志能把磁盘写爆。
九、别光限内存,CPU 也得管
1 核的 CPU 是另一个隐形瓶颈。如果某个容器疯狂占满单核,其他服务连响应都卡。给容器限 CPU 同样重要:
docker run -d --name rsshub \
--cpus=0.5 --memory=300m \
diygod/rsshub:latest在 compose 里就是:
services:
rsshub:
image: diygod/rsshub:latest
mem_limit: 300m
cpus: "0.5"另外几个常被忽视的守护进程调优:把 Docker 默认日志驱动设好上限(全局在 /etc/docker/daemon.json 里加 "log-driver":"json-file","log-opts":{"max-size":"10m","max-file":"3"}),避免日志偷偷吃满磁盘;存储驱动默认 overlay2 就行,别乱改;关掉系统里蓝牙、打印、snapd 这类用不上的后台服务,又省出几十 MB。
十、举个完整的「10 个服务」规划表
别被「10 个」吓到,下面这套是我在一台 RackNerd 1 核 1G 年付机上实测能长期跑的清单,全部走反代、共用 80/443,内存占用合计空闲约 700MB,配合 zRAM 游刃有余:
- status.example.com → Uptime Kuma(监控,~150MB)
- blog.example.com → 静态博客 / Nginx(~15MB)
- rss.example.com → FreshRSS(~50MB)
- hub.example.com → RSSHub(~250MB)
- files.example.com → File Browser(~40MB)
- note.example.com → memos(~60MB)
- vault.example.com → Vaultwarden(~25MB)
- mon.example.com → Beszel 监控面板(~40MB)
- proxy.example.com → Nginx Proxy Manager 后台(~120MB)
- dl.example.com → AList / 轻量网盘(~50MB)
域名用一条通配符 A 记录 *.example.com 指向 VPS IP 即可,加新服务时反代后台点一下就行,DNS 都不用动。推荐在 Cloudflare 用 DNS-only(灰云)解析,避免被限带宽。
十一、选对机器:哪些小鸡适合这么折腾
不是所有低价 VPS 都适合。优先选 KVM 架构(能自由开 Swap/zRAM,OpenVZ/LXC 往往限制内核模块,zRAM 可能开不了);内存至少 1GB,512MB 也能跑但得把服务砍到 5 个以内。几个适合练手的高性价比选择:RackNerd 年付几刀的 KVM、ColoCrossing 机房多延迟低、CloudCone 按量计费灵活、Oracle Cloud 免费机(2 核 1G/4 核 6G 白嫖但要抢)、Virtono 欧洲节点便宜。年付机记得先把本文三道防线布好再装服务,别等 OOM 了才补救。
最后提醒一句:镜像一律选 alpine / slim 版本(如 nginx:alpine),比 Ubuntu 基础镜像小几十上百 MB;能用 SQLite 就别起 PostgreSQL 容器。低配机的哲学就八个字:轻量、限制、勤清理。照着做,你的几刀小鸡照样能当生产环境用。而且一旦哪天商家涨价或跑路,只要平时把数据卷规规矩矩落盘,换个机器 docker compose up -d 就能满血复活——怎么做到 5 分钟无缝搬家,咱们下一篇接着聊。