2核2G ECS的Docker生存指南:Swap、镜像加速、避免重build
一台2核2G的ECS,第一次build花了3小时。不是因为代码多,是因为内存太小,ffmpeg编译直接卡死。
问题:build一次要3小时
docker compose up --build --force-recreate每次都会从零安装依赖、编译ffmpeg,2G内存的ECS根本扛不住。
解决方案:
1. 加4G Swap
# 创建swap文件
sudo fallocate -l 4G /swapfile
sudo chmod 600 /swapfile
sudo mkswap /swapfile
sudo swapon /swapfile
# 开机自动挂载
echo '/swapfile none swap sw 0 0' | sudo tee -a /etc/fstab
2. 换阿里云apt镜像源
# Dockerfile中 RUN sed -i 's/deb.debian.org/mirrors.aliyun.com/g' /etc/apt/sources.list RUN sed -i 's/security.debian.org/mirrors.aliyun.com/g' /etc/apt/sources.list
3. 能复用镜像就复用
# 早上build过的镜像还在 → 直接up -d
docker compose up -d
# 只改前端时,只build frontend(5-10分钟)
docker compose build frontend
docker compose up -d
不要轻易--force-recreate全量rebuild后端。 ffmpeg在2G ECS上编译可能要几十分钟甚至更久。
Docker Hub镜像拉取超时
配置阿里云镜像加速器:
sudo tee /etc/docker/daemon.json <<-'EOF'
{
"registry-mirrors": ["https://xxxxx.mirror.aliyuncs.com"]
}
EOF
sudo systemctl daemon-reload
sudo systemctl restart docker
docker info | grep -A 1 "Registry Mirrors"
端口被占用
Bind for 0.0.0.0:80 failed: address already in use
原因: 系统Apache/Nginx已占80端口。
处理: Docker前端映射8080:80,宿主机Nginx监听80转发到8080/8081。或者systemctl stop httpd && systemctl disable httpd。
踩坑总结
2G ECS是小马拉大车。核心策略是:能不build就不build,build时尽量只build改动的部分。

浙公网安备 33010602011771号