绑定挂载 - Amazon ECS
AWS 文档中描述的 AWS 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅中国的 AWS 服务入门

本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。

绑定挂载

使用绑定挂载,主机上的文件或目录(如AWS Fargate,被装载到容器中。Bind 挂载与使用它们的容器的生命周期相关。停止使用绑定装载的所有容器后(例如,停止任务时),数据将被删除。有关更多信息,请参阅 。使用绑定挂载Docker 文档中的任务。

以下是绑定挂载的常见使用案例。

  • 提供空数据卷以装载在一个或多个容器中。

  • 将路径及其内容从 Docker 文件公开到一个或多个容器。

使用绑定挂载时的注意事项

使用绑定挂载时,应考虑以下事项。

  • 对于托管在AWS Fargate使用平台版本1.4.0或更高版本,默认情况下,它们会收到最少 20 GiB 的绑定挂载的临时存储。临时存储总量可以增加到最大 200 GiB,方法是指定ephemeralStorage任务定义中的对象。

  • 要在运行任务时将文件从 Docker 文件公开到数据卷,Amazon ECS数据平面查找VOLUME指令。如果在VOLUME指令与containerPath任务定义中所指定的数据VOLUME指令路径被复制到数据卷。在下面的 Docker 文件示例中,一个名为examplefile中的/var/log/exported目录写入主机,然后挂载到容器中。

    FROM public.ecr.aws/amazonlinux/amazonlinux:latest RUN mkdir -p /var/log/exported RUN touch /var/log/exported/examplefile VOLUME ["/var/log/exported"]

    默认情况下,卷权限设置为0755,并且所有者作为root。这些权限可以在 Docker 文件中进行自定义。下面的示例将目录的所有者定义为node

    FROM public.ecr.aws/amazonlinux/amazonlinux:latest RUN yum install -y shadow-utils && yum clean all RUN useradd node RUN mkdir -p /var/log/exported && chown node:node /var/log/exported RUN touch /var/log/exported/examplefile USER node VOLUME ["/var/log/exported"]

在任务定义中指定绑定装载

适用于Amazon ECS托管在上的任务 Fargate,以下任务定义 JSON 代码段显示volumesmountPoints, 和ephemeralStorage任务定义的对象。

{ "family": "", ... "containerDefinitions" : [ { "mountPoints" : [ { "containerPath" : "/path/to/mount_volume", "sourceVolume" : "string" } ], "name" : "string" } ], ... "volumes" : [ { "name" : "string" } ], "ephemeralStorage": { "sizeInGiB": integer } }

以下详细介绍了每个任务定义参数。

name

类型:字符串

必需:否

卷的名称。最多能包含 255 个字母 (大写和小写字母)、数字、连字符和下划线。此名称已在容器定义 mountPoints 对象的 sourceVolume 参数中引用。

mountPoints

类型:对象数组

必需:否

您的容器中数据卷的装载点。此参数将映射到 Docker Remote API创建容器部分中的 Volumes 以及 docker run--volume 选项。

Windows 容器可在 $env:ProgramData 所在的驱动器上装载整个目录。Windows 容器无法在其他驱动器上装载目录,并且装载点不能跨驱动器。

sourceVolume

类型:字符串

必需:是,当使用 mountPoints

要挂载的卷的名称。

containerPath

类型:字符串

必需:是,当使用 mountPoints

要将卷装载到的容器上的路径。

readOnly

类型:布尔值

必需:否

如果此值为 true,则容器具有对卷的只读访问权。如果此值为 false,则容器可对卷进行写入。默认值为 false

绑定挂载示例

以下示例介绍了为容器使用绑定装载的最常见用例。

要分配增加的临时存储空间,请为Fargatetask

适用于Amazon ECS托管在上的任务Fargate使用平台版本1.4.0或更高版本,您可以为任务中要使用的容器分配超过默认数量的临时存储空间。此示例可以合并到其他示例中,以便为Fargate任务。

  • 在任务定义中,定义ephemeralStorage对象。这些区域有:sizeInGiB的值必须是21200并以 GiB 表示。

    "ephemeralStorage": { "sizeInGiB": integer }

为一个或多个容器提供空数据卷

在某些情况下,您希望为任务中的容器提供一些临时空间。例如,您可能在任务期间具有需要访问同一临时文件存储位置的两个数据库容器。使用绑定挂载可以实现此目标。

  1. 在任务定义 volumes 部分中,使用名称 database_scratch 定义绑定挂载。

    "volumes": [ { "name": "database_scratch", } ]
  2. containerDefinitions部分中,创建数据库容器定义,以便它们挂载卷。

    "containerDefinitions": [ { "name": "database1", "image": "my-repo/database", "cpu": 100, "memory": 100, "essential": true, "mountPoints": [ { "sourceVolume": "database_scratch", "containerPath": "/var/scratch" } ] }, { "name": "database2", "image": "my-repo/database", "cpu": 100, "memory": 100, "essential": true, "mountPoints": [ { "sourceVolume": "database_scratch", "containerPath": "/var/scratch" } ] } ]

将 Docker 文件中的路径及其内容公开给容器

在此示例中,您有一个 Docker 文件,用于写入要挂载到容器中的数据。

  1. 创建 Dockerfile。以下示例使用公共Amazon Linux 2容器映像并创建一个名为examplefile中的/var/log/exported目录,我们想要挂载在容器内。这些区域有:VOLUME指令应该指定一个绝对路径。

    FROM public.ecr.aws/amazonlinux/amazonlinux:latest RUN mkdir -p /var/log/exported RUN touch /var/log/exported/examplefile VOLUME ["/var/log/exported"]

    默认情况下,卷权限设置为0755,并且所有者作为root。这些权限可以在 Docker 文件中进行更改。在下面的示例中,/var/log/exported目录设置为node

    FROM public.ecr.aws/amazonlinux/amazonlinux:latest RUN yum install -y shadow-utils && yum clean all RUN useradd node RUN mkdir -p /var/log/exported && chown node:node /var/log/exported RUN touch /var/log/exported/examplefile USER node VOLUME ["/var/log/exported"]
  2. 在任务定义 volumes 部分中,使用名称 application_logs 定义卷。

    "volumes": [ { "name": "application_logs", } ]
  3. containerDefinitions部分中,创建应用程序容器定义,以便它们挂载存储。这些区域有:containerPath值必须与VOLUME指令。

    "containerDefinitions": [ { "name": "application1", "image": "my-repo/application", "cpu": 100, "memory": 100, "essential": true, "mountPoints": [ { "sourceVolume": "application_logs", "containerPath": "/var/log/exported" } ] }, { "name": "application2", "image": "my-repo/application", "cpu": 100, "memory": 100, "essential": true, "mountPoints": [ { "sourceVolume": "application_logs", "containerPath": "/var/log/exported" } ] } ]