

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.

# Optimisation des performances pour Amazon ECR
<a name="performance"></a>

Vous pouvez utiliser les recommandations suivantes concernant les paramètres et les stratégies pour optimiser les performances lorsque vous utilisez Amazon ECR.

Utiliser Docker 1.10 et des versions ultérieures afin de bénéficier des chargements de couches simultanés  
Les images Docker sont composées de couches qui constituent des étapes de création intermédiaires de l'image. Chaque ligne d'un fichier Docker crée un nouvelle couche. Lorsque vous utilisez Docker 1.10 et les versions ultérieures, Docker transmet par défaut autant de couches qu'il y a eu de chargements dans Amazon ECR, ce qui permet d'accélérer les temps de chargement. 

Utiliser une image de base plus petite   
Les images par défaut disponibles via Docker Hub peuvent contenir de nombreuses dépendances dont votre application n'a pas besoin. Nous vous conseillons d'utiliser une image plus petite créée et gérée par d'autres personnes de la communauté Docker, ou de créer votre propre image de base à l'aide d'une image de Docker réduite au minimum. Pour en savoir plus, consultez [Créer une image de base](https://docs.docker.com/engine/userguide/eng-image/baseimages/) dans la documentation Docker.

Placement des dépendances qui changent le moins plus tôt dans votre fichier Docker   
Docker met en cache des couches, ce qui accélère les temps de création. S'il n'y a eu aucun changement sur une couche depuis la dernière création, Docker utilisera la version mise en cache au lieu de récréer la couche. Toutefois, chaque couche est dépendante des couches précédentes. Si une couche change, Docker recompilera non seulement cette couche, mais également toutes les couches ultérieures.   
Afin de réduire le temps nécessaire à la recréation d'un fichier Docker et au rechargement des couches, pensez à placer les dépendances qui changent le moins souvent plus tôt dans votre fichier Docker. Placez les dépendances qui changent rapidement (par exemple, le code source de votre application) plus tard dans la pile. 

Chaîner des commandes pour éviter le stockage de fichier inutile   
Les fichiers intermédiaires créés sur une couche continuent à faire partie de cette couche, même s'ils sont supprimés dans une couche ultérieure. Prenez l’exemple suivant :  

```
WORKDIR /tmp
RUN wget http://example.com/software.tar.gz 
RUN wget tar -xvf software.tar.gz 
RUN mv software/binary /opt/bin/myapp
RUN rm software.tar.gz
```
Dans cet exemple, les couches créées par la première et la deuxième commande RUN contiennent le fichier .tar.gz d'origine et l'ensemble de son contenu non compressé. Et ce, même si le fichier .tar.gz est supprimé par la quatrième commande RUN. Ces commandes peuvent être regroupées dans une seule instruction RUN afin d'éviter que ces fichiers inutiles fassent partie de l'image Docker finale :  

```
WORKDIR /tmp
RUN wget http://example.com/software.tar.gz &&\
    wget tar -xvf software.tar.gz &&\
    mv software/binary /opt/bin/myapp &&\
    rm software.tar.gz
```

Utiliser le point de terminaison régional le plus proche  
Vous pouvez réduire la latence d'extraction des images d'Amazon ECR en veillant à utiliser le point de terminaison régional le plus proche de l'emplacement d'exécution de votre application. Si votre application s'exécute sur une EC2 instance Amazon, vous pouvez utiliser le code shell suivant pour obtenir la région à partir de la zone de disponibilité de l'instance :  

```
REGION=$(curl -s http://169.254.169.254/latest/meta-data/placement/availability-zone |\
     sed -n 's/\(\d*\)[a-zA-Z]*$/\1/p')
```
La région peut être transmise aux AWS CLI commandes à l'aide du **--region** paramètre ou définie comme région par défaut pour un profil à l'aide de la **aws configure** commande. Vous pouvez également définir la région lorsque vous passez des appels à l'aide du AWS SDK. Pour en savoir plus , consultez la documentation du kit SDK correspondant au langage de programmation utilisé.