Torna al blog

Containerizzare un'applicazione Python con Docker

Containerizzare un'applicazione Python con Docker

Docker è una soluzione gratuita e open-source per lo sviluppo, la distribuzione e la gestione di app in una virtualizzazione leggera a livello di sistema operativo. In questa guida, mostreremo come creare un'applicazione Python all'interno di un container Docker.

Prerequisiti

Per eseguire i passaggi illustrati in questa guida, avrai bisogno dei seguenti componenti:

Container Docker

Quando si eseguono vari programmi all'interno dello stesso ambiente, le cose possono rompersi (e lo faranno). Più programmi si aggiungono, più l'ambiente diventa instabile. Potrebbe non essere un grosso problema per l'utente medio. Tuttavia, quando si tratta di applicazioni mission-critical, le conseguenze possono essere gravi.

Più app vengono introdotte nel sistema, maggiore è la superficie di attacco. Una singola app compromessa può facilmente portare al collasso dell'intero sistema.

Per risolvere questi problemi, possiamo utilizzare i container Docker per il sandboxing a livello software:

  • Le app all'interno del container avranno un accesso limitato ai file.

  • Le app containerizzate non possono vedere altri processi in esecuzione nel sistema.

  • Al container può essere allocata una quantità specifica di risorse hardware.

  • Le porte di rete di un container non sono esposte all'esterno.

  • Packaging coerente di quasi tutto tra ambienti locali e di produzione.

Per dimostrarlo, creeremo un semplice server Python all'interno di un container Docker, trasformeremo il container in un'immagine e distribuiremo l'immagine all'interno di un ambiente di produzione fittizio.

Passo 1 – Configurazione del filesystem

Per ospitare il progetto, per prima cosa creeremo una directory dedicata:

All'interno della directory, crea una sottodirectory src per memorizzare il nostro codice:

Passo 2 – Creazione del server Python

In questo passaggio, creeremo un semplice server HTTP in Python. Crea il file server.py:

Apri il file in un editor di testo:

Inserisci il seguente codice Python:

Qui,

  • Stiamo usando la HTTPServer classe e richiedendo un gestore dalla libreria standard di Python, mantenendo il programma semplice.

  • La funzione run avvia un'istanza di HTTPserver.

  • Come suggeriscono gli argomenti di server_address, il server rimarrà in ascolto di qualsiasi connessione in entrata sulla porta 8080.

Ora verificheremo se il server funziona come previsto. Avvia il server:

Da un nuovo terminale, possiamo usare curl per inviare una richiesta al server:

In alternativa, puoi accedere al link in un browser web:

Passo 3 – Creazione di un Dockerfile

Un Dockerfile  contiene le istruzioni necessarie per generare un'immagine Docker. Le istruzioni nel file vengono seguite in modo sequenziale. Scopri di più su Dockerfile.

Crea un nuovo Dockerfile per il nostro progetto:

Ora inseriremo i codici necessari al suo interno. Apri il file in un editor di testo:

Inserisci il seguente codice:

Qui,

  • Qualsiasi Dockerfile deve iniziare con la FROM direttiva. Nel nostro caso, stiamo dichiarando Python come base dell'immagine Docker.

  • La ENV SRC_DIR direttiva specifica la posizione della directory del container.

  • La COPY direttiva copia i file dalla src directory che attualmente ospita il server Python.

  • La variabile PYTHONBUFFERED=1 specifica che Python stamperà e registrerà l'output direttamente su STDOUT. Altrimenti, i log non verrebbero inviati a nessun buffer.

  • La CMD direttiva specifica un comando predefinito da eseguire all'avvio del container. In questo caso, stiamo usando la direttiva per avviare il nostro server Python.

Passo 4 – Generazione dell'immagine Docker

Con il Dockerfile pronto, ora possiamo creare un'immagine. Esegui il seguente comando Docker per avviare il processo:

Qui,

  • Il -t flag viene utilizzato per taggare la nostra immagine Docker come python_server.

  • Docker scaricherà tutti i componenti necessari e li unirà in un'immagine.

Passo 5 – Esecuzione dell'immagine

L'immagine è pronta per la distribuzione. Possiamo eseguirla usando il seguente comando:

Qui, stiamo reindirizzando la porta 8080 dalla macchina locale all'immagine Docker usando il -p flag.

Possiamo facilmente verificare se il server è attivo e funzionante usando curl:

Passo 6 – Terminazione del server

Dal terminale, premi “Ctrl + C” per terminare il processo Docker:

Passo 7 – Esportazione e importazione dell'immagine Docker

Ora abbiamo un'immagine Docker funzionante che ospita il nostro server Python. Con l'aiuto delle funzionalità di esportazione e importazione di Docker, possiamo migrarla su qualsiasi altro sistema.

Per prima cosa, controlla l'elenco delle immagini Docker nel sistema corrente:

Il nostro obiettivo è l'immagine Docker python_server che abbiamo appena creato. Il seguente comando la esporterà come archivio TAR:

Dopo aver trasferito il file python_server.tar sulla macchina di destinazione, usa il seguente comando per importare l'immagine Docker:

Considerazioni finali

In questa guida, abbiamo mostrato come creare un'immagine Docker da un'applicazione Python. Abbiamo creato un semplice webserver Python e ne abbiamo ricavato un'immagine Docker. L'immagine Docker può ora essere distribuita in qualsiasi ambiente garantendo un comportamento coerente.

Vuoi saperne di più su Docker? Dai un'occhiata alle seguenti guide:

Buona programmazione!

author

Preslav Dobrev

Autore · CloudSigma

Preslav Dobrev è un designer creativo presso CloudSigma, con un focus su un'identità aziendale coerente attraverso l'uso di canali di marketing tradizionali e innovativi. È abile nel fondere la visione artistica con il marketing strategico per creare narrazioni di brand di grande impatto.

Commenti

Ancora nessun commento. Scrivi il primo.