引言
Docker Compose 是一个用于定义和运行多容器 Docker 应用的工具。通过使用一个 docker-compose.yml
文件,您可以定义应用需要的所有服务,然后使用一个简单的命令就可以启动所有服务。本文将详细介绍 Docker Compose 的常用配置项及其使用方法。
基本概念
Docker Compose 的核心是 docker-compose.yml
文件,它是用 YAML 格式编写的,用来定义应用的服务、网络和卷。以下是 docker-compose.yml
文件的基本结构:
version: '3'
services:
service_name:
image: image_name
ports:
- "host_port:container_port"
volumes:
- host_path:container_path
environment:
- ENV_VAR=value
networks:
- network_name
常用配置项详解
1. version
version
指定 Compose 文件的版本。不同的版本支持不同的功能和语法。常见的版本有 '2' 和 '3',推荐使用最新的版本以获得最新的功能。
2. services
services
定义了应用的各个服务,每个服务可以看作是一个容器。下面是每个服务中常用的配置项。
image
image
指定服务使用的 Docker 镜像。可以是官方镜像,也可以是自定义的镜像。
image: nginx:latest
build
build
用于构建自定义镜像,可以指定 Dockerfile 的路径。
build: ./path_to_dockerfile
ports
ports
映射主机端口到容器端口,用于暴露容器的服务。
ports:
- "8080:80"
volumes
volumes
映射主机目录或文件到容器内,用于数据持久化或共享文件。
volumes:
- ./host_path:/container_path
environment
environment
设置环境变量,常用于配置应用的参数。
environment:
- ENV_VAR=value
command
command
覆盖容器启动时默认执行的命令。
command: python app.py
depends_on
depends_on
定义服务之间的依赖关系,确保按顺序启动。
depends_on:
- db
- redis
networks
networks
定义服务所属的网络,确保服务之间可以互相通信。
networks:
- frontend
- backend
3. volumes
volumes
配置持久化存储卷,可以在 services
外部定义全局卷。
volumes:
data_volume:
4. networks
networks
定义网络,可以在 services
外部定义全局网络。
networks:
frontend:
backend:
示例
以下是一个完整的 docker-compose.yml
示例,演示了一个简单的 Python Web 应用和一个 Redis 服务:
version: '3'
services:
web:
build: .
ports:
- "5000:5000"
volumes:
- .:/code
environment:
- FLASK_ENV=development
depends_on:
- redis
redis:
image: "redis:alpine"
volumes:
data_volume:
networks:
frontend:
backend:
结论
Docker Compose 通过一个简洁的配置文件来管理多容器应用,使得部署和管理变得简单高效。掌握 docker-compose.yml
文件中的常用配置项,您可以轻松定义和运行复杂的多容器应用。
暂无评论内容