

Este é o Guia do desenvolvedor do AWS CDK v2. O CDK v1 antigo entrou em manutenção em 1º de junho de 2022 e encerrou o suporte em 1º de junho de 2023.

As traduções são geradas por tradução automática. Em caso de conflito entre o conteúdo da tradução e da versão original em inglês, a versão em inglês prevalecerá.

# Criação e implantação de ativos de imagem de contêiner em aplicações do CDK
<a name="build-containers"></a>

Quando você cria ativos de imagem de contêiner com o kit de desenvolvimento em nuvem da AWS (CDK da AWS), o Docker é utilizado por padrão para realizar essas ações. Se você desejar usar uma ferramenta diferente de gerenciamento de contêineres, poderá substituir o Docker por meio da variável de ambiente `CDK_DOCKER`.

## Exemplo: criação e publicação de um ativo de imagem de contêiner com o AWS CDK
<a name="build-containers-intro-example"></a>

Veja a seguir um exemplo simples de uma aplicação do AWS CDK que cria e publica um ativo de contêiner no Amazon Elastic Container Registry (Amazon ECR) usando o Docker por padrão:

 **Estrutura do projeto**   

```
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
```

 **Código da aplicação**   
Em `lib/docker/app/index.js`:  

```
console.log("Hello from inside the container!");
```

 **Pilha do 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,
    });
  }
}
```

 **Aplicação do 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');
```

Quando executamos `cdk deploy`, a interface de linha de comandos (CLI) do kit de desenvolvimento em nuvem da AWS (CDK da AWS) faz o seguinte:

1.  **Cria a imagem do Docker**: executa `docker build` localmente com base no `Dockerfile` no diretório especificado (`lib/docker`).

1.  **Marca a imagem**: executa `docker tag` para marcar a imagem criada com um hash exclusivo, com base no conteúdo da imagem.

1.  **Publica no Amazon ECR**: executa `docker push` para publicar a imagem do contêiner em um repositório do Amazon ECR. O repositório já deve existir. Ele é criado durante o processo de bootstrapping padrão.

1.  **Exibe o URI da imagem**: depois de uma implantação com êxito, o URI do Amazon ECR da imagem do contêiner publicada é exibido em seu prompt de comando. Esse é o URI da nossa imagem do Docker no Amazon ECR.

## Como substituir o Docker por outra ferramenta de gerenciamento de contêineres
<a name="build-container-replace"></a>

Use a variável de ambiente `CDK_DOCKER` para especificar o caminho para o binário da sua ferramenta de gerenciamento de contêineres substituta. Veja a seguir um exemplo de substituição do Docker pelo 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
```

Não há suporte para aliases ou vinculação. Para substituir o Docker, é necessário usar a variável de ambiente `CDK_DOCKER`.

## Mecanismos de substituição direta do Docker com suporte
<a name="build-container-supported"></a>

 Há suporte para o Finch, embora alguns recursos do Docker possam estar indisponíveis ou funcionar de forma diferente à medida que a ferramenta evolui. Para obter mais informações sobre o Finch, consulte [Pronto para decolar: anúncio do Finch 1.0 GA\$1](https://aws.amazon.com/blogs/opensource/ready-for-flight-announcing-finch-1-0-ga/) no *blog AWS Open Source*.

Outras ferramentas de gerenciamento de contêineres podem funcionar. O CDK não verifica qual substituto do Docker você está usando para determinar se há suporte. Se a ferramenta tiver comandos equivalentes do Docker e se comportar de forma semelhante, deverá funcionar.