Compose 简介

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

Compose 安装

运行以下命令
$ sudo curl -L “https://github.com/docker/compose/releases/download/1.24.1/docker-compose-$(uname -s)-$(uname -m)” -o /usr/local/bin/docker-compose
测试是否安装成功:
$ docker-compose —version
cker-compose version 1.24.1, build 4667896b

使用

1.准备

创建一个测试目录:
$ mkdir composetest
$ cd composetest

2、创建 Dockerfile 文件

在 composetest 目录中,创建一个名为的文件 Dockerfile,内容如下:
FROM python:3.7-alpine
WORKDIR /code
ENV FLASK_APP app.py
ENV FLASK_RUN_HOST 0.0.0.0
RUN apk add —no-cache gcc musl-dev linux-headers
COPY requirements.txt requirements.txt
RUN pip install -r requirements.txt
COPY . .
CMD [“flask”, “run”]

3、创建 docker-compose.yml

在测试目录中创建一个名为 docker-compose.yml 的文件

4、使用 Compose 命令构建和运行您的应用

在测试目录中,执行以下命令来启动应用程序:
docker-compose up

yml 配置指令参考

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

添加环境变量。您可以使用数组或字典、任何布尔值,布尔值需要用引号引起来,以确保 YML 解析器不会将其转换为 True 或 False。

expose

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

extra_hosts

添加主机名映射。

healthcheck

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

image

指定容器运行的镜像。

logging

服务的日志记录配置

network_mode

设置网络模式。

restart

  • no:是默认的重启策略,在任何情况下都不会重启容器。
  • always:容器总是重新启动。
  • on-failure:在容器非正常退出时(退出状态非0),才会重启容器。
  • unless-stopped:在容器退出时总是重启容器,但是不考虑在Docker守护进程启动时就已经停止了的容器

    secrets

    存储敏感数据,例如密码:

    security_opt

    修改容器默认的 schema 标签。

    stop_grace_period

    指定在容器无法处理 SIGTERM (或者任何 stop_signal 的信号),等待多久后发送 SIGKILL 信号关闭容器。
    stop_grace_period: 1s # 等待 1 秒
    stop_grace_period: 1m30s # 等待 1 分 30 秒
    默认的等待时间是 10 秒。

    stop_signal

    设置停止容器的替代信号。默认情况下使用 SIGTERM 。
    以下示例,使用 SIGUSR1 替代信号 SIGTERM 来停止容器。
    stop_signal: SIGUSR1

    sysctls

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

    tmpfs

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

    ulimits

    覆盖容器默认的 ulimit。

    volumes

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