Compose 简介

Compose是用于定义和运行多容器Docker应用程序的工具。通过 Compose,您可以使用YML文件来配置应用程序需要的所有服务。然后,使用一个命令,就可以从YML文件配置中创建并启动所有服务。

下载地址:https://github.com/docker/compose/releases

为什么要使用Compose

Compose 项目是 Docker 官方的开源项目,负责实现对 Docker 容器集群的快速编排。

使用前面介绍的Dockerfile我们很容易定义一个单独的应用容器。然而在日常开发工作中,经常会碰到需要多个容器相互配合来完成某项任务的情况。例如要实现一个 Web 项目,除了 Web 服务容器本身,往往还需要再加上后端的数据库服务容器;再比如在分布式应用一般包含若干个服务,每个服务一般都会部署多个实例。如果每个服务都要手动启停,那么效率之低、维护量之大可想而知。

这时候就需要一个工具能够管理一组相关联的的应用容器,这就是Docker Compose。

使用Compose基本是以下三个步骤

  1. 使用 Dockerfile 定义应用程序的环境,这样可以在任何地方重复使用。
  2. 使用 docker-compose.yml 定义构成应用程序的服务,这样它们可以在隔离环境中一起运行。
  3. 执行 docker compose up 命令来启动并运行整个应用程序。

docker-compse安装

以CentOS为例:

1
2
3
$ yum install -y docker-compose-plugin
$ docker compose version
Docker Compose version v2.6.0

通常安装docker时会一起安装,见:Docker安装

docker-compose.yml示例

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
version: "3.9"  # optional since v1.27.0
services:
web:
build: .
ports:
- "8000:5000"
volumes:
- .:/code
- logvolume01:/var/log
depends_on:
- redis
redis:
image: redis
volumes:
logvolume01: {}

version 指定本yml依从的compose哪个版本制定的。

build 指定为构建镜像上下文路径

cap_add,cap_drop 添加或删除容器拥有的宿主机的内核功能。

cgroup_parent 为容器指定父 cgroup 组,意味着将继承该组的资源限制

command 覆盖容器启动的默认命令

container_name 指定自定义容器名称,而不是生成的默认名称。

depends_on 设置依赖关系

deploy 指定与服务的部署和运行有关的配置。只在 swarm 模式下才会有用。

devices 指定设备映射列表。

dns 自定义 DNS 服务器,可以是单个值或列表的多个值

dns_search 自定义 DNS 搜索域。可以是单个值或列表。

entrypoint 覆盖容器默认的 entrypoint。

env_file 从文件添加环境变量。可以是单个值或列表的多个值。

environment 添加环境变量

expose 暴露端口,但不映射到宿主机,只被连接的服务访问。

extra_hosts 添加主机名映射。类似 docker client –add-host。

healthcheck 用于检测 docker 服务是否健康运行。

image 指定容器运行的镜像

logging 服务的日志记录配置。

network_mode 设置网络模式。

restart 重启策略

secrets 存储敏感数据

security_opt 修改容器默认的 schema 标签。

stop_grace_period 指定在容器无法处理 SIGTERM (或者任何 stop_signal 的信号),等待多久后发送 SIGKILL 信号关闭容器。

stop_signal 设置停止容器的替代信号。默认情况下使用 SIGTERM 。

sysctls 设置容器中的内核参数,可以使用数组或字典格式。

tmpfs 在容器内安装一个临时文件系统。可以是单个值或列表的多个值。

ulimits 覆盖容器默认的 ulimit。

volumes 将主机的数据卷或着文件挂载到容器里。

docker compose常用命令

  1. docker compose up
    • -d 在后台运行服务容器
    • -no-color 不使用颜色来区分不同的服务的控制输出
    • -no-deps 不启动服务所链接的容器
    • -force-recreate 强制重新创建容器,不能与-no-recreate同时使用
    • -no-recreate 如果容器已经存在,则不重新创建
    • -no-build 不自动构建缺失的服务镜像
    • -build 在启动容器前构建服务镜像
    • -abort-on-container-exit 停止所有容器,如果任何一个容器被停止,不能与-d同时使用
    • -t, -timeout TIMEOUT 停止容器时候的超时(默认为10秒)
    • -remove-orphans 删除服务中没有在compose文件中定义的容器
    • -scale SERVICE=NUM 设置服务运行容器的个数,将覆盖在compose中通过scale指定的参数
  2. docker compose ps
    • 列出项目中目前的所有容器
  3. docker compose stop
    • 停止正在运行的容器,可以通过docker-compose start 再次启动
  4. docker compose down
    • 停止和删除容器、网络、卷、镜像
    • -rmi type,删除镜像,类型必须是:all,删除compose文件中定义的所有镜像;local,删除镜像名为空的镜像
    • -v, -volumes,删除已经在compose文件中定义的和匿名的附在容器上的数据卷
    • -remove-orphans,删除服务中没有在compose中定义的容器
  5. docker compose start
    • 启动已经存在的服务容器
  6. docker compose logs
    • 查看服务容器的输出
  7. docker compose build
    • 构建(重新构建)项目中的服务容器。
    • -compress 通过gzip压缩构建上下环境
    • -force-rm 删除构建过程中的临时容器
    • -no-cache 构建镜像过程中不使用缓存
    • -pull 始终尝试通过拉取操作来获取更新版本的镜像
    • -m, -memory MEM为构建的容器设置内存大小
    • -build-arg key=val为服务设置build-time变量
  8. docker compose config
    • 验证并查看compose文件配置
    • -resolve-image-digests 将镜像标签标记为摘要
    • -q, -quiet 只验证配置,不输出。 当配置正确时,不输出任何内容,当文件配置错误,输出错误信息
    • -services 打印服务名,一行一个
    • -volumes 打印数据卷名,一行一个
  9. docker compose scale
    • 设置指定服务运行的容器个数。通过service=num的参数来设置数量
    • 例:docker compose scale web=3 db=2
  10. 更多命令请查看帮助文档:docker compose –help

引用

https://docs.docker.com/compose/

docker compose使用实例