Introduzione ai contenitori Docker remoti in WSL 2

Questa guida dettagliata consente di iniziare a sviluppare con contenitori remoti configurando Docker Desktop per Windows con WSL 2 (sottosistema Windows per Linux, versione 2).

Docker Desktop per Windows un ambiente di sviluppo per la compilazione, la spedizione e l'esecuzione di app dockerized. Abilitando il motore basato su WSL 2, è possibile eseguire sia i contenitori Linux che Windows contenitori in Docker Desktop nello stesso computer. (Docker Desktop è gratuito per uso personale e piccole aziende. Per informazioni sui prezzi di Pro, team o business, vedere le domande frequenti sul sito Docker).

Panoramica dei contenitori Docker

Docker è uno strumento usato per creare, distribuire ed eseguire applicazioni usando i contenitori. I contenitori consentono agli sviluppatori di creare un pacchetto di un'app con tutti i componenti necessari (librerie, framework, dipendenze e così via) e di distribuirli come un unico pacchetto. L'uso di un contenitore garantisce che l'app venga eseguita lo stesso indipendentemente da eventuali impostazioni personalizzate o da librerie precedentemente installate nel computer in cui è in esecuzione che potrebbero essere diverse da quelle del computer usato per scrivere e testare il codice dell'app. Ciò consente agli sviluppatori di concentrarsi sulla scrittura del codice senza doversi preoccupare del sistema in cui verrà eseguito il codice.

I contenitori Docker sono simili alle macchine virtuali, ma non creano un intero sistema operativo virtuale. Docker consente invece all'app di usare lo stesso kernel Linux del sistema in cui è in esecuzione. Ciò consente al pacchetto dell'app di richiedere solo i componenti non ancora presenti nel computer host, riducendo le dimensioni del pacchetto e migliorando le prestazioni.

La disponibilità continua, usando contenitori Docker con strumenti come Kubernetes, è un altro motivo per l'ampia diffusione dei contenitori. In questo modo è possibile creare più versioni del contenitore dell'app in momenti diversi. Invece di dover arrestare un intero sistema per gli aggiornamenti o la manutenzione, ogni contenitore (e i microservizi specifici) possono essere sostituiti in tempo reale. Puoi preparare un nuovo contenitore con tutti gli aggiornamenti, configurare il contenitore per la produzione e puntare semplicemente al nuovo contenitore quando è pronto. Puoi anche archiviare versioni diverse dell'app usando i contenitori e mantenerle in esecuzione come fallback di sicurezza, se necessario.

Per altre informazioni, vedere Introduzione ai contenitori Docker Microsoft Learn.

Prerequisiti

Nota

WSL può eseguire distribuzioni in modalità WSL versione 1 o WSL 2. È possibile verificare questo problema aprendo PowerShell e immettendo: wsl -l -v . Assicurarsi che la distribuzione sia impostata per l'uso di WSL 2 immettendo: wsl --set-version <distro> 2 . Sostituire <distro> con il nome della distribuzione ,ad esempio Ubuntu 18.04.

In WSL versione 1, a causa delle differenze fondamentali tra Windows e Linux, il motore Docker non poteva essere eseguito direttamente all'interno di WSL, quindi il team docker ha sviluppato una soluzione alternativa usando macchine virtuali Hyper-V e LinuxKit. Tuttavia, poiché WSL 2 viene ora eseguito in un kernel Linux con capacità di chiamata di sistema completa, Docker può essere eseguito completamente in WSL 2. Ciò significa che i contenitori Linux possono essere eseguiti in modo nativo senza emulazione, con conseguente miglioramento delle prestazioni e dell'interoperabilità tra gli strumenti Windows e Linux.

Installare Docker Desktop

Con il back-end WSL 2 supportato in Docker Desktop per Windows, è possibile lavorare in un ambiente di sviluppo basato su Linux e compilare contenitori basati su Linux, usando Visual Studio Code per la modifica e il debug del codice ed eseguendo il contenitore nel browser Microsoft Edge in Windows.

Per installare Docker (dopo aver già installato WSL):

  1. Scaricare Docker Desktop e seguire le istruzioni di installazione.

  2. Dopo l'installazione, avviare Docker Desktop dal Windows menu Start, quindi selezionare l'icona Docker dal menu delle icone nascoste della barra delle applicazioni. Fare clic con il pulsante destro del mouse sull'icona per visualizzare il menu dei comandi Docker e selezionare "Impostazioni". Icona del dashboard di Docker Desktop

  3. Assicurarsi che l'opzione "Use the WSL 2 based engine" (Usa il motore basato su WSL 2) sia selezionata in ImpostazioniGenerale. Impostazioni generali di Docker Desktop

  4. Selezionare una delle distribuzioni WSL 2 installate in cui si vuole abilitare l'integrazione di Docker in:Impostazioni risorseWSL Integration. Impostazioni delle risorse di Docker Desktop

  5. Per verificare che Docker sia stato installato, aprire una distribuzione WSL (ad esempio, Ubuntu) e visualizzare la versione e il numero di build immettendo: docker --version

  6. Verificare che l'installazione funzioni correttamente eseguendo una semplice immagine Docker predefinita usando: docker run hello-world

Suggerimento

Ecco alcuni comandi Docker utili da conoscere:

  • Elenca i comandi disponibili nell'interfaccia della riga di comando di Docker immettendo: docker
  • Elenca le informazioni per un comando specifico con: docker <COMMAND> --help
  • Elenca le immagini Docker nel computer (che è solo l'immagine hello-world a questo punto) con: docker image ls --all
  • Elencare i contenitori nel computer con: docker container ls --all o (senza il flag -a show all, verranno visualizzati solo i contenitori docker ps -a in esecuzione)
  • Elencare le informazioni a livello di sistema relative all'installazione di Docker, incluse le statistiche e le risorse (memoria CPU) disponibili nel contesto & WSL 2, con: docker info

Sviluppare in contenitori remoti usando VS Code

Per iniziare a sviluppare app con Docker con WSL 2, è consigliabile usare VS Code, insieme all'estensione Remote-WSL e all'estensione Docker.

  • Installare l VS Code'estensione Remote-WSL. Questa estensione consente di aprire il progetto Linux in esecuzione in WSL in VS Code (non è necessario preoccuparsi di problemi di percorso, compatibilità binaria o altri problemi tra sistemi operativi).

  • Installare l'estensione vs code Remote-Containers . Questa estensione consente di aprire la cartella o il repo del progetto all'interno di un contenitore, sfruttando il set di funzionalità completo di Visual Studio Code per eseguire le attività di sviluppo all'interno del contenitore.

  • Installare l'VS Code Docker. Questa estensione aggiunge la funzionalità per compilare, gestire e distribuire applicazioni in contenitori dall'interno VS Code. È necessaria l'estensione Remote-Container per usare effettivamente il contenitore come ambiente di sviluppo.

Si usererà Docker per creare un contenitore di sviluppo per un progetto di app esistente.

  1. Per questo esempio, si userà il codice sorgente dell'esercitazione Hello World per Django nell'ambiente di sviluppo Python configurato nella documentazione. È possibile ignorare questo passaggio se si preferisce usare il codice sorgente del progetto. Per scaricare lHelloWorld-Django app Web da GitHub, aprire un terminale WSL (ad esempio Ubuntu) e immettere:git clone https://github.com/mattwojo/helloworld-django.git

    Nota

    Archiviare sempre il codice nello stesso file system in cui si usano gli strumenti. Ciò comporta prestazioni di accesso ai file più veloci. In questo esempio si usa una distribuzione Linux (Ubuntu) e si vogliono archiviare i file di progetto in WSL file system \\wsl\ . L'archiviazione dei file di progetto Windows file system rallenta notevolmente quando si usano gli strumenti Linux in WSL per accedere a tali file.

  2. Dal terminale WSL passare alla cartella del codice sorgente per questo progetto:

    cd helloworld-django
    
  3. Aprire il progetto in VS Code nel server di estensione Remote-WSL locale immettendo:

    code .
    

    Verificare di essere connessi alla distribuzione WSL Linux controllando l'indicatore remoto verde nell'angolo inferiore sinistro dell'istanza VS Code locale.

    VS Code indicatore remoto WSL

  4. Dal comando VS Code (CTRL+MAIUSC+P), immettere: Remote-Containers: Open Folder in Container... Se questo comando non viene visualizzato quando si inizia a digitarlo, verificare di aver installato l'estensione Contenitore remoto collegata in precedenza.

    VS Code comando Contenitore remoto

  5. Selezionare la cartella del progetto che si vuole contenitorizzare. Nel mio caso, si tratta di \\wsl\Ubuntu-20.04\home\mattwojo\repos\helloworld-django\

    VS Code cartella Contenitore remoto

  6. Verrà visualizzato un elenco di definizioni di contenitori, poiché non è ancora presente alcuna configurazione devContainer nella cartella del progetto (repo). L'elenco delle definizioni di configurazione del contenitore visualizzato viene filtrato in base al tipo di progetto. Per il progetto Django, selezionerò Python 3.

    VS Code di configurazione del contenitore remoto

  7. Verrà aperta una nuova istanza di VS Code, inizierà a compilare la nuova immagine e, al termine della compilazione, il contenitore verrà avviato. Verrà visualizzata una nuova cartella con le informazioni di configurazione .devcontainer del contenitore all'interno di Dockerfile un file e devcontainer.json .

    VS Code .devcontainer

  8. Per verificare che il progetto sia ancora connesso a WSL e all'interno di un contenitore, aprire il terminale integrato VS Code (CTRL+MAIUSC+~). Controllare il sistema operativo immettendo: uname e la versione di Python con: python3 --version . È possibile vedere che l'uname è tornato come "Linux", quindi si è ancora connessi al motore WSL 2 e il numero di versione di Python sarà basato sulla configurazione del contenitore che potrebbe differire dalla versione di Python installata nella distribuzione WSL.

  9. Per eseguire ed eseguire il debug dell'app all'interno del contenitore usando Visual Studio Code, aprire prima di tutto il menu Esegui (CTRL+MAIUSC+D o selezionare la scheda sulla barra dei menu all'estrema sinistra). Selezionare quindi Esegui e debug per selezionare una configurazione di debug e scegliere la configurazione più adatta al progetto (in questo esempio, sarà "Django"). Verrà creato un launch.json file nella cartella del progetto con le istruzioni su come eseguire .vscode l'app.

    VS Code configurazione di debug

  10. Dall'VS Code selezionare Esegui avvia debug (o premere F5). Verrà aperto un terminale all'interno VS Code verrà visualizzato un risultato simile al seguente: "Avvio del server di sviluppo in Uscita dal http://127.0.0.1:8000/ server con CONTROL-C". Tenere premuto CTRL e selezionare l'indirizzo visualizzato per aprire l'app nel Web browser predefinito e visualizzare il progetto in esecuzione all'interno del relativo contenitore.

    VS Code un contenitore Docker

È stato configurato correttamente un contenitore di sviluppo remoto usando Docker Desktop, basato sul back-end WSL 2, in cui è possibile eseguire il codice, compilare, eseguire, distribuire o eseguire il debug usando VS Code!

Risoluzione dei problemi

Contesto docker WSL deprecato

Se si usava una prima versione tech preview di Docker per WSL, è possibile che si abbia un contesto Docker denominato "wsl" che è ora deprecato e non più usato. È possibile controllare con il comando : docker context ls . È possibile rimuovere questo contesto "wsl" per evitare errori con il comando , perché si vuole usare il contesto predefinito sia per Windows docker context rm wsl che per WSL2.

I possibili errori che possono verificarsi con questo contesto wsl deprecato includono: docker wsl open //./pipe/docker_wsl: The system cannot find the file specified. o error during connect: Get http://%2F%2F.%2Fpipe%2Fdocker_wsl/v1.40/images/json?all=1: open //./pipe/docker_wsl: The system cannot find the file specified.

Per altre informazioni su questo problema, vedere Come configurare Docker all'interno di Windows System for Linux (WSL2) in Windows 10.

Problemi durante la ricerca della cartella di archiviazione delle immagini Docker

Docker crea due cartelle di distribuzione per archiviare i dati:

  • \wsl$\docker-desktop
  • \wsl$\docker-desktop-data

È possibile trovare queste cartelle aprendo la distribuzione WSL Linux e immettendo: per explorer.exe . visualizzare la cartella in Windows Esplora file. Immettere: \\wsl\<distro name>\mnt\wsl sostituendo con il nome della distribuzione <distro name> (ad esempio. Ubuntu-20.04) per visualizzare queste cartelle.

Per altre informazioni sull'individuazione dei percorsi di archiviazione Docker in WSL, vedere questo problema dal repo WSL o da questo post di StackOverlow.

Per altre informazioni sulla risoluzione dei problemi generali in WSL, vedere la documentazione sulla risoluzione dei problemi.

Risorse aggiuntive