Ottimizza le immagini Docker generate da AWS App2Container - Prontuario AWS

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à.

Ottimizza le immagini Docker generate da AWS App2Container

Creato da Varun Sharma (AWS)

Ambiente: PoC o pilota

Tecnologie: contenitori e microservizi; Modernizzazione; DevOps

Servizi AWS: Amazon ECS

Riepilogo

AWS App2Container è uno strumento a riga di comando che aiuta a trasformare le applicazioni esistenti in esecuzione in locale o su macchine virtuali in contenitori, senza bisogno di modifiche al codice.

In base al tipo di applicazione, App2Container adotta un approccio conservativo per identificare le dipendenze. In modalità processo, tutti i file non di sistema sul server delle applicazioni sono inclusi nell'immagine del contenitore. In questi casi, potrebbe essere generata un'immagine abbastanza grande.

Questo modello fornisce un approccio per ottimizzare le immagini dei contenitori generate da App2Container. È applicabile a tutte le applicazioni Java scoperte da App2Container in modalità processo. Il flusso di lavoro definito nel modello è progettato per essere eseguito sul server delle applicazioni.

Prerequisiti e limitazioni

Prerequisiti

Architettura

Stack tecnologico di origine

  • Un'applicazione Java in esecuzione su un server Linux

Stack tecnologico Target

  • Un'immagine Docker generata da App2Container

Flusso dell'architettura Target

Diagram showing AWS App2Container process for containerizing Java app on Linux system.
  1. Scopri le applicazioni in esecuzione sul server delle applicazioni e analizza le applicazioni.

  2. Containerizza le applicazioni.

  3. Valuta la dimensione dell'immagine Docker. Se l'immagine è troppo grande, continua con il passaggio 4.

  4. Utilizzate lo script di shell (allegato) per identificare file di grandi dimensioni.

  5. Aggiorna gli appSpecificFiles elenchi appExcludedFiles and nel analysis.json file.

Strumenti

Strumenti

  • AWS App2Container — AWS App2Container (A2C) è uno strumento a riga di comando che consente di eseguire applicazioni eseguite nel data center locale o su macchine virtuali, in modo che vengano eseguite in contenitori gestiti da Amazon Elastic Container Service (Amazon ECS) o Amazon Elastic Kubernetes Service (Amazon EKS).

Codice

Lo optimizeImage.sh script di shell e un file di esempio sono allegati. analysis.json

Il optimizeImage.sh file è uno script di utilità per la revisione del contenuto del file generato da App2Container,. ContainerFiles.tar La revisione identifica file o sottodirectory di grandi dimensioni che possono essere esclusi. Lo script è un wrapper per il seguente comando tar.

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

Nel comando tar, lo script utilizza i seguenti valori:

path

Il percorso verso ContainerFiles.tar

filetype

Il tipo di file da abbinare

toplevel

La directory di primo livello da abbinare

depth

La profondità del percorso assoluto

size

La dimensione di ogni file

Lo script svolge le seguenti funzioni:

  1. Viene utilizzato tar -Ptvf per elencare i file senza estrarli.

  2. Filtra i file per tipo di file, a partire dalla directory di primo livello.

  3. In base alla profondità, genera il percorso assoluto come indice.

  4. In base all'indice e agli archivi, fornisce la dimensione totale della sottodirectory.

  5. Stampa la dimensione della sottodirectory.

Puoi anche sostituire i valori manualmente nel comando tar.

Epiche

AttivitàDescrizioneCompetenze richieste
Scopri le applicazioni Java locali.

Per scoprire tutte le applicazioni in esecuzione sul server delle applicazioni, esegui il comando seguente.

sudo app2container inventory 
AWS DevOps
Analizza le applicazioni scoperte.

Per analizzare ogni applicazione utilizzando application-id quella ottenuta nella fase di inventario, esegui il comando seguente.

sudo app2container analyze --application-id <java-app-id>
AWS DevOps
Containerizza le applicazioni analizzate.

Per containerizzare un'applicazione, esegui il comando seguente.

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

Il comando genera l'immagine Docker insieme a un pacchetto tar nella posizione dell'area di lavoro.

Se l'immagine Docker è troppo grande, procedi al passaggio successivo.

AWS DevOps
AttivitàDescrizioneCompetenze richieste
Identifica la dimensione del file tar di Artifacts.

Identifica il ContainerFiles.tar file in {workspace}/{java-app-id}/Artifacts cui si workspace trova l'area di lavoro di App2Container e l'ID dell'applicazione. java-app-id 

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

Questa è la dimensione totale del file tar dopo l'ottimizzazione.

AWS DevOps
Elenca le sottodirectory nella cartella/e le relative dimensioni.

Per identificare le dimensioni delle principali sottodirectory nella directory di / primo livello, esegui il comando seguente.

./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
Identifica le sottodirectory di grandi dimensioni nella cartella/.

Per ogni sottodirectory principale elencata nel comando precedente, identificate le dimensioni delle relative sottodirectory. Si usa -d per aumentare la profondità e indicare la cartella -t di primo livello.

Ad esempio, utilizzare /var come directory di primo livello. In basso/var, identifica tutte le sottodirectory di grandi dimensioni e le relative dimensioni.

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

Ripetete questo processo per ogni sottodirectory elencata nel passaggio precedente (ad esempio, /usr /tmp/opt, e). /home

AWS DevOps
Analizza la cartella di grandi dimensioni in ogni sottodirectory nella directory /.

Per ogni sottodirectory elencata nel passaggio precedente, identificate le cartelle necessarie per eseguire l'applicazione.

Ad esempio, utilizzando le sottodirectory del passaggio precedente, elencate tutte le sottodirectory della directory e le /var relative dimensioni. Identifica tutte le sottodirectory necessarie all'applicazione.

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

Per escludere le sottodirectory che non sono necessarie all'applicazione, aggiungete tali sottodirectory nel analysis.json file nella sezione sottostante. appExcludedFiles containerParameters

Viene allegato un file di esempioanalysis.json.

AWS DevOps
Identifica i file necessari dall'elenco AppExcludes.

Per ogni sottodirectory aggiunta all'elenco AppExcludes, identifica tutti i file in quella sottodirectory richiesti dall'applicazione. Nel file analysis.json, aggiungi i file o le sottodirectory specifici nella sezione sottostante. appSpecificFiles containerParameters 

Ad esempio, se la /usr/lib directory viene aggiunta all'elenco delle esclusioni, ma /usr/lib/jvm è necessaria all'applicazione, aggiungila alla sezione. /usr/lib/jvm appSpecificFiles

AWS DevOps
AttivitàDescrizioneCompetenze richieste
Containerizza l'applicazione analizzata.

Per containerizzare l'applicazione, esegui il comando seguente.

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

Il comando genera l'immagine Docker insieme a un pacchetto tar nella posizione dell'area di lavoro.

AWS DevOps
Identifica la dimensione del file tar di Artifacts.

Identifica il ContainerFiles.tar file in {workspace}/{java-app-id}/Artifacts cui si  workspace trova l'area di lavoro di App2Container e l'ID dell'applicazione.  java-app-id 

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

Questa è la dimensione totale del file tar dopo l'ottimizzazione. 

AWS DevOps
Esegui l'immagine Docker.

Per verificare che l'immagine si avvii senza errori, esegui l'immagine Docker localmente usando i seguenti comandi.

Per identificare  imageId il contenitore, usadocker images |grep java-app-id.

Per far funzionare il contenitore, usadocker run -d <image id>.

AWS DevOps

Risorse correlate

Allegati

Per accedere a contenuti aggiuntivi associati a questo documento, decomprimi il seguente file: attachment.zip