

Questa è la AWS CDK v2 Developer Guide. Il vecchio CDK v1 è entrato in manutenzione il 1° giugno 2022 e ha terminato il supporto il 1° giugno 2023.

Le traduzioni sono generate tramite traduzione automatica. In caso di conflitto tra il contenuto di una traduzione e la versione originale in Inglese, quest'ultima prevarrà.

# Crea e distribuisci risorse di immagini dei container nelle app CDK
<a name="build-containers"></a>

Quando crei risorse di immagini dei container con il AWS Cloud Development Kit (AWS CDK), Docker viene utilizzato di default per eseguire queste azioni. Se desideri utilizzare uno strumento di gestione dei container diverso, puoi sostituire Docker tramite la variabile di ambiente. `CDK_DOCKER`

## Esempio: crea e pubblica una risorsa di immagine del contenitore con CDK AWS
<a name="build-containers-intro-example"></a>

Di seguito è riportato un semplice esempio di app AWS CDK che crea e pubblica una risorsa contenitore su Amazon Elastic Container Registry (Amazon ECR) utilizzando Docker per impostazione predefinita:

 **Struttura del progetto**   

```
my-cdk-app/
├── lib/
│   ├── my-stack.ts
│   └── docker/
│       ├── Dockerfile
│       └── app/
│           └── index.js
├── bin/
│   └── my-cdk-app.ts
├── package.json
├── tsconfig.json
└── cdk.json
```

 **File Docker**   

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

 **Codice dell'applicazione**   
In `lib/docker/app/index.js`:  

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

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

 **App 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 eseguiamo`cdk deploy`, l'interfaccia a riga di comando (CLI) del AWS Cloud Development Kit (AWS CDK) esegue le seguenti operazioni:

1.  **Crea l'immagine Docker**: esegui `docker build` localmente `Dockerfile` in base alla directory specificata (). `lib/docker`

1.  **Etichetta l'immagine**: esegui `docker tag` per etichettare l'immagine creata con un hash univoco, in base al contenuto dell'immagine.

1.  **Pubblica su Amazon ECR**: esegui `docker push` per pubblicare l'immagine del contenitore in un repository Amazon ECR. Questo repository deve già esistere. Viene creato durante il processo di bootstrap predefinito.

1.  **Esporta l'URI dell'immagine**: dopo una distribuzione corretta, l'URI Amazon ECR dell'immagine del contenitore pubblicata viene emesso nel prompt dei comandi. Questo è l'URI della nostra immagine Docker in Amazon ECR.

## Come sostituire Docker con un altro strumento di gestione dei container
<a name="build-container-replace"></a>

Utilizza la variabile di `CDK_DOCKER` ambiente per specificare il percorso del file binario dello strumento di gestione dei container sostitutivo. Di seguito è riportato un esempio di sostituzione di Docker con 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
```

L'aliasing o il collegamento non sono supportati. Per sostituire Docker, è necessario utilizzare la `CDK_DOCKER` variabile di ambiente.

## Motori sostitutivi Docker drop-in supportati
<a name="build-container-supported"></a>

 Finch è supportato, anche se alcune funzionalità di Docker potrebbero non essere disponibili o funzionare in modo diverso man mano che lo strumento si evolve. Per ulteriori informazioni su Finch, vedi [Ready for Flight: Announcing Finch 1.0](https://aws.amazon.com/blogs/opensource/ready-for-flight-announcing-finch-1-0-ga/) GA\$1 nel blog * AWS Open Source*.

Altri strumenti di gestione dei container potrebbero funzionare. Il CDK non verifica quale sostituto di Docker stai utilizzando per determinare se è supportato. Se lo strumento ha comandi Docker equivalenti e si comporta in modo simile, dovrebbe funzionare.