Optimisation des images Docker générées par AWS App2Container - Recommandations AWS

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 images Docker générées par AWS App2Container

Créée par Varun Sharma (AWS)

Environnement : PoC ou pilote

Technologies : Conteneurs et microservices ; Modernisation ; DevOps

Services AWS : Amazon ECS

Récapitulatif

AWS App2Container est un outil de ligne de commande qui permet de transformer des applications existantes exécutées sur site ou sur des machines virtuelles en conteneurs, sans qu'il soit nécessaire de modifier le code.

En fonction du type d'application, App2Container adopte une approche conservatrice pour identifier les dépendances. En mode processus, tous les fichiers du serveur d'applications sont inclus dans l'image du conteneur. Dans de tels cas, une image assez grande peut être générée.

Ce modèle fournit une approche pour optimiser les images de conteneur générées par App2Container. Il s'applique à toutes les applications Java découvertes par App2Container en mode processus. Le flux de travail défini dans le modèle est conçu pour être exécuté sur le serveur d'applications.

Conditions préalables et limitations

Prérequis

  • Un compte AWS actif

  • Application Java exécutée sur un serveur d'applications sur un serveur Linux

  • App2Container installé et configuré, avec toutes les conditions requises remplies, sur le serveur Linux

Architecture

Pile technologique source

  • Une application Java exécutée sur un serveur Linux

Pile technologique cible

  • Une image Docker générée par App2Container

Flux d'architecture cible

Diagram showing AWS App2Container process for containerizing Java app on Linux system.
  1. Découvrez les applications qui s'exécutent sur le serveur d'applications et analysez-les.

  2. Conteneurisez les applications.

  3. Évaluez la taille de l'image Docker. Si l'image est trop grande, passez à l'étape 4.

  4. Utilisez le script shell (joint) pour identifier les fichiers volumineux.

  5. Mettez à jour les appSpecificFiles listes appExcludedFiles et du analysis.json fichier.

Outils

Outils

  • AWS App2Container — AWS App2Container (A2C) est un outil en ligne de commande destiné à vous aider à transférer des applications exécutées dans votre centre de données sur site ou sur des machines virtuelles, afin qu'elles s'exécutent dans des conteneurs gérés par Amazon Elastic Container Service (Amazon ECS) ou Amazon Elastic Kubernetes Service (Amazon EKS).

Code

Le script optimizeImage.sh shell et un analysis.json fichier d'exemple sont joints.

Le optimizeImage.sh fichier est un script utilitaire permettant de consulter le contenu du fichier généré par App2Container. ContainerFiles.tar L'examen identifie les fichiers ou les sous-répertoires volumineux qui peuvent être exclus. Le script est un wrapper pour la commande tar suivante.

tar -Ptvf <path>|tr -s ' '|cut -d ' ' -f3,6| awk '$2 ~/<filetype>$/'| awk '$2 ~/^<toplevel>/'| cut -f1-<depth> -d'/'|awk '{ if ($1>= <size>) arr[$2]+=$1 } END { for (key in arr) { if(<verbose>) printf("%-50s\t%-50s\n", key, arr[key]) else printf("%s,\n", key) } } '|sort -k2 -nr

Dans la commande tar, le script utilise les valeurs suivantes :

path

Le chemin vers ContainerFiles.tar

filetype

Le type de fichier correspondant

toplevel

Le répertoire de premier niveau correspondant

depth

La profondeur du chemin absolu

size

La taille de chaque fichier

Le script effectue les opérations suivantes :

  1. Il permet tar -Ptvf de lister les fichiers sans les extraire.

  2. Il filtre les fichiers par type de fichier, en commençant par le répertoire de premier niveau.

  3. Sur la base de la profondeur, il génère le chemin absolu sous forme d'indice.

  4. Sur la base de l'index et des magasins, il fournit la taille totale du sous-répertoire.

  5. Elle affiche la taille du sous-répertoire.

Vous pouvez également remplacer les valeurs manuellement dans la commande tar.

Épopées

TâcheDescriptionCompétences requises
Découvrez les applications Java locales.

Pour découvrir toutes les applications exécutées sur le serveur d'applications, exécutez la commande suivante.

sudo app2container inventory 
AWS DevOps
Analysez les applications découvertes.

Pour analyser chaque application à l'aide de application-id ce qui a été obtenu lors de la phase d'inventaire, exécutez la commande suivante.

sudo app2container analyze --application-id <java-app-id>
AWS DevOps
Conteneurisez les applications analysées.

Pour conteneuriser une application, exécutez la commande suivante.

sudo app2container containerize --application-id <application-id>

La commande génère l'image Docker ainsi qu'un bundle tar dans l'emplacement de l'espace de travail.

Si l'image Docker est trop grande, passez à l'étape suivante.

AWS DevOps
TâcheDescriptionCompétences requises
Identifiez la taille du fichier tar des artefacts.

Identifiez le ContainerFiles.tar fichier dans {workspace}/{java-app-id}/Artifacts lequel se workspace trouve l'espace de travail App2Container et l'ID java-app-id de l'application. 

./optimizeImage.sh -p /{workspace}/{java-app-id}/Artifacts/ContainerFiles.tar -d 0 -t / -v

Il s'agit de la taille totale du fichier tar après optimisation.

AWS DevOps
Répertoriez les sous-répertoires situés sous le répertoire/ainsi que leurs tailles.

Pour identifier les tailles des principaux sous-répertoires du répertoire de / premier niveau, exécutez la commande suivante.

./optimizeImage.sh -p /{workspace}/{java-app-id}/Artifacts/ContainerFiles.tar -d 1 -t / -s 1000000 -v /var                         554144711 /usr 2097300819 /tmp 18579660 /root 43645397 /opt 222320534 /home 65212518 /etc 11357677                                    
AWS DevOps
Identifiez les sous-répertoires volumineux sous le répertoire /.

Pour chaque sous-répertoire principal répertorié dans la commande précédente, identifiez la taille de ses sous-répertoires. -dÀ utiliser pour augmenter la profondeur et -t pour indiquer le répertoire de premier niveau.

Par exemple, utilisez-le /var comme répertoire de premier niveau. Ci-dessous/var, identifiez tous les grands sous-répertoires et leur taille.

./optimizeImage.sh -p /{workspace}/{java-app-id}/Artifacts/ContainerFiles.tar -d 2 -t /var -s 1000000 -v

Répétez ce processus pour chaque sous-répertoire répertorié à l'étape précédente (par exemple,/usr, /tmp/opt, et/home).

AWS DevOps
Analysez le dossier volumineux de chaque sous-répertoire du répertoire /.

Pour chaque sous-répertoire répertorié à l'étape précédente, identifiez les dossiers nécessaires à l'exécution de l'application.

Par exemple, en utilisant les sous-répertoires de l'étape précédente, listez tous les sous-répertoires du /var répertoire ainsi que leur taille. Identifiez les sous-répertoires dont l'application a besoin.

/var/tmp                        237285851 /var/lib 24489984 /var/cache                      237285851

Pour exclure les sous-répertoires dont l'application n'a pas besoin, ajoutez ces sous-répertoires dans le analysis.json fichier dans la appExcludedFiles section ci-dessous. containerParameters

Un analysis.json fichier d'exemple est joint.

AWS DevOps
Identifiez les fichiers nécessaires dans la liste AppExcludes.

Pour chaque sous-répertoire ajouté à la liste AppExcludes, identifiez tous les fichiers de ce sous-répertoire requis par l'application. Dans le fichier analysis.json, ajoutez les fichiers ou sous-répertoires spécifiques dans la section ci-dessous. appSpecificFiles containerParameters 

Par exemple, si le /usr/lib répertoire est ajouté à la liste d'exclusion, mais /usr/lib/jvm que l'application en a besoin, ajoutez-le /usr/lib/jvm à la appSpecificFiles section.

AWS DevOps
TâcheDescriptionCompétences requises
Conteneurisez l'application analysée.

Pour conteneuriser l'application, exécutez la commande suivante.

sudo app2container containerize --application-id <application-id>

La commande génère l'image Docker ainsi qu'un bundle tar dans l'emplacement de l'espace de travail.

AWS DevOps
Identifiez la taille du fichier tar des artefacts.

Identifiez le ContainerFiles.tar fichier dans {workspace}/{java-app-id}/Artifacts lequel se  workspace trouve l'espace de travail App2Container et l'ID  java-app-id de l'application. 

./optimizeImage.sh -p /{workspace}/{java-app-id}/Artifacts/ContainerFiles.tar -d 0 -t / -v

Il s'agit de la taille totale du fichier tar après optimisation. 

AWS DevOps
Exécutez l'image Docker.

Pour vérifier que l'image démarre sans erreur, exécutez l'image Docker localement à l'aide des commandes suivantes.

Pour identifier  imageId le contenant, utilisezdocker images |grep java-app-id.

Pour faire fonctionner le conteneur, utilisezdocker run -d <image id>.

AWS DevOps

Ressources connexes

Pièces jointes

Pour accéder au contenu supplémentaire associé à ce document, décompressez le fichier suivant : attachment.zip