Docker核心文件:DockerCompose文件
目录
1、概念
2、文件结构
3、核心配置项
3.1 version - 版本声明
3.2 services - 服务定义
3.3 networks - 网络配置
3.4 volumes - 数据卷配置
4、实战示例:搭建 WordPress
5、常用操作命令
1、概念
一个 Docker Compose 文件(通常是 docker-compose.yml)是一个 YAML 格式的配置文件。它的核心作用是用一份配置文件,定义一个多容器的应用,包括各个服务、它们之间的网络、数据卷等资源。之后,只需要一个简单的 docker-compose up 命令,就能启动整个应用栈。
2、文件结构
一个典型的 Docker Compose 文件包含以下几个主要部分:
| 部分 | 功能说明 |
|---|---|
version | 定义 Compose 文件格式的版本。 |
services | 核心部分,定义应用中的各个服务容器。 |
networks | 定义服务之间通信所使用的网络。 |
volumes | 定义服务中需要使用的持久化数据卷。 |
3、核心配置项
3.1 version - 版本声明
这行代码通常位于文件首行,用于指定 Compose 文件格式的版本,它与 Docker Engine 的版本有对应关系。建议使用较新的版本(如 '3.8')以获得更多功能。
version: '3.8'
3.2 services - 服务定义
这是文件中最关键的部分,每个服务都对应一个容器。
| 配置项 | 作用与示例 |
|---|---|
image | 指定服务所使用的镜像。image: nginx:latest |
build | 如果服务需要从 Dockerfile 构建镜像(自定义镜像),则指定构建上下文路径。build: ./app 或 详细配置:build:context: .dockerfile: Dockerfile.dev |
ports | 映射宿主机端口与容器端口。ports:- "8080:80"- "443:443" |
volumes | 挂载宿主机目录或数据卷到容器中,用于数据持久化或配置文件映射。volumes:- ./html:/usr/share/nginx/html- db_data:/var/lib/mysql |
environment | 直接设置容器内的环境变量。environment:- MYSQL_ROOT_PASSWORD=my-secret-pw- MYSQL_DATABASE=myapp |
env_file | 从一个文件中加载环境变量。env_file:- ./.env |
depends_on | 表达服务之间的启动依赖关系。Docker Compose 会先启动依赖的服务。depends_on:- db- redis |
command | 覆盖容器启动后默认执行的命令。command: ["nginx", "-g", "daemon off;"] |
restart | 配置容器的重启策略,例如 always 表示总是重启。restart: always |
3.3 networks - 网络配置
可以定义自定义网络,以实现服务间更安全、更高效的通信。
services:web:image: nginxnetworks:- frontenddb:image: mysqlnetworks:- frontend- backendnetworks:frontend:driver: bridgebackend:driver: bridge
在这个例子中,web 和 db 服务通过 frontend 网络相连,而 db 还单独连接了 backend 网络。
3.4 volumes - 数据卷配置
数据卷用于持久化容器产生的数据,防止数据因容器删除而丢失。
services:db:image: mysqlvolumes:- db_data:/var/lib/mysqlvolumes:db_data:driver: local
这里定义了一个名为 db_data 的命名卷,并挂载到了 MySQL 容器的数据目录。
4、实战示例:搭建 WordPress
下面是一个经典的 WordPress 项目的 Docker Compose 文件,它清晰地展示了上述配置项是如何协同工作的。
version: '3.9'services:db:image: mysql:5.7volumes:- db_data:/var/lib/mysqlrestart: alwaysenvironment:MYSQL_ROOT_PASSWORD: somewordpressMYSQL_DATABASE: wordpressMYSQL_USER: wordpressMYSQL_PASSWORD: wordpresswordpress:depends_on:- dbimage: wordpress:latestvolumes:- wordpress_data:/var/www/htmlports:- "8888:80"restart: alwaysenvironment:WORDPRESS_DB_HOST: db:3306WORDPRESS_DB_USER: wordpressWORDPRESS_DB_PASSWORD: wordpressWORDPRESS_DB_NAME: wordpressvolumes:db_data: {}wordpress_data: {}
这个例子是如何工作的:
-
服务:定义了
db(数据库)和wordpress(网站)两个服务。 -
依赖:
wordpress服务通过depends_on指明它依赖于db服务,因此数据库会先启动。 -
持久化:通过命名卷
db_data和wordpress_data分别保存数据库数据和网站文件。 -
环境变量:通过环境变量配置数据库连接信息,例如密码、数据库名等。
-
端口映射:将主机的
8888端口映射到wordpress容器的80端口,这样就能通过http://localhost:8888访问网站了。
5、常用操作命令
在包含 docker-compose.yml 文件的目录下,执行以下命令:
| 命令 | 说明 |
|---|---|
docker-compose up -d | 创建并启动所有服务(后台模式)。 |
docker-compose down | 停止并移除所有容器、网络。 |
docker-compose ps | 查看当前服务的状态。 |
docker-compose logs | 查看所有服务的日志输出。 |
docker-compose restart | 重启所有服务。 |
