

Les traductions sont fournies par des outils de traduction automatique. En cas de conflit entre le contenu d'une traduction et celui de la version originale en anglais, la version anglaise prévaudra.

# Préparation de votre image Docker pour le déploiement sur Elastic Beanstalk
<a name="single-container-docker-configuration"></a>

Cette section explique comment préparer votre image Docker pour le déploiement sur Elastic Beanstalk avec Docker en cours d'exécution ou une branche *de* plateforme. AL2 AL2023 Les fichiers de configuration dont vous aurez besoin varient selon que vos images sont locales, distantes et si vous utilisez Docker Compose.

**Note**  
 Pour un exemple de procédure qui lance un environnement Docker, consultez la [QuickStart pour Docker](docker-quickstart.md) rubrique.

**Topics**
+ [Gérer vos images avec Docker Compose dans Elastic Beanstalk](#single-container-docker-configuration-dc)
+ [Gérer des images sans Docker Compose dans Elastic Beanstalk](#single-container-docker-configuration.no-compose)
+ [Création d'images personnalisées avec un Dockerfile](#single-container-docker-configuration.dockerfile)

## Gérer vos images avec Docker Compose dans Elastic Beanstalk
<a name="single-container-docker-configuration-dc"></a>

Vous pouvez choisir d'utiliser Docker Compose pour gérer différents services dans un seul fichier YAML. Pour en savoir plus sur Docker Compose, voir [Pourquoi utiliser Compose](https://docs.docker.com/compose/intro/features-uses/) ? sur le site Web de Docker.
+ Créez un `docker-compose.yml`. Ce fichier est obligatoire si vous utilisez Docker Compose pour gérer votre application avec Elastic Beanstalk. Si tous vos déploiements proviennent d'images stockées dans des référentiels publics, aucun autre fichier de configuration n'est requis. Si les images source de votre déploiement se trouvent dans un référentiel privé, vous devrez effectuer une configuration supplémentaire. Pour plus d'informations, consultez la section [Utilisation d'images provenant d'un dépôt privé](docker-configuration.remote-repo.md). Pour de plus amples informations sur le fichier `docker-compose.yml`, veuillez consulter [Compose file reference](https://docs.docker.com/compose/compose-file/) sur le site web Docker.
+  L’option `Dockerfile` est facultative. Créez-en une si vous avez besoin d'Elastic Beanstalk pour créer et exécuter une image personnalisée locale. Pour de plus amples informations sur le fichier `Dockerfile`, veuillez consulter [Dockerfile reference](https://docs.docker.com/engine/reference/builder/) sur le site web Docker.
+  Il se peut que vous deviez créer un `.zip` fichier. Si vous utilisez uniquement un `Dockerfile` fichier pour déployer votre application, il n'est pas nécessaire d'en créer un. Si vous utilisez des fichiers de configuration supplémentaires, le fichier .zip doit inclure le `docker-compose.yml` fichier`Dockerfile`, vos fichiers d'application et toutes les dépendances des fichiers d'application. Les `Dockerfile` et `docker-compose.yml` doivent se trouver à la racine, ou au niveau supérieur, de l'archive .zip. Si vous utilisez la CLI EB pour déployer votre application, elle crée un fichier .zip pour vous.

Pour en savoir plus sur Docker Compose et savoir comment l'installer, veuillez consulter les sites Docker [Overview of Docker Compose](https://docs.docker.com/compose/) et [Install Docker Compose](https://docs.docker.com/compose/install/).

## Gérer des images sans Docker Compose dans Elastic Beanstalk
<a name="single-container-docker-configuration.no-compose"></a>

Si vous n'utilisez pas Docker Compose pour gérer vos images Docker, vous devez configurer un `Dockerrun.aws.json` fichier`Dockerfile`, ou les deux.
+ Créez une `Dockerfile` pour qu'Elastic Beanstalk crée et exécute une image personnalisée localement.
+ Créez un fichier `Dockerrun.aws.json v1` afin de déployer une image Docker à partir d'un référentiel hébergé dans Elastic Beanstalk.
+ Il se peut que vous deviez créer un `.zip` fichier. Si vous *n'utilisez que l'un* des deux fichiers, le `Dockerfile` ou le`Dockerrun.aws.json`, vous n'avez pas besoin de créer un fichier .zip. Si vous utilisez les deux fichiers, vous avez besoin d'un fichier .zip. Le fichier .zip doit inclure à la fois le `Dockerfile` et le`Dockerrun.aws.json`, ainsi que le fichier contenant vos fichiers d'application, ainsi que toutes les dépendances des fichiers d'application. Si vous utilisez l'interface de ligne de commande (CLI) EB pour déployer votre application, elle crée un fichier `.zip` automatiquement.

### `Dockerrun.aws.json`fichier de configuration v1
<a name="single-container-docker-configuration.dockerrun"></a>

Un fichier `Dockerrun.aws.json` décrit comment déployer une image Docker distante en tant qu'application Elastic Beanstalk. Ce fichier JSON est spécifique à Elastic Beanstalk. Si votre application s'exécute sur une image qui est disponible dans un référentiel hébergé, vous pouvez spécifier l'image dans un fichier `Dockerrun.aws.json v1` et omettre le `Dockerfile`.

**Versions `Dockerrun.aws.json`**  
 Le paramètre `AWSEBDockerrunVersion` indique la version du fichier `Dockerrun.aws.json`.  
Le Docker AL2 et AL2023 les plateformes utilisent les versions suivantes du fichier.  
`Dockerrun.aws.json v3`— environnements utilisant Docker Compose.
`Dockerrun.aws.json v1`— environnements qui n'utilisent pas Docker Compose.
Le `Dockerrun.aws.json v2` fichier est AL2023 utilisé par *ECS exécuté sur Amazon Linux 2* et *ECS exécuté sur* Amazon Linux 2. La plate-forme retirée *ECS, l'AMI Multicontainer Docker Amazon Linux (AL1), utilisait également cette* même version.



#### Dockerrun.aws.json v1
<a name="single-container-docker-configuration.dockerrun.awsjson"></a>

Les clés et valeurs valides pour le fichier `Dockerrun.aws.json v1` incluent les opérations suivantes.

**AWSEBDockerrunVersion**  
(Obligatoire) Spécifiez le numéro de version `1` si vous n'utilisez pas Docker Compose pour gérer votre image.

**Authentification**  
(Obligatoire uniquement pour les référentiels privés) Indique l'objet Amazon S3 qui stocke le fichier `.dockercfg`.  
Voir [Authentification avec des référentiels d'imagesEn utilisant AWS Secrets Manager](docker-configuration.remote-repo.md#docker-configuration.remote-repo.dockerrun-aws) la section *Utilisation d'images provenant d'un dépôt privé* plus loin dans ce chapitre.

**Image**  
Spécifie l'image de base Docker sur un référentiel Docker existant, à partir de laquelle vous créez un conteneur Docker. Spécifiez la valeur de la clé **Name** au format *<organization>/<image name>* pour les images sur Docker Hub ou *<site>/<organization name>/<image name>* pour d'autres sites.   
Lorsque vous spécifiez une image dans le fichier `Dockerrun.aws.json`, chaque instance de votre environnement Elastic Beanstalk exécute `docker pull` pour exécuter l'image. Vous pouvez également inclure la clé **Update**. La valeur par défaut est `true` et demande à Elastic Beanstalk de vérifier le référentiel, d'extraire les mises à jour de l'image et de remplacer toutes les images mises en cache.  
Lorsque vous utilisez un fichier `Dockerfile`, ne spécifiez pas la clé **Image** dans le fichier `Dockerrun.aws.json`. Elastic Beanstalk crée et utilise toujours l'image décrite dans le fichier `Dockerfile`, lorsqu'il existe.

**Ports**  
(Obligatoire si vous spécifiez la clé **Image**) Répertorie les ports à exposer sur le conteneur Docker. Elastic Beanstalk **ContainerPort**utilise cette valeur pour connecter le conteneur Docker au proxy inverse exécuté sur l'hôte.  
Vous pouvez spécifier plusieurs ports de conteneur, mais Elastic Beanstalk utilise uniquement le premier port. Il utilise ce port pour connecter votre conteneur au proxy inverse de l'hôte et acheminer les demandes depuis le réseau Internet public. Si vous utilisez un`Dockerfile`, la première **ContainerPort**valeur doit correspondre à la première entrée `Dockerfile` de la liste **EXPOSE**.   
Vous pouvez éventuellement spécifier une liste de ports dans **HostPort**. **HostPort**les entrées spécifient les ports hôtes auxquels **ContainerPort**les valeurs sont mappées. Si vous ne spécifiez aucune **HostPort**valeur, la valeur par défaut est la même **ContainerPort**.   

```
{
  "Image": {
    "Name": "image-name"
  },
  "Ports": [
    {
      "ContainerPort": 8080,
      "HostPort": 8000
    }
  ]
}
```

****Volumes****  
Mappez les volumes d'une instance EC2 à votre conteneur Docker. Spécifiez un ou plusieurs groupes de volumes à mapper.  

```
{
  "Volumes": [
    {
      "HostDirectory": "/path/inside/host",
      "ContainerDirectory": "/path/inside/container"
    }
  ]
...
```

****Journalisation****  
Spécifiez le répertoire du conteneur dans lequel votre application écrit les journaux. Elastic Beanstalk télécharge tous les journaux de ce répertoire sur Amazon S3 lorsque vous demandez des journaux de processus ou de groupe. Si vous effectuez une rotation des journaux dans un dossier nommé `rotated` au sein de ce répertoire, vous pouvez également configurer Elastic Beanstalk afin de charger les journaux concernés dans Amazon S3 pour un stockage permanent. Pour plus d'informations, consultez [Affichage des journaux des instances Amazon EC2 dans votre environnement Elastic Beanstalk](using-features.logging.md).

**Commande**  
Spécifiez une commande à exécuter dans le conteneur. Si vous spécifiez un **point d'entrée**, la valeur **Command (Commande)** est ajoutée comme argument dans **Entrypoint (Point d'entrée)**. Pour plus d'informations, consultez[CMD](https://docs.docker.com/engine/reference/run/#cmd-default-command-or-options) dans la documentation Docker.

**Entrypoint**  
Spécifiez une commande par défaut à exécuter lorsque le conteneur démarre. Pour plus d'informations, consultez [ENTRYPOINT](https://docs.docker.com/engine/reference/run/#cmd-default-command-or-options) dans la documentation Docker.

L'extrait suivant est un exemple illustrant la syntaxe du fichier `Dockerrun.aws.json` pour un conteneur unique.

```
{
  "AWSEBDockerrunVersion": "1",
  "Image": {
    "Name": "janedoe/image",
    "Update": "true"
  },
  "Ports": [
    {
      "ContainerPort": "1234"
    }
  ],
  "Volumes": [
    {
      "HostDirectory": "/var/app/mydb",
      "ContainerDirectory": "/etc/mysql"
    }
  ],
  "Logging": "/var/log/nginx",
  "Entrypoint": "/app/bin/myapp",
  "Command": "--argument"
}>
```

Vous pouvez fournir à Elastic Beanstalk le fichier `Dockerrun.aws.json` uniquement, ou une archive `.zip` contenant les fichiers `Dockerrun.aws.json` et `Dockerfile`. Si vous fournissez les deux fichiers, le `Dockerfile` décrit l'image Docker et le fichier `Dockerrun.aws.json` fournit des informations supplémentaires pour le déploiement, comme indiqué ultérieurement dans cette section.

**Note**  
Les deux fichiers doivent être à la racine, ou au niveau supérieur, de l'archive `.zip`. Ne créez pas l'archive à partir d'un répertoire contenant les fichiers. Au lieu de cela, parcourez ce répertoire et créez l'archive dans le répertoire.  
Si vous fournissez les deux fichiers, ne spécifiez aucune image dans le fichier `Dockerrun.aws.json`. Elastic Beanstalk crée et utilise l'image décrite dans le fichier `Dockerfile` et ignore celle spécifiée dans le fichier `Dockerrun.aws.json`.

## Création d'images personnalisées avec un Dockerfile
<a name="single-container-docker-configuration.dockerfile"></a>

Vous devez créer un `Dockerfile` si vous ne disposez d'aucune image existante hébergée dans un référentiel.

L'extrait suivant représente un exemple de `Dockerfile`. Si vous suivez les instructions de la page [QuickStart pour Docker](docker-quickstart.md), vous pouvez charger ce fichier `Dockerfile` comme indiqué. Elastic Beanstalk exécute le jeu 2048 lorsque vous utilisez ce fichier `Dockerfile`.

Pour plus d'informations sur les instructions que vous pouvez inclure dans le `Dockerfile`, consultez la [référence sur Dockerfile](https://docs.docker.com/engine/reference/builder) sur le site web de Docker.

```
FROM ubuntu:12.04

RUN apt-get update
RUN apt-get install -y nginx zip curl

RUN echo "daemon off;" >> /etc/nginx/nginx.conf
RUN curl -o /usr/share/nginx/www/master.zip -L https://codeload.github.com/gabrielecirulli/2048/zip/master
RUN cd /usr/share/nginx/www/ && unzip master.zip && mv 2048-master/* . && rm -rf 2048-master master.zip

EXPOSE 80

CMD ["/usr/sbin/nginx", "-c", "/etc/nginx/nginx.conf"]
```

**Note**  
Vous pouvez exécuter des versions à plusieurs étapes à partir d'un seul Dockerfile pour produire des images de plus petite taille avec une réduction significative de la complexité. Pour plus d'informations, consultez [Utiliser des versions à plusieurs étapes](https://docs.docker.com/develop/develop-images/multistage-build/) sur le site web de la documentation Docker.