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

Docker容器化部署与Compose编排实战:从单容器到多服务一把跑通

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

开场:先别急着“能跑就行”,我们先把部署拆开看

哈喽各位,我是 eccfy,今天这期我们直接上手做一套Docker容器化部署与Compose编排实战。OK so,别一上来就堆命令,先看你现在到底卡在哪:是本地能跑、服务器跑不起来,还是数据库一换环境就炸?接下来我会用一个最常见的场景演示:一个 Web 应用 + MySQL + Nginx 反代,三件事一次编排好。

先说免费/官方路线:Dockerfile + Docker Compose 就够用了,适合绝大多数中小项目。它的好处是环境一致、迁移快、回滚简单;限制也很明显,复杂集群调度、自动伸缩那是 Kubernetes 的活,不是 Compose 的主场。今天我们先把“能稳定上线”这个目标拿下。

Chapter 1:先把镜像做对,不然后面全是噪音

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

你先在项目根目录放一个最小可用的 Dockerfile。我这里以 Node.js 服务举例,别管你是 Express、Nest 还是前端 SSR,思路一样:把依赖层和业务层分开,利用缓存加速构建。

看屏幕,我现在直接写:

FROM node:20-alpine
WORKDIR /app
COPY package*.json ./
RUN npm ci --only=production
COPY . .
EXPOSE 3000
CMD ["npm","start"]

这一步最常见的坑有三个:一是 package-lock.json 没带上导致每次构建都重装;二是把源码和依赖一起 COPY,缓存直接废掉;三是启动命令写死,导致容器里环境变量没吃进去。你要是做的是 Python、Go、Java,原理一样:先装依赖,再拷代码,再启动。

OK,接下来跑一次构建,顺手测一下体感速度。我在一台 2 核 4G 机器上实测,首次构建大概 70~90 秒,第二次只改业务代码时,如果层缓存命中,能压到 10~20 秒。这个差距就是 Docker 构建优化最直观的收益。

Chapter 2:Compose 编排实战,数据库、应用、反代一起起

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

现在进入重点,Docker Compose 教程真正好用的地方就在这里。你不要把容器一个个手动起,直接用 docker-compose.yml 把依赖关系、网络、数据卷一次写清楚。下面这个结构就是我最常用的起手式:

services:
  app:
    build: .
    ports:
      - "3000:3000"
    environment:
      - NODE_ENV=production
      - DB_HOST=mysql
      - DB_USER=root
      - DB_PASSWORD=example
    depends_on:
      - mysql

  mysql:
    image: mysql:8.0
    environment:
      - MYSQL_ROOT_PASSWORD=example
      - MYSQL_DATABASE=demo
    volumes:
      - mysql_data:/var/lib/mysql

  nginx:
    image: nginx:1.27-alpine
    ports:
      - "80:80"
    volumes:
      - ./nginx.conf:/etc/nginx/nginx.conf:ro
    depends_on:
      - app

volumes:
  mysql_data:

接下来你注意看,depends_on 只保证启动顺序,不保证数据库真的可连接。所以别被“容器都起来了”骗了,真正稳定的做法是给应用加健康检查,或者启动时做重试。比如 Node 里连库失败就等 3 秒重试 10 次,这比单纯依赖顺序靠谱得多。

如果你在找 Docker Compose 配置文件怎么写、docker容器化部署教程、或者 Compose编排怎么用,记住一个原则:服务之间只通过服务名通信,不要写死宿主机 IP。容器网络里 mysql 就是 DNS 名字,稳定很多。

Chapter 3:上线前必做的验证清单,别等崩了才排查

Now watch this,我们上线前先做验证,不要直接“我感觉没问题”。我一般按这个顺序走:

  1. 执行 docker compose up -d --build,确认容器都为 Up。
  2. 用 docker compose ps 看端口映射是否正确。
  3. 进入应用容器:docker compose exec app sh,确认环境变量和依赖都在。
  4. 检查日志:docker compose logs -f app,重点看数据库连接报错、端口冲突、权限问题。
  5. 访问 http://服务器IP,再做一次接口请求,确认反代没把路径搞坏。

我在实测里做过一个很典型的对比:手动安装 Nginx + MySQL + Node 的服务器,第一次部署大概 40 分钟;改成 Compose 后,重建和发布基本压到 5~8 分钟。最关键的是,换一台机器重新起服务,几乎不需要重新排环境,省掉一堆“这台机器能跑那台不能跑”的玄学问题。

最后给你一个排错口诀:起不来先看 logs,连不上先看网络,数据丢失先看 volume。很多所谓 Docker 问题,其实是配置、权限、挂载路径这三类。

收尾:如果还想更稳,下一步怎么升级

如果你已经把单机 Compose 跑顺了,下一步可以继续加上 .env 管理配置、健康检查、定时备份 MySQL volume,以及把 Nginx 配成 HTTPS 入口。今天这套方法足够覆盖大多数Docker容器化部署与Compose编排实战场景,而且是免费、可复制、可回滚的。

如果你想要我下一期继续拆 Docker Compose 上线教程、容器日志排查方法,或者 生产环境 Docker 怎么用,评论区告诉我。最后提醒一句,官方 Docker 文档和社区方案都够用;如果你想找一个省事的可视化管理选项,也可以自己对比 roxi.cc 再决定,但先把今天这套基础打牢,基本就不会乱。

怎么验证真的修好了:重启服务器后执行 docker compose up -d,检查应用首页能打开、数据库数据仍在、日志里没有重连失败,这三项都过了,才算真正稳定。

延伸阅读