Questo post fornisce una guida passo passo per la configurazione di un ambiente di sviluppo dockerizzato Python con VScode e l'estensione Dev Containers.
Nel post precedente su questo argomento, Impostazione di un ambiente Python dockerizzato: la strada più difficileabbiamo visto come configurare un ambiente di sviluppo Python dockerizzato tramite l'interfaccia a riga di comando (CLI). In questo post esamineremo un approccio più elegante e robusto per la configurazione di un ambiente di sviluppo Python dockerizzato utilizzando VScode e Contenitori di sviluppo estensione.
Articoli Correlati:
Al termine di questo tutorial sarai in grado di configurare un semplice ambiente di sviluppo Python con VScode e l'estensione Dev Containers.
Per seguire questo tutorial, avrai bisogno di quanto segue:
- Docker Desktop (o equivalente) se utilizzi una macchina con sistema operativo macOS o Windows, oppure Docker installato se utilizzi un sistema operativo Linux
- Account Docker Hub da cui estrarre l'immagine
- IDE VScode e il Contenitori di sviluppo estensione installata
In questo tutorial utilizzeremo l'immagine ufficiale Python: python:3.1o
.
Tutti gli esempi di codice in questo post sono disponibili qui:
Prima di iniziare, spieghiamo cos'è l'estensione Dev Containers e quando dovresti considerare di utilizzarla.
In poche parole, l'estensione VScode Dev Containers ti consente di aprire senza problemi una sessione VScode isolata all'interno di un contenitore docker. Il livello di isolamento comprende i seguenti tre livelli:
- Ambiente
- Impostazioni del codice VS
- Estensioni VScode
IL devcontainer.json
file definisce le impostazioni della sessione, consentendoci di impostare e definire i tre livelli precedenti.
Per impostare e avviare la cartella del progetto all'interno di un contenitore con l'estensione Dev Containers, avrai bisogno dei due componenti seguenti:
- Installa il Contenitori di sviluppo estensione
- Nella cartella del tuo progetto, crea una cartella denominata
.devcontainer
e imposta adevcontainer.json
file
Il diagramma seguente descrive l'architettura generale di Dev Containers:
Al momento del lancio, l'estensione Dev Containers avvia una nuova sessione VScode all'interno di un contenitore. Per impostazione predefinita, monta la cartella locale nel contenitore, il che ci consente di mantenere il codice persistente e sincronizzarlo con la nostra cartella locale. Puoi montare cartelle aggiuntive, ma questo non rientra nell'ambito di questo tutorial.
Nella prossima sezione vedremo come impostare un ambiente Python con il file devcontainer.json
file.
Prima di iniziare con devcontainer.json
impostazioni, definiamo innanzitutto l'ambito dell'ambiente di sviluppo. Dovrebbe includere le seguenti funzionalità:
- Pitone 3.10
- Supporta i notebook Jupyter
- Installa le librerie richieste: librerie di supporto Pandas e VScode Jupyter
- Installa le estensioni di supporto: Python e Jupyter
Nelle sezioni seguenti approfondiremo le funzionalità principali di devcontainer.json
file. Inizieremo con un ambiente Python minimalista e dimostreremo come personalizzarlo aggiungendo diversi livelli di personalizzazione.
Costruzione vs. immagine
Il requisito principale per avviare una sessione containerizzata con l'estensione Dev Containers è definire le impostazioni dell'immagine. Esistono due approcci per impostare l'immagine:
- Crea l'immagine ed eseguila durante il momento del lancio del contenitore con il file
build
discussione. Questo argomento consente di definire un Dockerfile per la build e passare argomenti al filedocker build
funzione. Una volta terminato il processo di compilazione, verrà avviata la sessione all'interno del contenitore - Avvia la sessione con un'immagine esistente utilizzando il file
image
discussione
A seconda dei casi d’uso, ogni metodo ha i suoi pro e contro. Dovresti considerare l'utilizzo di image
argomento quando si dispone di un'immagine che soddisfa pienamente i requisiti dell'ambiente. Allo stesso modo, un buon caso d'uso per il build
argomento è quando hai un'immagine di base ma devi aggiungere impostazioni di personalizzazione minori.
Nella sezione successiva, inizieremo con un semplice esempio di avvio di un ambiente Python utilizzando il file image
argomento per importare l'immagine Python ufficiale (python:3.10
).
Ambiente Python dockerizzato di base
Il sotto devcontainer.json
file fornisce un semplice esempio per la configurazione di un ambiente Python. Utilizza il image
argomento per definire il python:3.10
image come ambiente di sessione:
devcontainer.json
{
"name": "Python Development Environment",
"image": "python:3.10"
}
IL name
l'argomento definisce il nome dell'ambiente. In questo caso, lo impostiamo come Ambiente di sviluppo Python.
Prima di avviare l'ambiente, assicurati che:
- Il tuo desktop Docker (o equivalente) è aperto
- Hai effettuato l'accesso a Docker Hub (o estrai in anticipo l'immagine Python)
- IL
devcontainer.json
il file è impostato nella cartella del progetto sotto il file.devcontainer
cartella:
.
âââ .devcontainer
âââ devcontainer.json
Il codice per questo esempio è disponibile Qui.
Per avviare una sessione, fare clic su Dev Container ><
simbolo in basso a sinistra e selezionare il Reopen in Container
opzione come dimostrato nello screenshot qui sotto:
Tieni presente che durante il primo avvio della sessione, l'estensione Dev Containers cercherà l'immagine definita dal file image
argomento (in questo caso – python:3.10
). Se l'immagine non è disponibile localmente, la estrarrà da Docker Hub e potrebbero essere necessari alcuni minuti. Successivamente, dovrebbero essere necessari alcuni secondi per avviare la sessione.
Nello screenshot qui sopra, puoi vedere la mappatura tra i devcontainer.json
argomenti e le impostazioni della sessione. Il nome della sessione è ora disponibile in basso a destra (contrassegnato in viola) e allineato al valore del file name
discussione. Allo stesso modo, la sessione è ora in esecuzione all'interno del file python:3.10
contenitore e puoi avviare Python dal terminale.
Il contenitore Python viene fornito con le librerie Python predefinite. Nella sezione seguente vedremo come aggiungere più livelli sopra l'immagine di base Python con il file build
discussione.
Personalizza l'ambiente Python con un Dockerfile
Personalizziamo ora l'ambiente di cui sopra modificando il file devcontainer.json
. Sostituiremo il image
discussione con ilbuild
discussione. IL build
L'argomento ci consente di creare l'immagine durante l'avvio della sessione con un Dockerfile e di passare gli argomenti al file docker build
funzione. Seguiremo lo stesso approccio dimostrato in questo inviare per impostare l'ambiente Python:
- Importa il
python:3.10
come immagine di base - Imposta un ambiente virtuale
- Installa le librerie richieste
Utilizzeremo il seguente Dockerfile per impostare l'ambiente Python:
Dockerfile
FROM python:3.10ARG PYTHON_ENV=my_env
ENV PYTHON_ENV=$PYTHON_ENV
RUN mkdir requirements
COPY requirements.txt set_python_env.sh /requirements/
RUN bash ./requirements/set_python_env.sh $PYTHON_ENV
Noi usiamo il FROM
argomento per importare l'immagine Python e il file ARG
E ENV
argomenti per impostare l'ambiente virtuale come argomento e variabile di ambiente. Inoltre, utilizziamo i seguenti due file di supporto per impostare un ambiente virtuale e installare le librerie richieste:
requirements.txt
– un file di impostazioni con un elenco di librerie richieste. Per questa dimostrazione installeremo la libreria Pandas, versione 2.0.3., e le librerie di supporto Jupyter (ipykernel, ipywidgets, jupyter). La libreria wheels è una libreria di supporto che gestisce le dipendenze Cset_python_env.sh
– uno script bash helper che imposta un ambiente virtuale e installa le librerie richieste utilizzando il filerequirements.txt
file
requirements.txt
wheel==0.40.0
pandas==2.0.3
ipykernel
ipywidgets
jupyter
set_python_env.sh
#!/usr/bin/env bashPYTHON_ENV=$1
python3 -m venv /opt/$PYTHON_ENV \
&& export PATH=/opt/$PYTHON_ENV/bin:$PATH \
&& echo "source /opt/$PYTHON_ENV/bin/activate" >> ~/.bashrc
source /opt/$PYTHON_ENV/bin/activate
pip3 install -r ./requirements/requirements.txt
Ultimo ma non meno importante, utilizzeremo il seguente file di test per valutare se la libreria Pandas è stata installata correttamente e stamperemo Ciao mondo! Messaggio:
test1.py
import pandas as pdprint("Hello World!")
Apportiamo le modifiche nel file devcontainer.json
file e sostituire il file image
discussione con il build
discussione:
devcontainer.json
{
"name": "Python Development Environment",
"build": {
"dockerfile": "Dockerfile",
"context": ".",
"args": {
"PYTHON_ENV": "my_python_dev"
}
}
}
I file per questo esempio sono disponibili Qui.
IL build
gli argomenti secondari ci consentono di personalizzare la creazione dell'immagine passando argomenti al file docker build
funzione. Usiamo i seguenti argomenti per costruire l'immagine:
dockerfile
– il percorso e il nome del Dockerfilecontext
– imposta il percorso del file system locale per consentire l'accesso ai file con estensioneCOPY
argomento durante la fase di compilazione. In questo caso, utilizziamo la cartella corrente del filedevcontainer.json
file (ad esempio, il.devcontainer
cartella).args
– imposta e passa argomenti al contenitore durante il processo di compilazione. Noi usiamo ilPYTHON_ENV
argomento per impostare l'ambiente virtuale e denominarlo comemy_python_dev
Dovresti avere i tre file…” Dockerfile
, requirements.txt
E set_python_env.sh
memorizzato sotto il .devcontainer
cartella, insieme al file devcontainer.json
file:
.
âââ .devcontainer
â âââ Dockerfile
â âââ devcontainer.json
â âââ requirements.txt
â âââ set_python_env.sh
âââ test2.py
Lanciamo ora la sessione utilizzando le nuove impostazioni e testiamola con il file test1.py
file:
Come puoi notare nello screenshot qui sopra, siamo riusciti a eseguire con successo lo script di test dal terminale (contrassegnato in viola) e ha stampato il file Ciao mondo! messaggio come previsto (contrassegnato in verde). Inoltre, l'ambiente virtuale che abbiamo impostato nell'immagine (my_python_dev
) viene caricato per impostazione predefinita (contrassegnato in giallo).
Nella sezione successiva vedremo come personalizzare le impostazioni VScode della sessione Dev Containers.
Personalizza le impostazioni VScode
Una delle grandi funzionalità dell'estensione Dev Containers è che isola l'impostazione della sessione dalle impostazioni principali di VScode. Ciò significa che puoi personalizzare completamente le impostazioni VScode a livello di progetto. Estende la riproducibilità dell'ambiente di sviluppo oltre le impostazioni Python o del sistema operativo. Ultimo ma non meno importante, rende la collaborazione con altri o il lavoro su più macchine fluida ed efficiente.
Concluderemo questo tutorial con il prossimo esempio, dove vediamo come personalizzare le impostazioni di VScode con il file customizations
discussione. Aggiungeremo l'argomento all'esempio precedente e utilizzeremo il metodo vscode
argomento secondario per impostare l'interprete Python predefinito dell'ambiente e le estensioni richieste:
devcontainer.json
{
"name": "Python Development Environment",
"build": {
"dockerfile": "Dockerfile",
"context": ".",
"args": {
"PYTHON_ENV": "my_python_dev"
}
},
"customizations": {
"vscode": {
"settings": {
"python.defaultInterpreterPath": "/opt/my_python_dev/bin/python3",
"python.selectInterpreter": "/opt/my_python_dev/bin/python3"
},
"extensions": (
"ms-python.python",
"ms-toolsai.jupyter"
)
}
}
}
I file per questo esempio sono disponibili Qui.
Noi usiamo il settings
argomento per definire l'ambiente virtuale Python come definito nell'immagine. Inoltre, utilizziamo il extensions
argomento per l'installazione di Pitone E Giove estensioni di supporto.
Nota: Il percorso dell'ambiente virtuale definito dal tipo di applicazione utilizzato per impostare l'ambiente. Come usiamo
venv
e lo chiamò comemy_python_dev
il percorso èopt/my_python_dev/bin/python3
.
Dopo aver aggiunto l'estensione Python, possiamo avviare gli script Python utilizzando il plug-in dell'estensione, come dimostrato nello screenshot seguente. Inoltre possiamo eseguire il codice Python sfruttando l'estensione Juptyer, in modalità interattiva:
In questo tutorial abbiamo esaminato come impostare un ambiente Python dockerizzato con VScode e l'estensione Dev Containers. L'estensione Dev Containers rende l'integrazione dei contenitori con il flusso di lavoro di sviluppo semplice ed efficiente. Abbiamo visto come, con pochi semplici passaggi, possiamo impostare e personalizzare un ambiente Python dockerizzato utilizzando il file devcontainer.json
file. Abbiamo esaminato i due approcci per impostare l'immagine della sessione con il file image
E build
argomenti e impostare estensioni con il file customizations
discussione. Esistono ulteriori opzioni di personalizzazione che non sono state trattate in questo tutorial e ti consiglio di verificarle:
- Definire le variabili d'ambiente
- Montare volumi aggiuntivi
- Imposta gli argomenti su
docker run
comando - Esegui il comando post-avvio
Se sei interessato ad approfondire maggiormente i dettagli, ti consiglio di consultare questo tutorial:
Fonte: towardsdatascience.com