docker-componse-learning
Docker Compose 语法与使用指南
一、Docker Compose 简介
Docker Compose 是一个用于定义和运行多容器 Docker 应用程序的工具。通过 docker-compose.yml 配置文件,你可以声明应用程序的服务、网络和卷,然后使用一个命令启动并管理整个应用栈,极大提高了开发、测试和部署效率。
二、核心语法
- 配置文件结构
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15Docker Compose 的配置文件(docker-compose.yml)采用 YAML 格式,核心结构由 version、services、networks、volumes 四部分组成:
version: '3' # 版本号,推荐使用3.x,兼容大多数场景
services: # 定义服务(容器)
web:
image: nginx:latest # 镜像名称
ports:
- "80:80" # 端口映射
volumes:
-./html:/usr/share/nginx/html # 卷挂载
networks: # 定义网络
my-network:
driver: bridge # 网络驱动
volumes: # 定义卷
my-volume:
driver: local # 卷驱动 - services 配置详解
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21image:指定容器使用的镜像(支持仓库名、标签或完整镜像地址)。
build:指定构建镜像的上下文路径或 Dockerfile 路径(适用于自定义镜像)。
app:
build:
context:.
dockerfile: Dockerfile.development
ports:定义容器端口与宿主机端口的映射,支持 宿主机端口:容器端口 格式。
volumes:配置数据卷挂载,支持本地路径挂载或命名卷挂载。
本地路径挂载:./data:/app/data
命名卷挂载:my-volume:/app/data
environment:设置容器环境变量,可以是键值对或从文件加载。
db:
environment:
- MYSQL_ROOT_PASSWORD=secret
- MYSQL_DATABASE=test
depends_on:定义服务间的依赖关系,确保容器按顺序启动(但不保证服务完全就绪)。
web:
depends_on:
- db - networks 与 volumes
networks:自定义网络,容器可通过服务名称直接通信(例如 web 容器可通过 db 访问 db 服务)。
volumes:定义命名卷,便于跨服务共享数据,或实现数据持久化。
三、常用命令
命令
说明
docker-compose up
启动所有服务,默认前台运行;加 -d 参数则后台运行。
docker-compose down
停止并删除容器、网络和卷(默认不删除命名卷)。
docker-compose start/stop
启动 / 停止指定服务。
docker-compose ps
查看当前运行的容器。
docker-compose exec
在运行的容器中执行命令(例如 docker-compose exec web bash)。
docker-compose logs
查看服务日志。
四、使用示例
- 部署 WordPress + MySQL 应用执行 docker-compose up -d 后,即可通过 http://localhost:8080 访问 WordPress 站点。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21version: '3'
services:
wordpress:
image: wordpress:latest
ports:
- "8080:80"
environment:
- WORDPRESS_DB_HOST=db
- WORDPRESS_DB_USER=root
- WORDPRESS_DB_PASSWORD=secret
depends_on:
- db
db:
image: mysql:latest
environment:
- MYSQL_ROOT_PASSWORD=secret
- MYSQL_DATABASE=wordpress
volumes:
- db_data:/var/lib/mysql
volumes:
db_data: - 开发环境多服务协作
假设项目包含后端(Node.js)、前端(React)和数据库(PostgreSQL):开发时,修改代码后容器会自动重新加载,无需手动重启。1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30version: '3'
services:
backend:
build:./backend
ports:
- "3000:3000"
volumes:
-./backend:/app
environment:
- DATABASE_URL=postgresql://user:password@db/mydb
depends_on:
- db
frontend:
build:./frontend
ports:
- "5000:3000"
volumes:
-./frontend:/app
depends_on:
- backend
db:
image: postgres:latest
environment:
- POSTGRES_USER=user
- POSTGRES_PASSWORD=password
- POSTGRES_DB=mydb
volumes:
- pg_data:/var/lib/postgresql/data
volumes:
pg_data:
五、注意事项
版本兼容性:确保 Docker Compose 版本与 Docker 引擎版本匹配,避免配置不兼容问题。
网络通信:使用自定义网络时,容器间通过服务名称解析 IP,无需手动配置 IP 地址。
数据持久化:命名卷可确保容器删除后数据不丢失,适合生产环境。
资源限制:通过 deploy.resources 配置(适用于 Swarm 模式)或 –cpus、–memory 参数限制容器资源使用。
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来源 小徐的博客!
评论