
Docker Compose 多容器编排实战从 Compose 文件编写到环境管理的完整指南【免费下载链接】refineA React Framework for building internal tools, admin panels, dashboards B2B apps with unmatched flexibility.项目地址: https://gitcode.com/GitHub_Trending/re/refine导读本文基于 Docker Compose 的核心工作机制系统讲解如何使用一份 YAML 文件定义、启动并管理由多个容器组成的应用栈。你将掌握 Docker Compose 的安装与验证、Compose 文件的关键配置段services / networks / volumes、常用生命周期命令up / down / build / start / stop以及如何借助环境特定配置文件实现开发、测试、生产等多环境切换与配置覆盖让多容器应用的环境搭建从繁琐的命令序列收敛为一行命令。一、Docker Compose 是什么定义与用途Docker Compose 是面向多容器 Docker 应用的定义与执行工具。它的核心价值在于让你通过单个 YAML 文件同时定义并运行多个容器应用从而解决多容器编排时一条条执行 docker run的痛点。从适用场景看Docker Compose 非常适合开发、测试与预发布staging环境快速搭建与拆除完整环境快速集成流程CI在流水线中即建即毁团队协作将整个应用栈以文件形式纳入版本控制任何成员 clone 后都能一键复现环境隔离与一致性将应用与宿主机隔离并在多个实例之间保持行为一致。核心收益Benefits可复现环境Reproducible Environments可以轻松创建与生产环境一致的本地环境提前发现错误与意外行为降低线上风险。内部网络安全性Internal Container NetworkingCompose 文件中定义的所有容器默认置于同一个内部网络外部无法未授权访问同时简化了多容器应用的网络管理。可扩展性与高可用Scalability High Availability通过定义所需的容器实例数量即可横向扩容特定服务将负载分摊到多个实例提升容量与可用性。变更时才重建Recreate Only When ChangedCompose 会缓存构建容器时使用的配置当服务未发生变更时直接复用已有容器从而快速完成环境切换。典型使用场景Use Cases场景说明开发环境在隔离环境中运行应用及其依赖如特定方式初始化的数据库一条命令启动整个栈一条命令即可整体拆除自动化测试环境面向 CI/CD 流水线基于配置文件高效地创建与销毁测试环境单主机部署尽管 Compose 主要为开发与测试工作流设计也常用于单主机生产部署其本质仍是 Docker API 之上的一层封装而非 Swarm 或 Kubernetes 那样的完整编排器二、安装与验证不同操作系统的安装方式最快捷的方式是安装 Docker Desktop支持Windows、Linux、macOS。Docker Desktop 内置了 Docker Compose同时也包含其运行所必需的 Docker Engine 与 Docker CLI。安装完成后无需额外配置即可直接使用 Compose。验证安装在终端或命令提示符中执行docker-compose --version如果命令输出 Docker Compose 的版本号则说明安装成功。配置 Compose 环境配置 Docker Compose 的核心是编写描述应用服务的 Compose 文件。该 YAML 文件按服务组织信息包括镜像image、命令command、端口ports、数据卷volumes、环境变量environment、依赖dependencies等配置项。在项目目录中创建 Compose 文件后可在终端进入该目录并运行校验命令查看与校验配置docker-compose config说明该命令会解析并规范化 Compose 文件展开默认值、合并覆盖项便于确认最终生效的配置是否符合预期。三、编写 Docker Compose 文件YAML 语法基础Compose 文件使用YAML一种数据序列化语言同样广泛用于网络通信、对象持久化等场景。YAML 支持键值对与层级结构通过缩进表达各部分之间的层级关系同时支持行内注释——相比不允许行内注释的 JSONYAML 更适合描述 Compose 文件。Compose 文件的四个关键配置段version版本指定 Compose 文件语法所使用的版本。其值必须是字符串既可以包含主版本号也可以包含主、次版本号例如3.9或3。services服务在services映射下为每个服务配置对应的容器。每个服务在services键下设置一层映射服务名可随意命名。例如包含web、db、redis三个服务的应用services: web: image: nginx db: image: mysql redis: image: redisnetworks网络用于定义连接各服务、使它们能够相互通信的网络。若未显式定义Compose 会自动使用默认的 bridge 驱动创建一个新网络网络名称取自 Compose 文件所在目录的目录名。volumes数据卷volumes键的用法与docker volume create类似。定义好的卷可在services段内的配置键中被引用此外也可以声明通过docker volume create命令或其他 Compose 文件创建的外部卷external volumes。编写基础 Compose 文件的逐步指南1. 定义服务在services段下列出组成应用的服务容器。服务容器内的配置方式与docker run命令的参数一一对应即在服务配置映射中定义容器配置选项。2. 指定镜像与版本为每个服务从容器镜像仓库如 Docker Hub选择镜像。既可以使用latest标签也可以指定具体的镜像版本services: web: image: nginx:latest db: image: mysql:8.03. 配置卷映射bind mount卷映射遵循[host-path]:[container-path]格式。以下示例将宿主机的./html目录映射到web容器内的/usr/share/nginx/html目录services: web: image: nginx volumes: - ./html:/usr/share/nginx/html此外还可以进一步定制卷设置例如为命名卷指定只读选项等。4. 环境变量环境变量让容器可以在不修改镜像的前提下被动态配置。下面的示例为 MySQL 数据库服务定义了环境变量变量名为MYSQL_ROOT_PASSWORD值为secret可按需动态改变。可以添加多个环境变量每个变量独占一行并以-开头services: db: image: mysql environment: - MYSQL_ROOT_PASSWORDsecret - MYSQL_DATABASEmyapp5. 暴露端口使用ports键定义要在宿主机上暴露的端口并将其映射到容器内部端口。以下示例将web容器的80端口映射到宿主机的8080端口services: web: image: nginx ports: - 8080:80四、管理 Docker Compose 项目创建项目目录结构一个规范的 Compose 项目通常包含以下结构docker-compose.yml必须位于项目根目录声明要作为应用一部分运行的所有服务容器services/目录按需创建存放所有服务及其相关文件如Dockerfile、requirements.txt、app.py等volume/目录按需创建存放持久化数据目录这些目录可以作为数据卷挂载到 Compose 服务中。常用管理命令1.docker-compose up—— 构建并启动在配置文件所在的项目根目录执行该命令Compose 会构建并运行配置文件中定义的所有容器一条命令即可启动整个应用。docker-compose up2.docker-compose down—— 停止并移除停止应用并移除通过配置文件创建、启动的所有容器服务。同样在配置文件所在位置执行docker-compose down3.docker-compose build—— 重建镜像当 Dockerfile 或构建上下文发生变化时在配置文件所在位置执行该命令即可重新构建 YAML 中每个服务对应的镜像docker-compose build4.docker-compose start/docker-compose stop—— 启动与停止但保留容器如果只想启动或停止应用、而不移除容器可以使用docker-compose start docker-compose stop管理多个环境开发 / 生产等可以通过环境变量控制应用在不同环境中的行为。例如为开发环境与生产环境配置不同的网络设置、端口或数据库凭据。实现方式有两种在docker-compose.yml中通过environment或env_file键为每个服务提供环境变量为每个环境创建独立的配置文件例如docker-compose.production.yml、docker-compose.staging.yml、docker-compose.development.yml。使用独立配置文件时需要借助-f/--file选项指定要加载的文件。例如针对预发布环境docker-compose -f docker-compose.staging.yml up用环境特定文件覆盖配置overrideCompose 允许用一个配置覆盖另一个配置。覆盖文件可以持有主文件docker-compose.yml中任意配置的不同值。例如应用当前基于docker-compose.yml中的基础配置运行开发时想覆盖开发环境专属配置可以在同一目录创建docker-compose.development.override.yml写入开发环境的特定值然后通过-f显式指定需要叠加在基础文件上的覆盖文件。合并后查看最终生效配置的命令如下docker-compose -f docker-compose.yml -f docker-compose.development.override.yml config该命令输出的是两个文件合并、解析后的完整配置可用于验证覆盖结果是否符合预期。五、仓库中的真实案例用 Compose 编排 Refine 开发环境本仓库虽然没有独立的 docker-compose 文件但 文档内嵌示例 提供了一份可直接对照学习的docker-compose.yml——它用一个 Compose 文件同时编排了三个服务应用开发服务器、Refine Devtools 服务器、Nginx 反向代理完整运用了本文讲到的所有配置段version: 3 services: dev: build: context: . dockerfile: Dockerfile.dev volumes: - app:/app/refine - /app/refine/node_modules networks: - dev-network devtools: build: context: . dockerfile: Dockerfile.devtools volumes: - app:/app/refine - /app/refine/node_modules networks: - dev-network nginx: image: nginx:latest ports: - 80:80 volumes: - ./nginx.conf:/etc/nginx/nginx.conf networks: - dev-network networks: dev-network: driver: bridge volumes: app:这份示例与本文各节一一对应可以观察到几个值得注意的设计服务级构建dev与devtools两个服务各自通过build.dockerfile指定不同的 DockerfileDockerfile.dev、Dockerfile.devtools分别启动开发服务器端口 5173与 Devtools 服务器端口 5001——这正是本文定义服务 指定镜像/构建上下文的实战形态显式网络三个服务共享同一个dev-networkbridge 驱动Nginx 通过服务名dev:5173、devtools:5001做内部通信直观体现了同一 Compose 文件内的容器置于同一内部网络、可按服务名互访的机制命名卷与匿名卷app是顶层volumes声明的命名卷/app/refine/node_modules是匿名卷用于覆盖容器内 node_modules避免与宿主机挂载冲突端口映射Nginx 服务将宿主机80端口映射到容器80端口对外暴露整个开发栈。与之配套的 examples/store/Dockerfile 和 examples/with-material-ui-vite/Dockerfile 展示了典型的多阶段构建 Dockerfilebase → deps → builder → runner它们定义了镜像的构建过程而 Compose 文件则负责将这些镜像组织成可运行的多容器应用——两者组合起来就是Compose 编排 Dockerfile 构建的标准协作模式。此外如果项目需要更强的编排能力服务发现、自动扩缩容、跨主机部署本仓库 Kubernetes 部署配置 提供了基于 Helm Chart 的替代方案正如本文所强调的Compose 在单主机场景下更接近 Docker API 的封装而 Kubernetes 类编排器则面向更复杂的生产环境。六、总结与进阶方向回顾全文Docker Compose 的核心要点可以归纳为简化多容器应用的管理与编排通过一份 YAML 文件定义和配置应用的全部服务依据 YAML 中的配置自动创建网络、数据卷与容器提供可复现环境、内部网络安全、可扩展性、高可用与配置缓存等收益通过up、down、build、start、stop等单行命令管理容器通过不同的 YAML 文件建立并切换开发、测试、预发布、生产等不同环境。若想继续深入可以进一步探索更复杂的 Compose 能力外部网络external networks、健康检查health checks、服务依赖depends_on更多配置选项与最佳实践如命名卷的持久化策略、.env文件、profiles按需启停服务关注 Docker 与 Docker Compose 的最新版本与更新持续迭代知识体系将 Compose 环境与 CI/CD 流水线结合让测试环境真正做到即建即毁、按需扩展。【免费下载链接】refineA React Framework for building internal tools, admin panels, dashboards B2B apps with unmatched flexibility.项目地址: https://gitcode.com/GitHub_Trending/re/refine创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考