Condividi tramite


Introduzione ai contenitori remoti Docker 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 offre un ambiente di sviluppo per la compilazione, la spedizione e l'esecuzione di app dockerized. Abilitando il motore basato su WSL 2, è possibile eseguire contenitori Sia Linux che Windows 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.

Annotazioni

È consigliabile usare Docker Desktop grazie all'integrazione con Windows e sottosistema Windows per Linux. Tuttavia, mentre Docker Desktop supporta l'esecuzione di contenitori Linux e Windows, non è possibile eseguire entrambi contemporaneamente. Per eseguire i contenitori Linux e Windows contemporaneamente, è necessario installare ed eseguire un'istanza Docker separata in WSL. Se è necessario eseguire contenitori simultanei o si preferisce installare un motore di contenitori direttamente nella distribuzione Linux, seguire le istruzioni di installazione di Linux per tale servizio contenitore, ad esempio Installare il motore Docker in Ubuntu o Installare Podman per l'esecuzione di contenitori Linux.

Panoramica dei contenitori Docker

Docker è uno strumento usato per creare, distribuire ed eseguire applicazioni usando contenitori. I contenitori consentono agli sviluppatori di creare un pacchetto di un'app con tutte le parti necessarie (librerie, framework, dipendenze e così via) e spedirlo come un unico pacchetto. L'uso di un contenitore garantisce che l'app esegua la stessa operazione indipendentemente dalle impostazioni personalizzate o dalle librerie installate in precedenza nel computer che lo esegue che potrebbe differire dal computer usato per scrivere e testare il codice dell'app. Ciò consente agli sviluppatori di concentrarsi sulla scrittura di codice senza preoccuparsi 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 parti non già presenti nel computer host, riducendo le dimensioni del pacchetto e migliorando le prestazioni.

La disponibilità continua, l'uso di contenitori Docker con strumenti come Kubernetes, è un altro motivo per la popolarità dei contenitori. In questo modo è possibile creare più versioni del contenitore di app in momenti diversi. Invece di dover arrestare un intero sistema per gli aggiornamenti o la manutenzione, ogni contenitore (e i relativi microservizi specifici) può essere sostituito in tempo reale. È possibile preparare un nuovo contenitore con tutti gli aggiornamenti, configurare il contenitore per la produzione e puntare al nuovo contenitore una volta pronto. È anche possibile 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.

Prerequisiti

Per altre informazioni, vedere la documentazione di Docker Requisiti di sistema per installare Docker Desktop in Windows.

Per informazioni su come installare Docker in Windows Server, vedere Introduzione: Preparazione di Windows per i contenitori.

Annotazioni

WSL può eseguire distribuzioni in modalità WSL versione 1 o WSL 2. Per verificarlo, aprire PowerShell e immettere: wsl -l -v. Assicurarsi che la distribuzione sia impostata per usare 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 è riuscito a essere eseguito direttamente all'interno di WSL, quindi il team Docker ha sviluppato una soluzione alternativa usando Hyper-V macchine virtuali e LinuxKit. Tuttavia, poiché WSL 2 ora viene 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, ottenendo prestazioni migliori e interoperabilità tra gli strumenti di 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 menu Start di Windows, quindi selezionare l'icona Docker dal menu icone nascoste della barra delle applicazioni. Fare clic con il pulsante destro del mouse sull'icona per visualizzare il menu dei comandi di Docker e scegliere "Impostazioni". Icona del dashboard di Docker Desktop

  3. Assicurarsi che l'opzione "Usa il motore basato su WSL 2" sia selezionata in Impostazioni>generali. Impostazioni generali di Docker Desktop

  4. Selezionare tra le distribuzioni di WSL 2 installate in cui si vuole abilitare l'integrazione di Docker passando a: Impostazioni>Risorse>WSL 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:

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

Sviluppare in contenitori remoti con VS Code

Per iniziare a sviluppare app con Docker con WSL 2, è consigliabile usare VS Code, insieme alle estensioni WSL, Dev Containers e Docker.

  • Installare l'estensione WSL di VS Code. 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 altre problematiche tra sistemi operativi).

  • Installare l'estensione VS Code Dev Containers. Questa estensione consente di aprire la cartella o il repository del progetto all'interno di un contenitore, sfruttando il set completo di funzionalità di Visual Studio Code per eseguire il lavoro di sviluppo all'interno del contenitore.

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

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

  1. Per questo esempio, utilizzerò il codice sorgente della mia guida Hello World per Django nei documenti sull'ambiente di sviluppo Python. È possibile ignorare questo passaggio se si preferisce usare il proprio codice sorgente del progetto. Per scaricare l'app Web HelloWorld-Django da GitHub, aprire un terminale WSL (ad esempio Ubuntu) e immettere: git clone https://github.com/mattwojo/helloworld-django.git

    Annotazioni

    Archiviare sempre il codice nello stesso file system in cui si usano gli strumenti. Ciò comporterà prestazioni di accesso ai file più veloci. In questo esempio si usa una distribuzione Linux (Ubuntu) e si vogliono archiviare i file di progetto nel file system \\wsl\WSL . L'archiviazione dei file di progetto nel file system Windows 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 in esecuzione nel server di estensione WSL locale immettendo:

    code .
    

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

    Indicatore remoto WSL di VS Code

  4. Dal riquadro comandi di VS Code (CTRL+ MAIUSC+ P), immettere: Dev Containers: Reopen in Container (Contenitori di sviluppo: Riaprire nel contenitore) perché si usa una cartella già aperta usando l'estensione WSL. In alternativa, usare Contenitori di sviluppo: Apri cartella nel contenitore... per scegliere una cartella WSL usando la condivisione locale \\wsl$ (dal lato Windows). Per altri dettagli, vedere Avvio rapido di Visual Studio Code : Aprire una cartella esistente in un contenitore . Se questi comandi non vengono visualizzati man mano che si inizia a digitare, verificare di aver installato l'estensione Dev Containers collegata in precedenza.

    Comando VS Code Dev Containers

  5. Selezionare la cartella del progetto da inserire in un contenitore. Nel mio caso, questo è \\wsl\Ubuntu-20.04\home\mattwojo\repos\helloworld-django\

    Cartella contenitori di sviluppo di VS Code

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

    Definizioni di configurazione dei contenitori di sviluppo di VS Code

  7. Verrà aperta una nuova istanza di VS Code, si inizierà a compilare la nuova immagine e, una volta completata la compilazione, verrà avviato il contenitore. Si noterà che una nuova .devcontainer cartella è apparsa con le informazioni di configurazione del contenitore all'interno di un Dockerfile file e devcontainer.json .

    Cartella .devcontainer di VS Code

  8. Per verificare che il progetto sia ancora connesso a WSL e all'interno di un contenitore, aprire il terminale integrato di VS Code (CTRL+ MAIUSC + ~). Controllare il sistema operativo immettendo: uname e la versione di Python con: python3 --version. È possibile notare che l'unme è 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 può 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 ed esegui debug per selezionare una configurazione di debug e scegliere la configurazione più adatta al progetto(nell'esempio seguente sarà "Django"). Verrà creato un launch.json file nella .vscode cartella del progetto con istruzioni su come eseguire l'app.

    Configurazione di esecuzione e debug di VS Code

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

    VS Code in esecuzione in un container Docker

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

Risoluzione dei problemi

Contesto WSL di Docker deprecato

Se si usa un'anteprima tecnica anticipata di Docker per WSL, potrebbe essere disponibile un contesto Docker denominato "wsl" 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: docker context rm wsl come si vuole usare il contesto predefinito per Windows e WSL2.

I possibili errori che potrebbero 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 in 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 di WSL Linux e immettendo: explorer.exe . per visualizzare la cartella in Esplora file di Windows. Immettere: \\wsl\<distro name>\mnt\wsl sostituendo <distro name> con il nome della distribuzione (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 repository WSL o da questo post di StackOverflow.

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

Risorse aggiuntive