编写 docker-compose.yml 文件
时间: 2025-05-27 16:32:05 浏览: 17
### 编写 `docker-compose.yml` 文件指南
#### 了解基本结构和服务定义
`docker-compose.yml` 文件用于定义和运行多容器 Docker 应用程序。该文件的核心部分是 services,其中每个服务代表一个独立的应用组件或微服务[^3]。
#### 使用版本声明
为了确保兼容性和功能特性,在文件开头指定 Compose 文件格式的版本号:
```yaml
version: '3'
```
#### 定义服务
通过 `services:` 关键字下定义各个服务的具体参数。以下是常用的服务选项及其说明:
- **image**: 指定要拉取的基础镜像名称。
```yaml
image: nginx:latest
```
- **build**: 如果需要自定义镜像,则指明包含 Dockerfile 的上下文路径。
```yaml
build: ./app
```
- **ports**: 将主机端口映射到容器内部端口。
```yaml
ports:
- "8080:80"
```
- **volumes**: 实现持久化存储或者共享数据卷。
```yaml
volumes:
- /data/mysql:/var/lib/mysql # 主机目录映射至容器内路径
- mysqlvolume:/var/lib/mysql # 引用顶级 volumes 中预定义的数据卷
```
- **environment**: 设定环境变量供应用程序使用。
```yaml
environment:
MYSQL_ROOT_PASSWORD: example
```
- **networks**: 加入特定网络以便与其他服务通信。
```yaml
networks:
- webnet
```
- **depends_on**: 表达服务间的依赖关系以控制启动顺序。
```yaml
depends_on:
- db
```
- **restart**: 设置自动重启策略提高可用性。
```yaml
restart: always
```
- **command**: 替换默认入口指令执行其他操作。
```yaml
command: ["bash", "-c", "echo Hello World"]
```
#### 数据卷管理
对于数据库或其他需要保存状态的应用来说,合理规划数据卷至关重要。可以采用简短语法快速完成挂载设置[^4]:
```yaml
volumes:
- /var/lib/mysql # 自动创建并关联临时位置
- ~/configs:/etc/configs/:ro # 只读模式绑定本地配置文件夹
```
也可以预先在顶层定义命名型数据卷再引用:
```yaml
volumes:
data-volume:
```
随后在对应服务中引用此命名卷名即可实现更灵活的数据管理方案。
#### 网络配置
除了默认桥接网卡外,还可以显式创建自定义网络增强互联灵活性:
```yaml
networks:
frontend:
backend:
```
接着让不同服务加入相应网络从而形成隔离良好的拓扑架构。
#### 示例:完整的 Web 应用组合描述
这里给出一个简单的 LEMP (Linux, Nginx, MySQL, PHP) 堆栈实例作为参考模板:
```yaml
version: '3'
services:
web:
image: nginx:alpine
ports:
- "80:80"
volumes:
- ./html:/usr/share/nginx/html
networks:
- webnet
php:
image: php:fpm-alpine
volumes:
- ./php-src:/var/www/html
networks:
- webnet
db:
image: mariadb:latest
environment:
MYSQL_ROOT_PASSWORD: rootpass
volumes:
- db-data:/var/lib/mysql
networks:
- webnet
volumes:
db-data:
networks:
webnet:
```
上述例子展示了如何利用 `docker-compose.yml` 来编排一个多层架构的企业级Web应用部署流程[^2]。
阅读全文
相关推荐















