Compose容器编排
Docker Compose是一个用于定义和运行Docker容器的工具。使用Compose,你可以使用YAML文件来配置Docker容器中运行的服务应用程序,你也可以将YAML配置交付给用户,这样用户只需一个简单的命令就可以创建并启动服务。
Compose、Swarm和Kubernetes
如果使用过Kubernetes,你会发现Compose配置和Kubernetes的部署配置有些类似,不过二者的区别是Kubernetes是一个完善的集群容器编排工具,目前几乎是生产环境的容器编排事实标准,而Compose仅支持单机的容器管理。
这一点其实Docker Compose非常尴尬,Compose原本是Docker官方的Docker Swarm(一个集群容器编排系统)的单机版,然而Swarm是一个彻底失败的项目,它在各方面都不如Kubernetes,不过单机版的Compose也并没有彻底失去存在意义,它用于搭建开发环境、在个人服务器上管理服务还是值得使用的。
Compose基本概念
服务(Services):对应一个Compose配置文件,定义应用中的各个组件,每个服务可以有一个或多个容器组成。
容器(Containers):对应Docker镜像运行的实例,可配置的参数包括镜像、端口映射、资源、重启策略等信息。
Compose基本使用
Compose相关的操作都要求当前目录下存在一个YAML配置文件docker-compose.yml,如果该文件不在当前目录,我们也可以使用-f参数进行指定,一个例子docker-compose.yml文件内容如下。
services:
web:
image: nginx:latest
ports:
- 80:80
db:
image: postgres:latest
ports:
- 5432:5432
environment:
POSTGRES_USER: root
POSTGRES_PASSWORD: root
配置文件中我们的服务定义了两个容器,分别是Nginx服务器和PostgreSQL数据库,在容器配置中,我们指定了镜像地址、端口映射关系和环境变量配置。在配置文件的同级目录,我们可以执行以下命令启动这个服务。
docker compose up -d
执行后我们可以看到Docker会自动拉取并按照我们配置的内容运行这两个容器,其中-d参数用于指定Compose在终端后台运行服务,如果不加这个参数它默认会在前台启动。

如果希望停止Compose服务,我们可以执行以下命令,停止后容器将被移除(这和Docker命令管理容器时不同),因此持久化数据必须挂载数据卷。
docker compose down
此外执行以下命令我们还可以查看Compose服务状态。
docker compose ps
使用Compose管理服务和Docker命令管理容器的区别
使用Compose管理服务和直接使用Docker命令管理容器之间有几个主要区别:
- Compose是基于
docker-compose.yml配置文件管理的,它是声明式的,管理的基本单元是服务,如果我们要修改一个服务内的容器配置,我们会停止服务、修改配置文件、重启服务,而不是直接去修改容器;而直接用Docker命令管理容器则相当于逐个对容器进行操作,例如创建、运行、停止、删除容器等。 - Compose适用于管理多个相关联的容器,例如一个完整的Web应用程序可能包含前端、后端、缓存中间件、关系型数据库等多个容器,Compose可以统一管理这些服务的启动顺序、网络连接等,使得多容器应用的部署和管理变得更加简便和可靠。
简而言之,对于一些简单的容器,直接使用Docker命令管理容器即可,而对于多个容器组成的复杂服务,使用Compose管理容器则更加方便和可靠。