在一台 2GB内存、4核CPU 的 Linux 服务器上安装和优化 Docker,需要兼顾资源限制与性能需求。以下是详细步骤和优化建议:
✅ 一、系统准备(以 Ubuntu 20.04/22.04 为例)
1. 更新系统
sudo apt update && sudo apt upgrade -y
2. 安装必要依赖
sudo apt install -y apt-transport-https ca-certificates curl software-properties-common
✅ 二、安装 Docker
1. 添加 Docker 官方 GPG 密钥
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg
2. 添加 Docker 仓库
echo "deb [arch=amd64 signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
3. 安装 Docker 引擎
sudo apt update
sudo apt install -y docker-ce docker-ce-cli containerd.io
4. 验证安装
sudo docker version
sudo docker run hello-world
5. (可选)将当前用户加入 docker 组,避免每次使用 sudo
sudo usermod -aG docker $USER
# 注销后重新登录生效
✅ 三、Docker 性能优化(针对 2GB 内存)
1. 配置 Docker 守护进程(/etc/docker/daemon.json)
创建或编辑配置文件:
sudo nano /etc/docker/daemon.json
添加以下内容(合理限制资源):
{
"log-driver": "json-file",
"log-opts": {
"max-size": "10m",
"max-file": "3"
},
"default-ulimits": {
"nofile": {
"Name": "nofile",
"Hard": 65536,
"Soft": 65536
}
},
"storage-driver": "overlay2",
"live-restore": true,
"default-shm-size": "64M"
}
🔹
log-opts: 防止日志占用过多磁盘
🔹default-ulimits: 提高文件句柄数
🔹storage-driver: 推荐overlay2(性能好,节省空间)
🔹default-shm-size: 默认/dev/shm是 64MB,防止某些应用崩溃
重启 Docker:
sudo systemctl restart docker
2. 启用 Swap(重要!2GB 内存容易 OOM)
由于内存较小,强烈建议启用 Swap 空间。
查看是否有 Swap:
sudo swapon --show
如果没有,创建 2GB Swap 文件:
sudo fallocate -l 2G /swapfile
sudo chmod 600 /swapfile
sudo mkswap /swapfile
sudo swapon /swapfile
永久挂载(写入 /etc/fstab):
echo '/swapfile none swap sw 0 0' | sudo tee -a /etc/fstab
调整 Swappiness(减少对 SSD 损耗):
echo 'vm.swappiness=10' | sudo tee -a /etc/sysctl.conf
sudo sysctl -p
3. 控制容器资源使用(运行时限制)
启动容器时限制资源,例如:
docker run -d
--memory=1g
--cpus=2
--restart=unless-stopped
your-image:tag
--memory=1g: 最多使用 1GB 内存--cpus=2: 最多使用 2 个 CPU 核心--restart=unless-stopped: 自动重启,避免服务中断
4. 使用轻量级基础镜像
选择小体积镜像,如:
alpine(~5MB)distrolessscratch
示例:用 nginx:alpine 而非 nginx:latest
5. 清理无用资源(定期执行)
# 删除停止的容器
docker container prune -f
# 删除悬空镜像
docker image prune -f
# 删除未使用的网络
docker network prune -f
# 删除构建缓存
docker builder prune -f
# 一键清理所有无用资源
docker system prune -f
可设置定时任务(crontab)每周清理:
crontab -e
# 添加:
0 3 * * 0 /usr/bin/docker system prune -f
6. 监控资源使用
使用 docker stats 实时查看:
docker stats
或安装轻量监控工具如 cAdvisor + Prometheus(注意资源开销)。
✅ 四、部署建议
- ❌ 避免运行内存密集型服务(如 MySQL、Elasticsearch 不建议直接跑在 2GB 上)
- ✅ 推荐运行:Nginx、静态网站、小型 API、反向X_X、缓存服务(Redis 可调内存限制)
- ✅ 使用
docker-compose管理多服务,但控制总内存使用
示例 docker-compose.yml(限制资源):
version: '3.8'
services:
web:
image: nginx:alpine
mem_limit: 200m
cpus: 1
ports:
- "80:80"
✅ 五、安全建议
- 定期更新系统和 Docker
- 不要以 root 运行应用容器
- 使用
.dockerignore避免敏感文件泄露 - 关闭不必要的端口(防火墙)
总结
| 项目 | 建议配置 |
|---|---|
| 内存 | 启用 2GB Swap,容器限制 ≤1GB |
| CPU | 容器最多分配 2-3 核 |
| 存储驱动 | overlay2 |
| 日志 | 限制大小(max-size: 10m) |
| 镜像 | 使用 Alpine 或轻量镜像 |
| 清理策略 | 定期 prune |
| 监控 | docker stats 或轻量监控工具 |
这样配置后,你的 2GB/4核 服务器可以稳定运行多个轻量级 Docker 服务,避免因资源不足导致崩溃。
PHPWP博客