生命周期策略的示例 - Amazon ECR
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅中国的 Amazon Web Services 服务入门

生命周期策略的示例

以下是示例生命周期策略,其中显示了语法。

根据镜像使用期限筛选

以下示例显示了策略的生命周期策略语法,该策略使超过 14 天的未标记镜像过期:

{ "rules": [ { "rulePriority": 1, "description": "Expire images older than 14 days", "selection": { "tagStatus": "untagged", "countType": "sinceImagePushed", "countUnit": "days", "countNumber": 14 }, "action": { "type": "expire" } } ] }

根据镜像计数筛选

以下示例显示了仅保留一个未标记镜像并使所有其他镜像过期的策略的生命周期策略语法:

{ "rules": [ { "rulePriority": 1, "description": "Keep only one untagged image, expire all others", "selection": { "tagStatus": "untagged", "countType": "imageCountMoreThan", "countNumber": 1 }, "action": { "type": "expire" } } ] }

根据多个规则筛选

以下示例在生命周期策略中使用多条规则。在此提供了一个示例存储库和生命周期策略以及结果的说明。

示例 A

存储库内容:

  • 镜像 A,标签列表:["beta-1", "prod-1"],已推送:10 天前

  • 镜像 B,标签列表:["beta-2", "prod-2"],已推送:9 天前

  • 镜像 C,标签列表:["beta-3"],已推送:8 天前

生命周期策略文本:

{ "rules": [ { "rulePriority": 1, "description": "Rule 1", "selection": { "tagStatus": "tagged", "tagPrefixList": ["prod"], "countType": "imageCountMoreThan", "countNumber": 1 }, "action": { "type": "expire" } }, { "rulePriority": 2, "description": "Rule 2", "selection": { "tagStatus": "tagged", "tagPrefixList": ["beta"], "countType": "imageCountMoreThan", "countNumber": 1 }, "action": { "type": "expire" } } ] }

此生命周期策略的逻辑是:

  • 规则 1 标识带有前缀 prod 标签的镜像。它应该从最早的镜像开始标记镜像,直到剩下一个或更少的匹配镜像。它将镜像 A 标记为过期。

  • 规则 2 标识带有前缀 beta 标签的镜像。它应该从最早的镜像开始标记镜像,直到剩下一个或更少的匹配镜像。它将镜像 A 和镜像 B 标记为过期。但是,规则 1 已标记镜像 A,如果镜像 B 已过期,则会违反规则 1,因此跳过。

  • 结果:镜像 A 已过期。

示例 B

这与前面的示例相同,但规则优先级顺序会更改以展示结果。

存储库内容:

  • 镜像 A,标签列表:["beta-1", "prod-1"],已推送:10 天前

  • 镜像 B,标签列表:["beta-2", "prod-2"],已推送:9 天前

  • 镜像 C,标签列表:["beta-3"],已推送:8 天前

生命周期策略文本:

{ "rules": [ { "rulePriority": 1, "description": "Rule 1", "selection": { "tagStatus": "tagged", "tagPrefixList": ["beta"], "countType": "imageCountMoreThan", "countNumber": 1 }, "action": { "type": "expire" } }, { "rulePriority": 2, "description": "Rule 2", "selection": { "tagStatus": "tagged", "tagPrefixList": ["prod"], "countType": "imageCountMoreThan", "countNumber": 1 }, "action": { "type": "expire" } } ] }

此生命周期策略的逻辑是:

  • 规则 1 标识以 beta 标记的镜像。它应该从最早的镜像开始标记镜像,直到剩下一个或更少的匹配镜像。它可以看到所有三个镜像,并将镜像 A 和镜像 B 标记为过期。

  • 规则 2 标识以 prod 标记的镜像。它应该从最早的镜像开始标记镜像,直到剩下一个或更少的匹配镜像。它不会看到任何镜像,因为所有可用镜像已经被规则 1 标记,因此不会标记其他镜像。

  • 结果:镜像 A 和 B 已过期。

在单个规则中筛选多个标签

以下示例为单个规则中的多个标签前缀指定生命周期策略语法。此处提供了一个示例存储库和生命周期策略以及结果的说明。

示例 A

在单个规则上指定多个标签前缀时,镜像必须与所有列出的标签前缀匹配。

存储库内容:

  • 镜像 A,标签列表:["alpha-1"],已推送:12 天前

  • 镜像 B,标签列表:["beta-1"],已推送:11 天前

  • 镜像 C,标签列表:["alpha-2", "beta-2"],已推送:10 天前

  • 镜像 D,标签列表:["alpha-3"],已推送:4 天前

  • 图片 E,标签列表:["beta-3"],已推送:3 天前

  • 镜像 F,标签列表:["alpha-4", "beta-4"],已推送:2 天前

{ "rules": [ { "rulePriority": 1, "description": "Rule 1", "selection": { "tagStatus": "tagged", "tagPrefixList": ["alpha", "beta"], "countType": "sinceImagePushed", "countNumber": 5, "countUnit": "days" }, "action": { "type": "expire" } } ] }

此生命周期策略的逻辑是:

  • 规则 1 标识了标记为 alphabeta 的镜像 它可以看到镜像 C 和 F。它应该标记超过五天的镜像,镜像 C 符合此条件。

  • 结果:镜像 C 已过期。

示例 B

以下示例说明标签不是独占的。

存储库内容:

  • 镜像 A,标签列表:["alpha-1", "beta-1", "gamma-1"],已推送:10 天前

  • 镜像 B,标签列表:["alpha-2", "beta-2"],已推送:9 天前

  • 镜像 C,标签列表:["alpha-3", "beta-3", "gamma-2"],已推送:8 天前

{ "rules": [ { "rulePriority": 1, "description": "Rule 1", "selection": { "tagStatus": "tagged", "tagPrefixList": ["alpha", "beta"], "countType": "imageCountMoreThan", "countNumber": 1 }, "action": { "type": "expire" } } ] }

此生命周期策略的逻辑是:

  • 规则 1 标识标记为 alphabeta 的镜像。它可以看到所有的镜像。它应该从最早的镜像开始标记镜像,直到剩下一个或更少的匹配镜像。它将镜像 D 标记为过期。

  • 结果:镜像 A 和 B 已过期。

筛选所有镜像

以下生命周期策略示例指定具有不同筛选条件的所有镜像。此处提供了一个示例存储库和生命周期策略以及结果的说明。

示例 A

下面显示了应用于所有规则但仅保留一个镜像并使所有其他镜像过期的策略的生命周期策略语法。

存储库内容:

  • 镜像 A,标签列表:["alpha-1"],已推送:4 天前

  • 镜像 B,标签列表:["beta-1"],已推送:3 天前

  • 镜像 C,标签列表:[],已推送:2 天前

  • 镜像 D,标签列表:["alpha-2"],已推送:1 天前

{ "rules": [ { "rulePriority": 1, "description": "Rule 1", "selection": { "tagStatus": "any", "countType": "imageCountMoreThan", "countNumber": 1 }, "action": { "type": "expire" } } ] }

此生命周期策略的逻辑是:

  • 规则 1 标识所有镜像。它可以看到镜像 A、B、C 和 D。它应该使最新镜像之外的所有其他镜像过期。它将镜像 A、B 和 C 标记为过期。

  • 结果:镜像 A、B 和 C 已过期。

示例 B

以下示例说明了将所有规则类型组合在一个策略中的生命周期策略。

存储库内容:

  • 镜像 A,标签列表:["alpha-1", "beta-1"],已推送:4 天前

  • 图片 B,标签列表:[],已推送:3 天前

  • 镜像 C,标签列表:["alpha-2"],已推送:2 天前

  • 镜像 D,标签列表:["git hash"],已推送:1 天前

  • 镜像 E,标签列表:[],已推送:1 天前

{ "rules": [ { "rulePriority": 1, "description": "Rule 1", "selection": { "tagStatus": "tagged", "tagPrefixList": ["alpha"], "countType": "imageCountMoreThan", "countNumber": 1 }, "action": { "type": "expire" } }, { "rulePriority": 2, "description": "Rule 2", "selection": { "tagStatus": "untagged", "countType": "sinceImagePushed", "countUnit": "days", "countNumber": 1 }, "action": { "type": "expire" } }, { "rulePriority": 3, "description": "Rule 3", "selection": { "tagStatus": "any", "countType": "imageCountMoreThan", "countNumber": 1 }, "action": { "type": "expire" } } ] }

此生命周期策略的逻辑是:

  • 规则 1 标识标记为 alpha 的镜像。它识别镜像 A 和 C。它应该保留最新镜像并将其余镜像标记为过期。它将镜像 A 标记为过期。

  • 规则 2 标识未标记的镜像。它可以识别镜像 B 和 E。它应该将所有超过一天的镜像标记为过期。它将镜像 B 标记为过期。

  • 规则 3 标识所有镜像。它识别镜像 A、B、C、D 和 E。它应该保留最新镜像并将其余镜像标记为过期。但是,它无法标记镜像 A、B、C 或 E,因为它们由优先级更高的规则识别。它将镜像 D 标记为过期。

  • 结果:镜像 A、B 和 D 已过期。