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命令管理容器之间有几个主要区别:

  1. Compose是基于docker-compose.yml配置文件管理的,它是声明式的,管理的基本单元是服务,如果我们要修改一个服务内的容器配置,我们会停止服务、修改配置文件、重启服务,而不是直接去修改容器;而直接用Docker命令管理容器则相当于逐个对容器进行操作,例如创建、运行、停止、删除容器等。
  2. Compose适用于管理多个相关联的容器,例如一个完整的Web应用程序可能包含前端、后端、缓存中间件、关系型数据库等多个容器,Compose可以统一管理这些服务的启动顺序、网络连接等,使得多容器应用的部署和管理变得更加简便和可靠。

简而言之,对于一些简单的容器,直接使用Docker命令管理容器即可,而对于多个容器组成的复杂服务,使用Compose管理容器则更加方便和可靠。

作者:Gacfox
版权声明:本网站为非盈利性质,文章如非特殊说明均为原创,版权遵循知识共享协议CC BY-NC-ND 4.0进行授权,转载必须署名,禁止用于商业目的或演绎修改后转载。