这是 AWS CDK v2 开发者指南。旧版 CDK v1 于 2022 年 6 月 1 日进入维护阶段,并于 2023 年 6 月 1 日终止支持。
本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。
在 CDK 应用程序中构建和部署容器镜像资产
使用 C AWS loud Development Kit (AWS CDK) 构建容器镜像资源时,默认使用 Docker 来执行这些操作。如果要使用其他容器管理工具,则可以通过CDK_DOCKER
环境变量替换 Docker。
示例:使用 AWS CDK 构建和发布容器镜像资产
以下是 AWS CDK 应用程序的简单示例,该应用程序默认使用 Docker 构建容器资产并将其发布到亚马逊 Elastic Container Registry (Amazon ECR):
- 项目结构
-
my-cdk-app/ ├── lib/ │ ├── my-stack.ts │ └── docker/ │ ├── Dockerfile │ └── app/ │ └── index.js ├── bin/ │ └── my-cdk-app.ts ├── package.json ├── tsconfig.json └── cdk.json
- Dockerfile
-
FROM public.ecr.aws/lambda/nodejs:16 # Copy application code COPY app/ /var/task/ # (Optional) Install dependencies # RUN npm install # The Lambda Node.js base image looks for index.handler by default
- 应用程序代码
-
In
lib/docker/app/index.js
:console.log("Hello from inside the container!");
- CDK 堆栈
-
import * as cdk from 'aws-cdk-lib'; import { Construct } from 'constructs'; import * as ecr_assets from 'aws-cdk-lib/aws-ecr-assets'; export class MyStack extends cdk.Stack { constructor(scope: Construct, id: string) { super(scope, id); // Define a Docker image asset const dockerImageAsset = new ecr_assets.DockerImageAsset(this, 'MyDockerImage', { directory: 'lib/docker', // Path to the directory containing the Dockerfile }); // Output the ECR URI new cdk.CfnOutput(this, 'ECRImageUri', { value: dockerImageAsset.imageUri, }); } }
- CDK 应用程序
-
#!/usr/bin/env node import * as cdk from 'aws-cdk-lib'; import { MyStack } from '../lib/my-stack'; const app = new cdk.App(); new MyStack(app, 'MyStack');
当我们运行时cdk deploy
,C AWS loud Development Kit (AWS CDK) 命令行界面 (CLI) 会执行以下操作:
-
构建 Docker 镜像 — 根据指定目录
Dockerfile
中的在docker build
本地运行 (lib/docker
)。 -
标记图像-运行
docker tag
以根据图像内容使用唯一的哈希值标记构建的映像。 -
发布到 Amazon ECR — 运行
docker push
将容器映像发布到 Amazon ECR 存储库。此存储库必须已经存在。它是在默认的引导过程中创建的。 -
输出映像 URI-成功部署后,将在命令提示符中输出已发布容器映像的 Amazon ECR URI。这是我们在亚马逊 ECR 中 Docker 镜像的 URI。
如何用其他容器管理工具替换 Docker
使用CDK_DOCKER
环境变量指定替换容器管理工具的二进制文件路径。以下是将 Docker 替换为的示例 Finch:
$ which finch /usr/local/bin/finch # Locate the path to the binary $ export CDK_DOCKER='/usr/local/bin/finch' # Set the environment variable $ cdk deploy # Deploy using the replacement
不支持别名或链接。要替换 Docker,必须使用CDK_DOCKER
环境变量。
支持的 Docker 嵌入式替换引擎
Finch 支持,但可能有些 Docker 功能不可用,或者随着工具的发展,工作方式可能会有所不同。有关 Finch 的更多信息,请参阅 Ready for Flight:宣布 Finch 1.0 GA!
其他容器管理工具可能会起作用。CDK 不会检查你使用的是哪个 Docker 替代品来确定它是否受支持。如果该工具具有等效的 Docker 命令并且行为类似,则它应该可以正常工作。