Docker 入门:用 Compose 一条命令跑起前后端两个服务

举报
yd_214896353 发表于 2026/11/04 06:05:53 2026/11/04
【摘要】 用一份 docker-compose.yml 把 Nginx 前端和自建后端组织在一起,一条命令启动、查看日志和停止,适合 Docker 新手快速跑通前后端联调。

很多新手第一次接触前后端分离项目时,都会被一串命令吓住:先启动前端,再启动后端,还要记住端口、环境变量和启动顺序。只要其中一步出错,页面就可能一片空白。其实,Docker Compose 就是为了解决这种麻烦而生的工具:它用一个配置文件把多个服务组织在一起,一条命令就能全部跑起来。

Compose 到底是什么

可以把 Compose 理解成一份“服务清单”。我们不再逐个输入 docker run 命令,而是把服务名、镜像、端口、环境变量和依赖关系写进一个名为 docker-compose.yml 的文件。执行 docker compose up 后,Compose 会按清单创建网络、启动容器,并把它们的日志汇总到一个终端里。需要停止时,一条 docker compose down 就能清理容器和网络。

这种方式最大的好处是可重复。同一份文件在同事的电脑上、在测试机上都能跑出基本一致的环境,不再出现“在我电脑上明明可以”的尴尬。对新手来说,它还降低了记忆负担:不用背一长串参数,改配置就是改文件。

准备一个最小项目

假设我们要做一个极简的留言板。前端是一个静态页面,提供输入框和留言列表;后端是一个小型接口服务,负责接收留言并返回列表。为了演示方便,前端可以用 Nginx 托管静态文件,后端可以用 Node.js 写一个不到一百行的接口。这里不需要真实数据库,先用内存数组保存留言,重点是把两个服务连通。

项目结构可以这样安排:根目录放 docker-compose.yml,前端代码放在 frontend 目录,后端代码放在 backend 目录。前端目录里有一个 index.html 和一个简单的脚本,请求后端接口;后端目录里有 package.json 和 server.js,对外提供留言接口。这样的结构清晰,也方便以后把内存存储换成真正的数据库。

写一份能跑的 Compose 文件

下面是一份最小可用的配置:

services:
  frontend:
    image: nginx:alpine
    ports:
      - "8080:80"
    volumes:
      - ./frontend:/usr/share/nginx/html:ro
    depends_on:
      - backend
  backend:
    build: ./backend
    ports:
      - "3000:3000"
    environment:
      - PORT=3000

这里有几个要点值得新手注意。第一,frontend 使用现成的 Nginx 镜像,并把本地 frontend 目录挂载到容器里,这样改页面后刷新浏览器就能看到效果。第二,backend 使用 build,Compose 会按 backend 目录里的 Dockerfile 构建镜像,适合我们自己的代码。第三,ports 的写法是“主机端口:容器端口”,访问本地 8080 端口就能看到前端,访问本地 3000 端口的留言接口就能看到后端返回。

在 Compose 创建的默认网络里,服务之间可以直接用服务名互相访问。也就是说,前端页面在浏览器里请求后端时,如果直接写服务名加端口会失败,因为这段请求发生在用户浏览器里,而不是容器网络里。新手最容易在这里踩坑。稳妥的做法是让 Nginx 做一层反向代理,或者在开发阶段让前端直接请求本地 3000 端口。理解“谁在发请求”这一个问题,就能避开很多联调故障。

一条命令跑起来

在项目根目录执行:

docker compose up --build

第一次运行会下载 Nginx 镜像并构建后端镜像,稍等片刻后,终端里会出现两个服务的日志。打开浏览器访问本地 8080 端口,输入一条留言并提交,如果列表里出现了这条留言,说明前后端已经连通。想看某个服务的日志,可以用 docker compose logs -f backend;想停止全部服务,按 Ctrl+C 后执行 docker compose down。

如果启动失败,先不要急着重装 Docker。常见原因有三个:端口被占用、Dockerfile 路径写错、后端依赖没有安装成功。端口被占用时,改一下主机端口再试;路径问题可以对照文件结构逐级检查;依赖问题则看后端构建日志的第一条报错,往往就是缺包或网络问题。把报错信息原样复制下来搜索,通常比反复试错更快。

从能跑到好维护

跑通之后,还可以做三件小事让项目更好维护。第一是把环境变量抽出来,写进 .env 文件,避免把端口、密钥硬编码在 Compose 文件里。第二是给后端加上健康检查或启动等待,避免前端在后端还没就绪时就报错。第三是把常用命令写进 README,比如启动、停止、查看日志和清理数据,让新加入的同事照着做就能跑起来。

等熟悉了这套流程,再扩展也很容易:加一个数据库服务只需要在 Compose 文件里再写一个 service,并把连接信息通过环境变量传给后端;想换成生产部署,也可以基于同一份文件做调整,而不是从零重写。Compose 的价值就在于,它把“多个服务怎么配合”这件事从口头约定变成了可以版本管理的配置文件。

小结

对初学者来说,学 Docker 不必一开始就钻进镜像分层和网络细节。先用 Compose 把前后端两个服务跑起来,亲手改一次端口、改一次环境变量、看一次日志,概念自然就清楚了。当你能用一条命令复现整个开发环境时,就已经迈过了容器入门最关键的一步。

【声明】本内容来自华为云开发者社区博主,不代表华为云及华为云开发者社区的观点和立场。转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息,否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0)

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。