在资产绑定中使用DockerImageAsset映像

kmynzznz  于 2023-03-17  发布在  Docker
关注(0)|答案(2)|浏览(129)

我想在存储库中的本地文件经过AWS CDK的自定义Docker映像处理后上传到s3。我不想公开Docker映像(这不是一个很大的限制)。此外,我不想为每个s3部署构建映像
因为我不想为每个bucket部署构建docker映像,所以我创建了一个DockerImageAsset,并尝试给予映像uri作为BucketDeployment的bundle属性。

const image = new DockerImageAsset(this, "cv-builder-image", {
      directory: join(__dirname, "../"),
    });

    new BucketDeployment(this, "bucket-deployment", {
      destinationBucket: bucket,
      sources: [
        Source.asset(join(__dirname, "../"), {
          bundling: {
            image: DockerImage.fromRegistry(image.imageUri),
            command: [
              "bash",
              "-c",
              'echo "heloo" >> /asset-input/cv.html && cp /asset-input/cv.html /asset-output/cv.html',
            ],
          },
        }),
      ],
    });

DockerImageAsset部署正常,但在BucketDeployment部署期间抛出此问题

docker: invalid reference format: repository name must be lowercase

我可以看到映像正在部署到AWS。
任何帮助我都感激不尽。祝你一天愉快

oxiaedzo

oxiaedzo1#

据我所知--简单地说--您有一个Docker映像,用于启动一个实用工具容器,该容器只接收一个文件并输出一个工件(另一个文件)。
然后,您希望使用BucketDeployment构造将工件上载到S3。
这是一个常见的问题,当处理编译应用程序,如Java到.jar工件或前端应用程序(React,Angular )到静态输出(HTML,CSS,JS)文件。
我过去处理这个问题的方法是:将工件生成拆分为管道中的一个单独步骤,然后触发“cdkdeploy”作为后续步骤。
你会有更少的头痛和你控制过程的所有部分,包括访问低级别的Docker命令,如docker build ...docker run ...,并在效果上,利用本地层缓存在最好的可能的方式。如果你依靠CDK为您做捆绑-有一点魔术背后的场景并不总是显而易见的。我不是说这是不可能的,只是更多的“工作”。

mccptt67

mccptt672#

这可以在不使用DockerImageAsset的情况下完成。在这种情况下,Dockerfile存储在../src/app1中。

new BucketDeployment(this, "DeployApp1", {
  sources: [Source.asset('.', { // the '.' doesn't matter here
    bundling: {
      image: DockerImage.fromBuild(join(__dirname, '../src/app1')),
    }
  })],
  destinationBucket: s3App1,
  distribution,
  distributionPaths: ["/app1/*"]
});

以下是示例Docker图像

FROM node:lts

WORKDIR /app
COPY "." "."
RUN npm install
RUN npx ng build --configuration production --output-path /asset-stage

# This has to be executed after the container is running
# See: https://github.com/aws/aws-cdk/issues/11914
CMD ["cp", "-r", "/asset-stage/.", "/asset-output/"]

相关问题