aph*_*log 11 amazon-web-services amazon-ecs docker docker-registry
因此,我是ecs / ecr的新手,但似乎我必须在存储库名称后命名(带有标签)图像,以便将该图像推送到存储库。
所以我的问题是:是否打算让用户(我)仅将单个映像和该映像的任何关联版本推送到ecr中的单个存储库,从而在我需要推送完全不同的映像时创建另一个存储库?
基本上,一个用于nginx的仓库,一个用于postgressql的仓库,等等。
在我们的例子中,我们希望为所有服务建立一个存储库,否则我们将不得不为每一项服务创建和维护 ECR 基础设施。
\n我们所做的基本上是为所有服务(在本例中为 Cloudformation)创建一个共享存储库:
\nAWSTemplateFormatVersion: "2010-09-09"\n\nParameters:\n registryName:\n Type: String\n Default: services\n\nResources:\n ecr:\n Type: AWS::ECR::Repository\n Properties:\n RepositoryName: !Ref registryName\n ImageTagMutability: MUTABLE\n\nRun Code Online (Sandbox Code Playgroud)\n\xe2\x80\xa6 然后在构建服务时,我们将使用SERVICENAME_VERSION作为实际图像/版本的约定:
#!/bin/bash\n\nset -e\n\nexport AWS_ACCOUNT="123456789000"\nexport AWS_DEFAULT_REGION="eu-central-1"\nexport SERVICE_NAME="demo-service"\nexport SERVICE_VERSION="${SERVICE_VERSION:-latest}"\nexport IMAGE_NAME="$AWS_ACCOUNT.dkr.ecr.$AWS_DEFAULT_REGION.amazonaws.com/services:${SERVICE_NAME}_${SERVICE_VERSION}"\n\naws ecr get-login-password | docker login --username AWS --password-stdin "$AWS_ACCOUNT.dkr.ecr.$AWS_DEFAULT_REGION.amazonaws.com"\ndocker build -t $IMAGE_NAME .\ndocker push $IMAGE_NAME\n\nRun Code Online (Sandbox Code Playgroud)\n(虽然很简单,但是有效。)
\n更新:
\n在实际示例中,当您想要将映像拉取到位于 VPC 中的 ECS 集群中时,您需要在 ECR 上设置 VPC 终端节点。Cloudformation 代码如下所示:
\n privateLinkEcrApi:\n Type: AWS::EC2::VPCEndpoint\n Properties:\n ServiceName: !Sub "com.amazonaws.${AWS::Region}.ecr.api"\n PrivateDnsEnabled: true\n VpcId: !ImportValue vpc\n SecurityGroupIds:\n - !ImportValue albSecurityGroup\n SubnetIds:\n - !ImportValue publicSubnetA\n - !ImportValue publicSubnetB\n VpcEndpointType: Interface\n\n privateLinkEcrDkr:\n Type: AWS::EC2::VPCEndpoint\n Properties:\n ServiceName: !Sub "com.amazonaws.${AWS::Region}.ecr.dkr"\n PrivateDnsEnabled: true\n VpcId: !ImportValue vpc\n SecurityGroupIds:\n - !ImportValue albSecurityGroup\n SubnetIds:\n - !ImportValue publicSubnetA\n - !ImportValue publicSubnetB\n VpcEndpointType: Interface\n\n privateLinkEcrLogs:\n Type: AWS::EC2::VPCEndpoint\n Properties:\n ServiceName: !Sub "com.amazonaws.${AWS::Region}.logs"\n PrivateDnsEnabled: true\n VpcId: !ImportValue vpc\n SecurityGroupIds:\n - !ImportValue albSecurityGroup\n SubnetIds:\n - !ImportValue publicSubnetA\n - !ImportValue publicSubnetB\n VpcEndpointType: Interface\n\n privateLinkEcrS3:\n Type: AWS::EC2::VPCEndpoint\n Properties:\n ServiceName: !Sub "com.amazonaws.${AWS::Region}.s3"\n VpcId: !ImportValue vpc\n SecurityGroupIds:\n - !ImportValue albSecurityGroup\n SubnetIds:\n - !ImportValue publicSubnetA\n - !ImportValue publicSubnetB\n VpcEndpointType: Interface\n\n privateLinkEcrS3Gw:\n Type: AWS::EC2::VPCEndpoint\n Properties:\n ServiceName: !Sub "com.amazonaws.${AWS::Region}.s3"\n VpcId: !ImportValue vpc\n RouteTableIds:\n - !ImportValue publicRouteTable\n - !ImportValue privateRouteTableA\n - !ImportValue privateRouteTableB\n VpcEndpointType: Gateway\nRun Code Online (Sandbox Code Playgroud)\n(注意:您必须调整此代码,因为实际的 VPC、子网等是在不同的模板中设置的,并且实际配置很大程度上取决于您自己的环境。但这应该会让您走上正轨。)
\n是。而且,可能没有。
您将图像推送到ECR。如何配置映像取决于您。理想情况下,您将拥有一个单一责任的形象,但这是您的决定。
如果有多个图像,则推入多个ECR。如果您只有一张图像可以做很多事情,那么您就可以摆脱一个ECR。
您还可以通过创造性地使用标签将多个图像推送到同一ECR(例如,使用您自己的命名约定在标签中使用“图像名称或风味”)。
例如 your-repo:1.1, your-repo:1.2
如果您推送的映像与 ECR 存储库中存在的映像相同,则旧映像将替换为您正在推送的新映像。
例如具有持久卷的数据库映像。因此,如果数据库容器死亡,则不会影响您的数据。
| 归档时间: |
|
| 查看次数: |
2775 次 |
| 最近记录: |