绑定挂载
使用绑定挂载,主机上的文件或目录(如 Amazon Fargate)被挂载到容器中。绑定挂载与使用它们的容器的生命周期相关。停止使用绑定挂载的所有容器后(例如,停止任务时),数据将被删除。有关更多信息,请参阅 Docker 文档中的使用绑定挂载
以下是绑定挂载的常见使用案例。
-
提供空数据卷以挂载在一个或多个容器中。
-
将 Dockerfile 路径及其内容公开到一个或多个容器。
使用绑定挂载时的注意事项
使用绑定挂载时应考虑以下事项。
-
对于使用平台版本
1.4.0
或更高版本(Linux)或者1.0.0
或更高版本(Windows)在 Amazon Fargate 上托管的任务,预设情况下,它们会收到至少 20GiB 的短暂存储以用于绑定挂载。对于 Linux 任务,临时存储总量最大可以增加到 200 GiB,方法是在任务定义中指定ephemeralStorage
对象。 -
要在任务运行时将 Dockerfile 中的文件公开到数据卷,Amazon ECS 数据平面将查找
VOLUME
指令。如果VOLUME
指令中指定的绝对路径与任务定义中指定的containerPath
绝对路径相同,则指令路径VOLUME
中的数据将复制到数据卷。在下面的 Dockerfile 示例中,/var/log/exported
目录中名为examplefile
的文件将写入主机,然后挂载到容器中。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
。您可以在 Dockerfile 中自定义这些权限。以下示例将目录的所有者定义为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 && chownnode
:node
/var/log/exported RUN touch /var/log/exported/examplefile USERnode
VOLUME ["/var/log/exported"]
在任务定义中指定绑定挂载
对于在 Fargate上托管的 Amazon ECS 任务,以下任务定义 JSON 代码段显示了任务定义的 volumes
、mountPoints
和 ephemeralStorage
对象的语法。
{ "family": "", ... "containerDefinitions" : [ { "mountPoints" : [ { "containerPath" : "
/path/to/mount_volume
", "sourceVolume" : "string
" } ], "name" : "string
" } ], ... "volumes" : [ { "name" : "string
" } ], "ephemeralStorage": { "sizeInGiB":integer
} }
下面将更详细地描述每个任务定义参数。
name
-
类型:字符串
必需:否
卷的名称。最多能包含 255 个字母 (大写和小写字母)、数字、连字符和下划线。此名称已在容器定义
sourceVolume
的mountPoints
参数中引用。 mountPoints
-
类型:对象数组
必需:否
您的容器中数据卷的挂载点。
此参数将映射到 Docker Remote API
的创建容器 部分中的 Volumes
以及 docker run的 --volume
选项。Windows 容器可在
$env:ProgramData
所在的驱动器上挂载整个目录。Windows 容器无法在其他驱动器上挂载目录,并且挂载点不能跨驱动器。sourceVolume
-
类型:字符串
必需:是,当使用
mountPoints
时要挂载的卷的名称。
containerPath
-
类型:字符串
必需:是,当使用
mountPoints
时要将卷挂载到的容器上的路径。
readOnly
-
类型:布尔值
必需:否
如果此值为
true
,则容器具有对卷的只读访问权。如果此值为false
,则容器可对卷进行写入。默认值为false
。
ephemeralStorage
-
类型:对象
必需:否
要为任务分配的临时存储容量。对于使用平台版本
1.4.0
或更高版本(Linux)或者1.0.0
或更高版本(Windows)的 Amazon Fargate 上托管的任务,此参数用于将短暂可用存储的总量扩展到默认数量之外。您可以使用 Copilot CLI、CloudFormation、Amazon SDK 或 CLI 为绑定挂载指定临时存储容量。
绑定挂载示例
以下示例介绍了为容器使用绑定挂载的最常见使用案例。
为 Fargate 任务分配更多的临时存储空间
对于在使用平台版本 1.4.0
或更高版本(Linux)或 1.0.0
(Windows)的 Fargate 上托管的 Amazon ECS 任务,您可以为任务中要使用的容器分配超过原定设置数量的短暂存储。此示例可以合并到其他示例中,以便为 Fargate 任务分配更多的临时存储空间。
-
在任务定义中,定义
ephemeralStorage
对象。sizeInGiB
必须是介于21
和200
之间的整数,单位是 GiB。"ephemeralStorage": { "sizeInGiB":
integer
}
为一个或多个容器提供空数据卷
在某些用例中,您希望为任务中的容器提供一些临时空间。例如,您可能在任务期间具有需要访问同一临时文件存储位置的两个数据库容器。可以通过绑定挂载实现此目标。
-
在任务定义
volumes
部分中,使用名称database_scratch
定义绑定挂载。"volumes": [ { "name": "
database_scratch
", } ] -
在
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
" } ] } ]
将 Dockerfile 中的路径及其内容公开给容器
在本例中,您有一个 Dockerfile,用于写入要挂载到容器中的数据。
-
创建 Dockerfile。下面的示例使用公共 Amazon Linux2 容器映像,并在我们希望挂载容器的
/var/log/exported
目录中创建一个名为examplefile
的文件。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
。可以在 Dockerfile 中变更这些权限。在下面的示例中,/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 && chownnode
:node
/var/log/exported RUN touch /var/log/exported/examplefile USERnode
VOLUME ["/var/log/exported"] -
在任务定义
volumes
部分中,使用名称application_logs
定义卷。"volumes": [ { "name": "
application_logs
", } ] -
在
containerDefinitions
部分中,创建应用程序容器定义。以便它们挂载存储。containerPath
值必须与 Dockerfile 的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
" } ] } ]