用 Docker Compose 在云服务器上跑多服务:网络、数据卷与重启策略一次配对
在云服务器上同时跑 Web、数据库和缓存时,直接用 docker run 一个个起很容易丢配置:容器重启后网络变了、数据卷挂错了、依赖启动顺序乱了。用 Docker Compose 把这些写进一个文件,部署就变成可重复的操作。
先准备环境。确认 Docker 与 Compose 已安装:执行 docker version 与 docker compose version,能看到版本号即可。把项目放在固定目录,例如 /opt/myapp,不要放在临时目录,避免重启后找不到文件。
再写 compose.yaml。核心是三个部分。services 定义每个服务,例如 web 用 nginx 镜像映射 80 端口,app 用自己构建的镜像,db 用官方数据库镜像,cache 用 Redis 镜像。networks 定义一个自定义网络,让服务之间用服务名互相访问,例如 app 连接数据库时主机名直接写 db,不用写 IP。volumes 定义数据卷,例如 db_data 挂到数据库的数据目录,这样容器删除重建后数据还在。
依赖与启动顺序要用 depends_on 加健康检查。只写 depends_on 不够,因为它只保证启动顺序、不保证服务就绪。给数据库加 healthcheck,例如用数据库自带的 ping 命令定时检测,等状态为 healthy 再启动应用,能减少应用启动时连不上库的报错。
端口与环境变量要分开管理。端口映射只暴露必须的入口,例如只把 Web 的 80、443 映射到宿主机,数据库和缓存不要映射到公网。敏感信息不要写进 compose.yaml,放在同目录的 .env 文件里引用,例如数据库密码写成 ${DB_PASSWORD},并把 .env 加入 .gitignore,避免提交到代码仓。
重启策略按服务定。Web 和应用设 restart: unless-stopped,服务器重启后自动恢复;一次性初始化任务不要设自动重启,否则会反复执行。改完配置后执行 docker compose up -d 启动,执行 docker compose ps 看状态,执行 docker compose logs -f app 看应用日志,确认没有反复重启。
上线前做三项检查。第一,执行 docker compose config 检查配置文件语法与变量是否解析正确,避免变量没替换就启动。第二,确认数据卷确实挂载:进数据库容器执行数据目录列表,或写入一条测试数据后重建容器再查,数据还在才算通过。第三,检查安全组与防火墙:云服务器安全组只放行 Web 入口,数据库端口不要对公网放行,内网服务之间走自定义网络即可。
日常运维也有固定动作。更新镜像时先执行 docker compose pull,再执行 docker compose up -d,让 Compose 按依赖顺序重建;回滚时把镜像标签改回上一版本再执行一次 up -d。磁盘紧张时不要直接删数据卷,先执行 docker system df 看占用,再清理无用的镜像与停止的容器。备份数据库时不要只备份容器,先用数据库自带工具导出逻辑备份,再把备份文件拷出宿主机并异地保存一份。
常见问题多半出在三处。一是服务名解析失败,通常是服务没加进同一个自定义网络,检查 networks 配置。二是数据丢了,通常是把宿主机目录与具名卷混用,或重建时误删了卷,恢复前先确认卷名与挂载路径。三是启动时连不上数据库,通常是健康检查没配或应用重试次数太少,给应用加几次重试、把超时设得宽松一点,往往就能稳定启动。
把网络、数据卷、依赖检查、重启策略和备份写进同一个 Compose 文件后,多服务部署就不再依赖个人记忆,换一台云服务器也能按同样步骤复现。
- 点赞
- 收藏
- 关注作者
评论(0)