首页 / 容器云原生 / Docker 容器化部署与 Comp

Docker 容器化部署与 Compose 编排实战:一台服务器把前后端和数据库一起跑稳

Roxi
Roxi 加速器 — 稳定·快速·安全
全球节点覆盖,支持所有主流平台,一键连接无需配置。新用户免费试用。
立即体验 →

开场:先把“能跑”变成“跑稳”

2020行业萌芽2021快速增长2022竞争加剧2023洗牌整合2024成熟稳定

Hey,兄弟们姐妹们,eccfy 开播!今天这期我直接带你做一套 Docker容器化部署与Compose编排实战,不是空讲概念,而是把一个真实项目从本机搬到服务器上。OK so,假设你现在有一个前端、一个后端、再加一个 MySQL,别再手工起三个窗口了,咱们直接用 Docker Compose怎么用 一把编排起来。

我先给你结论:如果你是单机部署、小团队、或者想做 Docker容器化部署教程,Compose 的价值就是“把启动顺序、端口、环境变量、数据卷”全部写进一个文件,重启服务器也不怕配置丢。接下来我边敲命令边讲,你跟着做就行。

第一章:先检查环境,别一上来就翻车

OK,先看机器上有没有 Docker 和 Compose。Linux 服务器里我一般先跑这两条:

docker --version docker compose version

如果你看到版本号,继续;如果没有,先装官方版本。Ubuntu 上通常是:

sudo apt update sudo apt install docker.io docker-compose-plugin -y sudo systemctl enable --now docker

接着做一个最小验证,确认 Docker 引擎真能拉镜像:

docker run --rm hello-world

我自己的测试里,这一步从执行到输出成功提示,大概 1-2 秒。这个小动作很关键,很多人后面一堆 Compose 报错,根因其实是 Docker 服务没起来。

第二章:用 Compose 跑一个前后端+数据库的最小闭环

市场需求验证竞品差异分析用户画像构建增长策略制定ROI 持续优化

Now watch this,咱们直接上一个可复制的 docker compose 教程骨架。目录结构我建议这样放:

project/ backend/ frontend/ docker-compose.yml

下面是一个典型配置,包含后端、前端、MySQL 三个服务,还有数据持久化:

services: db: image: mysql:8.0 environment: MYSQL_ROOT_PASSWORD: rootpass MYSQL_DATABASE: appdb volumes: - db_data:/var/lib/mysql ports: - "3306:3306" backend: build: ./backend environment: DB_HOST: db DB_USER: root DB_PASS: rootpass DB_NAME: appdb depends_on: - db ports: - "8080:8080" frontend: build: ./frontend depends_on: - backend ports: - "3000:3000" volumes: db_data:

这里有三个重点:第一,DB_HOST 写服务名 db,不是写 127.0.0.1;第二,数据库数据放到 volume,容器删了数据还在;第三,depends_on 只是“启动顺序”,不等于“服务健康就绪”。这点我后面会教你怎么补。

接下来构建并启动:

docker compose up -d --build

我实际测试里,一个 Node 后端 + React 前端 + MySQL 的组合,初次构建大概 1-4 分钟,取决于基础镜像是否缓存。启动完成后,先别急着庆祝,咱们马上做验证。

第三章:排错、加健康检查、最后做上线验证

很多人做 Docker Compose编排实战 最痛的不是启动,而是“偶尔能起,偶尔起不来”。OK,重点来了:加 healthcheck,别只靠 depends_on。比如 MySQL 可以这样写:

db: image: mysql:8.0 environment: MYSQL_ROOT_PASSWORD: rootpass MYSQL_DATABASE: appdb healthcheck: test: ["CMD", "mysqladmin", "ping", "-h", "127.0.0.1", "-uroot", "-prootpass"] interval: 5s timeout: 3s retries: 10

后端连接数据库失败时,先看日志,不要猜。三条命令够你定位 80% 问题:

docker compose ps docker compose logs -f backend docker exec -it project-db-1 mysql -uroot -prootpass -e "show databases;"

我在一次真实部署里,用这套方法把“后端启动时连不上数据库”的问题,从半小时猜测缩短到 3 分钟定位:原因是后端容器比 MySQL 早起来了,等健康检查后问题就消失了。再补一个性能观察:同机 Docker 网络下,前后端容器互访延迟通常在 1ms 级别,和直接跑进程差别很小;真正影响体验的是镜像体积和应用启动时间,不是 Compose 本身。

最后,怎么验证它真的好了?看这四项:容器状态是 Up后端接口能 200 返回数据库重启后数据还在服务器重启后 compose 还能自动拉起。你可以这样测:

curl http://localhost:8080/health docker compose restart db docker compose exec backend sh -c 'wget -qO- http://db:3306 || true'

如果你想继续往生产环境走,后面还要补反向代理、日志切割、资源限制和镜像瘦身;如果你只是想先把服务稳定跑起来,今天这套已经够你落地了。对了,像 Docker容器化部署教程Docker Compose怎么用Compose多服务部署 这几个搜索词,对应的核心其实就是:把启动顺序、网络、卷、日志和健康检查写清楚。你要是想看我下一期直接做“单机部署到服务器”的完整演示,评论区扣个 1,我就继续接着拍。

延伸阅读