Compose 简介
Compose是用于定义和运行多容器Docker应用程序的工具。通过 Compose,您可以使用YML文件来配置应用程序需要的所有服务。然后,使用一个命令,就可以从YML文件配置中创建并启动所有服务。
下载地址:https://github.com/docker/compose/releases
为什么要使用Compose
Compose 项目是 Docker 官方的开源项目,负责实现对 Docker 容器集群的快速编排。
使用前面介绍的Dockerfile我们很容易定义一个单独的应用容器。然而在日常开发工作中,经常会碰到需要多个容器相互配合来完成某项任务的情况。例如要实现一个 Web 项目,除了 Web 服务容器本身,往往还需要再加上后端的数据库服务容器;再比如在分布式应用一般包含若干个服务,每个服务一般都会部署多个实例。如果每个服务都要手动启停,那么效率之低、维护量之大可想而知。
这时候就需要一个工具能够管理一组相关联的的应用容器,这就是Docker Compose。
使用Compose基本是以下三个步骤
- 使用 Dockerfile 定义应用程序的环境,这样可以在任何地方重复使用。
- 使用 docker-compose.yml 定义构成应用程序的服务,这样它们可以在隔离环境中一起运行。
- 执行 docker compose up 命令来启动并运行整个应用程序。
docker-compse安装
以CentOS为例:
1 | $ yum install -y docker-compose-plugin |
通常安装docker时会一起安装,见:Docker安装
docker-compose.yml示例
1 | version: "3.9" # optional since v1.27.0 |
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常用命令
- 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指定的参数
- docker compose ps
- 列出项目中目前的所有容器
- docker compose stop
- 停止正在运行的容器,可以通过docker-compose start 再次启动
- docker compose down
- 停止和删除容器、网络、卷、镜像
- -rmi type,删除镜像,类型必须是:all,删除compose文件中定义的所有镜像;local,删除镜像名为空的镜像
- -v, -volumes,删除已经在compose文件中定义的和匿名的附在容器上的数据卷
- -remove-orphans,删除服务中没有在compose中定义的容器
- docker compose start
- 启动已经存在的服务容器
- docker compose logs
- 查看服务容器的输出
- docker compose build
- 构建(重新构建)项目中的服务容器。
- -compress 通过gzip压缩构建上下环境
- -force-rm 删除构建过程中的临时容器
- -no-cache 构建镜像过程中不使用缓存
- -pull 始终尝试通过拉取操作来获取更新版本的镜像
- -m, -memory MEM为构建的容器设置内存大小
- -build-arg key=val为服务设置build-time变量
- docker compose config
- 验证并查看compose文件配置
- -resolve-image-digests 将镜像标签标记为摘要
- -q, -quiet 只验证配置,不输出。 当配置正确时,不输出任何内容,当文件配置错误,输出错误信息
- -services 打印服务名,一行一个
- -volumes 打印数据卷名,一行一个
- docker compose scale
- 设置指定服务运行的容器个数。通过service=num的参数来设置数量
- 例:docker compose scale web=3 db=2
- 更多命令请查看帮助文档:docker compose –help