Compose是什么
Docker Compose是用于定义和运行多容器Docker应用程序的工具,即常说的容器编排工具。yaml文件配置应用程序的服务,通过Compose命令从配置中创建和启动所有服务。Compose可以工作在开发、测试、生产环境甚至持续集成(CI)工作流环境中。
使用步骤
使用Docker Compose大致有如下三个步骤:
1. 用dockerfile定义应用程序的环境,以便在任何地方复制。
2. 在docker-compose.yml中定义组成应用程序的服务,以便在单独的环境中一起运行。
3. 运行docker compose up命令,Compose启动并运行整个应用程序。
Compose 与 Docker的兼容性
docker-compose.yml是Compose的默认配置文件。该文件有多个版本格式,例如Version 1.0 file format、Version 2.x file format以及Version 3.x file format 等。其中,Version 1 file format仅支持service定义,将逐步被淘汰使用,Version 2.x增加支持卷或网络,Version 3.x为了在compose和docker引擎的swarm模式之间实现交叉兼容,删除了部分命令如:volume_driver, volumes_from, cpu_shares, cpu_quota, cpuset, mem_limit, memswap_limit, extends, group_add并添加了deploy命令。
在实际的项目开发中,可依据上图兼容性列表, docker-compose.yml选用合适的版本格式。docker-compose.yml(Version 3.x file format)文件内容一般如下所示:
version: '3'
services:
web:
build: .
ports:
- "5000:5000"
volumes:
- .:/code
- logvolume01:/var/log
links:
- redis
redis:
image: redis
volumes:
logvolume01: {}
Compose的特性
1.单个主机上的多个隔离环境
Compose使用工程名称将环境彼此隔离。Docker Compose运行目录下的所有文件(docker-compose.yml, extends文件或环境变量文件等)组成一个工程,默认工程名称是docker-compose.yml所在目录的目录名称,可以使用-p命令行选项或compose_project_name环境变量设置自定义项目名称。
2.创建容器时保留卷数据
Compose保留服务使用的所有卷。当docker compose up运行时,如果发现以前运行的任何容器,它会将卷从旧容器复制到新容器。此过程确保在卷中创建的任何数据都不会丢失。
3.仅重新创建已更改的容器
Compose缓存用于创建容器的配置。重新启动没有更改服务时,Compose将重复使用现有容器。这意味着可以很快地对环境进行更改(增量更改)。
4.变量和环境随意组合
Compose支持Compose环境变量文件(.env)。可以使用这些变量文件为不同的环境或者不同的用户随意组合。
常见使用场景
1.开发环境
在开发软件时,往往需要在一个独立或者与其他应用相隔离的环境运行应用程序并与之交互,Compose命令行工具即可以用于创建这样的环境并与之交互。
Compose文件提供了一种方法来记录和配置应用程序的所有服务依赖项(数据库、队列、缓存、Web服务API等)。使用Compose命令行工具,可以用一个命令(docker compose up)为每个依赖项创建和启动一个或多个容器。
2.自动化测试环境
任何持续部署或持续集成过程的一个重要部分是自动化测试套件。自动化的端到端测试需要一个运行测试的环境。Compose为测试套件提供了一种创建和销毁独立测试环境的方便方法,即通过在Compose文件中定义完整的环境,只需几个命令即可创建和销毁这些环境,如:
$ docker-compose up -d $ ./run_tests $ docker-compose down
3.单主机部署
Docker Compose一直专注于开发和测试工作流,但随着后续新版本不断发布,已经有了面向生产环境的功能。可以使用compose部署到远程Docker引擎。Docker引擎可以是提供Docker机器的单个实例,也可以是整个Docker Swarm集群。