编写 Compose 文件
学习用于定义服务、网络和卷的 `docker-compose.yml` YAML 语法
编写 Compose 文件 是 CoddyKit 上的免费 Docker & DevOps Fundamentals 课时。 这是第 2 节课,共 4 节。 你可以在下方免费阅读本课时的完整内容 — 然后在浏览器中使用内置代码编辑器和全天候 AI 导师进行实践。 这是 Docker & DevOps Fundamentals 学习路径的一部分,你的进度在网页和 CoddyKit 应用中同步。 Docker & DevOps Fundamentals 课程共包含 4 节课。
Compose 文件:应用蓝图
欢迎学习编写 Docker Compose 文件!docker-compose.yml 文件是定义和运行多容器 Docker 应用的蓝图。
它使用 YAML 语法,在一个文件中配置应用程序的服务、网络和卷。

YAML:快速复习
Docker Compose 文件使用 YAML(YAML Ain't Markup Language)编写。这是一种便于人类阅读的数据序列化标准。
- 键值对:
key: value - 列表:列表项以连字符开头(
- item) - 缩进:对于定义结构和层级关系至关重要。请使用空格,不要使用制表符!
`version` 键
每个 docker-compose.yml 文件都以 version 键开头。它指定 Compose 文件格式的版本,帮助 Docker Compose 理解如何解析您的文件。
对于大多数现代应用,建议使用 '3.8' 或类似的 '3.x' 版本。
version: '3.8'定义 `services`
services 部分用于定义组成应用程序的各个容器(服务)。每个服务代表一个组件,例如 Web 服务器或数据库。
在 services 下,您可以使用自选的名称列出每个服务。
version: '3.8'
services:
web:
# Service configuration goes here
database:
# Another service's configuration服务的 `image` 和 `ports`
在服务定义中,image 指定要使用的 Docker 镜像(例如 nginx:latest)。ports 键将容器端口映射到主机端口,从而允许外部访问。
"80:80"将主机端口 80 映射到容器端口 80。
version: '3.8'
services:
web:
image: nginx:latest
ports:
- "80:80"服务的 `volumes`
服务中的 volumes 键允许您将主机计算机中的路径挂载到容器中,或使用命名卷进行持久化存储。
此示例会将本地目录 ./app 挂载到容器内的 /usr/src/app。
version: '3.8'
services:
app:
image: my-node-app
volumes:
- ./app:/usr/src/app服务的 `environment` 变量
使用 environment 键向服务的容器传递环境变量。这对于可能因环境不同而变化的配置至关重要,例如数据库连接字符串。
变量可以用键值对或列表格式列出。
version: '3.8'
services:
backend:
image: my-api
environment:
- DATABASE_URL=postgres://user:pass@host:5432/db
- NODE_ENV=development顶层的 `networks` 和 `volumes`
除了在服务内部定义自定义的命名卷和网络之外,您还可以在 docker-compose.yml 文件的顶层声明它们。
这样可以更有条理地定义数据持久化和容器间通信,并且便于重复使用。
version: '3.8'
services:
# ... service definitions ...
networks:
my_app_network:
# custom network configuration
volumes:
db_data:
# named volume configuration整合所有内容
下面是一个结合所学内容的小示例。它定义了一个 Web 服务和一个数据库服务,并使用了镜像、端口和命名卷。
请注意,缩进会创建结构。
version: '3.8'
services:
web:
image: nginx:latest
ports:
- "80:80"
volumes:
- web_content:/usr/share/nginx/html
db:
image: postgres:13
environment:
- POSTGRES_DB=mydb
- POSTGRES_USER=user
- POSTGRES_PASSWORD=secret
volumes:
web_content:
db_data:检查 Compose 文件
以下哪个 YAML 代码片段正确地定义了一个名为“api”的 Docker Compose 服务,使用“myapi:1.0”镜像,并将容器端口 3000 映射到主机端口 8080?
回顾:Compose 文件基础
做得很好!您已经学习了编写 docker-compose.yml 文件的基础知识。
- 文件以
version开始。 services用于定义应用程序组件。- 每个服务都会使用一个
image,可以公开ports,使用volumes实现持久化,并设置environment变量。 - 顶层的
networks和volumes支持高级配置。
掌握这种 YAML 结构是编排多容器应用程序的关键!
常见问题解答
「编写 Compose 文件」课时是免费的吗?
是的 — 「编写 Compose 文件」的完整文本可在网页上免费阅读。要进行交互式练习(内置代码编辑器和全天候 AI 导师)并解锁 Docker & DevOps Fundamentals 课程的其余内容,请升级到 CoddyKit PRO。 Docker & DevOps Fundamentals 课程共包含 4 节课。
「编写 Compose 文件」这节课中我会学到什么?
学习用于定义服务、网络和卷的 `docker-compose.yml` YAML 语法 你通过在浏览器中直接运行的动手代码来练习 Docker & DevOps Fundamentals,全天候 AI 导师会在你学习这节课的过程中回答你的问题。
学习 Docker & DevOps Fundamentals 需要有经验吗?
无需任何先前经验。CoddyKit 上的 Docker & DevOps Fundamentals 课程适合初学者到高级学习者,你可以从这里开始或从头开始,按照自己的节奏学习。 这是第 2 节课,共 4 节。
「编写 Compose 文件」课时需要多长时间?
大多数 CoddyKit 课程大约需要 5–10 分钟。每节课都很精短且互动,所以你能稳步进步,并在网页和应用中从离开的地方继续。
我能在这节 Docker & DevOps Fundamentals 课中编写并运行代码吗?
能。每节 Docker & DevOps Fundamentals 课都包含内置代码编辑器,你可以在浏览器中直接编写并运行真实代码,并获得即时 AI 反馈 — 无需本地设置。
此课程中的所有课时
- 什么是 Docker Compose
- 编写 Compose 文件
- 部署多服务应用
- 环境变量与 .env 文件