Docker部署的React网站等服务的规范修改及存储问题咨询
问题解答
一、规范的服务更新流程
别再用nano直接改服务器代码了,这完全是野路子,给你一套从本地开发到EC2部署的标准流程:
- 本地代码管理与提交
- 本地修改代码后,把改动加到Git暂存区:
git add . - 提交改动并写清楚修改内容:
git commit -m "修复React页面弹窗bug/更新Node接口逻辑" - 把代码推送到远程Git仓库:
git push origin main(main是默认分支,也可能是master)
- 本地修改代码后,把改动加到Git暂存区:
- EC2拉取代码并更新Docker镜像
- 登录EC2服务器,进入项目根目录:
cd /path/to/your/project - 拉取最新代码:
git pull origin main - 重新构建Docker镜像:
- 单服务用Dockerfile:
docker build -t your-node-service:v2 .(给镜像加版本号,比如v2,避免和旧版本混淆) - docker-compose管理多服务:
docker-compose build react-service node-service(指定要更新的服务名,不用全量构建)
- 单服务用Dockerfile:
- 登录EC2服务器,进入项目根目录:
- 重启容器并生效
- 原生Docker命令:先停旧容器
docker stop your-node-container,删旧容器docker rm your-node-container,再用新镜像启动docker run -d --name your-node-container -p 3000:3000 your-node-service:v2 - docker-compose更省心:
docker-compose up -d react-service node-service,自动替换旧容器并后台运行
重点提醒:MongoDB容器一定要挂载数据卷(volume),不然更新容器会丢失数据库数据,比如docker-compose里配置
volumes: - mongodb-data:/data/db - 原生Docker命令:先停旧容器
二、EC2存储耗尽的解决办法
你每次删镜像重生成的操作确实会留下很多垃圾,Docker不会自动清理这些无用资源,按下面步骤解决:
- 排查存储占用情况
执行docker system df,能看到镜像、容器、卷、缓存各自的空间占用,一目了然。 - 一键清理无用资源
执行docker system prune -a,这个命令会删除所有未运行的容器、未被容器引用的镜像、未使用的网络、构建缓存。执行时会弹出确认,输入y即可;不想手动确认就加-f参数:docker system prune -af - 针对性清理(可选)
- 只删未使用的镜像:
docker image prune -a - 只删停止的容器:
docker container prune - 只删未被使用的卷:
docker volume prune(注意:别删MongoDB在用的卷,先确认Mongo容器在运行)
- 只删未使用的镜像:
- 优化后续更新操作
- 给镜像加版本号,比如每次构建用
v1、v2或日期标签,不用每次删旧镜像,定期清理即可 - 用docker-compose的话,直接执行
docker-compose up -d --build,自动重新构建服务并替换旧容器,不用手动删镜像容器 - 给EC2加定时任务,比如每天凌晨自动执行
docker system prune -af,省去手动清理的麻烦
- 给镜像加版本号,比如每次构建用
内容的提问来源于stack exchange,提问作者Peter Buonaiuto
相关产品推荐
相关产品推荐

