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 offre un ambiente di sviluppo per la compilazione, la spedizione e l'esecuzione di app con docker. Abilitando il sistema 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 imprese; per informazioni sulle tariffe Pro, Team e Business, vedere le Domande frequenti sul sito Docker.)
Nota
È 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 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 ulteriori informazioni, vedere Introduzione ai contenitori Docker.
Prerequisiti
- WSL versione 1.1.3.0 o successiva.
- Windows 11 a 64 bit: Home o Pro versione 21H2 o successiva oppure Enterprise o Education versione 21H2 o successiva.
- Windows 10 a 64 bit (scelta consigliata): Home o Pro 22H2 (build 19045) o versione successiva oppure Enterprise o Education 22H2 (build 19045) o versione successiva. (Minimo): Home o Pro 21H2 (build 19044) o versione successiva o Enterprise o Education 21H2 (build 19044) o versione successiva. Aggiornare Windows
- Processore a 64 bit con SLAT (Second Level Address Translation).
- 4 GB di RAM di sistema.
- Abilitare la virtualizzazione hardware nel BIOS.
- Installare WSL e configurare un nome utente e una password per la distribuzione Linux in esecuzione su WSL 2.
- Installare Visual Studio Code (facoltativo). In questo modo sarà disponibile la migliore esperienza, inclusa la possibilità di scrivere codice ed eseguire il debug all'interno di un contenitore Docker remoto e di connettersi alla distribuzione Linux.
- Installare Terminale Windows (facoltativo). In questo modo sarà disponibile la migliore esperienza, compresa la possibilità di personalizzare e aprire più terminali nella stessa interfaccia (tra cui Ubuntu, Debian, PowerShell, interfaccia della riga di comando di Azure o qualsiasi altra opzione che si preferisce usare).
- Iscriversi per ottenere un ID Docker nell'hub Docker (facoltativo).
- Vedere il contratto di licenza di Docker Desktop per gli aggiornamenti sulle condizioni per l'utilizzo.
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.
Nota
WSL può eseguire distribuzioni in modalità WSL versione 1 o WSL 2. Puoi verificarlo aprendo PowerShell e immettendo: 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 di differenze fondamentali tra Windows e Linux, non è stato possibile eseguire il motore Docker 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 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):
Scaricare Docker Desktop e seguire le istruzioni di installazione.
Dopo l'installazione, avviare Docker Desktop dal menu Start di Windows, quindi selezionare l'icona Docker dal menu delle icone nascoste della barra delle applicazioni. Fare clic sull'icona con il pulsante destro del mouse per visualizzare il menu dei comandi di Docker e selezionare "Impostazioni".
Assicurarsi che "Usare il motore basato su WSL 2" sia archiviato in Impostazioni>Generali.
Selezionare tra le distribuzioni di WSL 2 installate quella in cui si vuole abilitare l'integrazione di Docker andando su: Impostazioni> Risorse>Integrazione WSL.
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
Verificare che l'installazione funzioni correttamente eseguendo una semplice immagine Docker incorporata 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
odocker ps -a
(senza -a show all flag, 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 usando 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 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.
Per questo esempio si userà il codice sorgente dell'esercitazione Hello World per Django nella documentazione della configurazione dell'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
Nota
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.Dal terminale WSL passare alla cartella del codice sorgente per questo progetto:
cd helloworld-django
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.
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.Selezionare la cartella del progetto da inserire in un contenitore. Nel mio caso, questo è
\\wsl\Ubuntu-20.04\home\mattwojo\repos\helloworld-django\
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.
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 è apparsa una nuova cartella
.devcontainer
con le informazioni di configurazione del contenitore all'interno di un fileDockerfile
edevcontainer.json
.Per verificare che il progetto sia ancora connesso a WSL e sia 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'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 può differire dalla versione di Python installata nella distribuzione WSL.Per avviare 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 file
launch.json
nella cartella.vscode
del progetto con istruzioni su come eseguire l'app.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 in http://127.0.0.1:8000/ Uscire dal server con CONTROL-C". Tenere premuto il tasto di controllo e selezionare l'indirizzo visualizzato per aprire l'app nel Web browser predefinito e visualizzare il progetto in esecuzione all'interno del contenitore.
È stato configurato correttamente un contenitore di sviluppo remoto usando Docker Desktop, basato sul back-end WSL 2, in cui è possibile scrivere codice, compilare, avviare, distribuire o eseguire il debug usando VS Code.
Risoluzione dei problemi
Contesto docker WSL 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. A questo scopo, verificare 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.
e 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 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 questo post di StackOverflow.
Per altre informazioni sulla risoluzione dei problemi generali in WSL, vedere la documentazione sulla risoluzione dei problemi.
Risorse aggiuntive
- Documentazione di Docker: Procedure consigliate per Docker Desktop con WSL 2
- Commenti e suggerimenti per Docker Desktop per Windows: Inviare un problema
- Blog di VS Code: Linee guida per la scelta di un ambiente di sviluppo
- Blog di VS Code: Uso di Docker in WSL 2
- Blog di VS Code: Uso di contenitori remoti in WSL 2
- Podcast Hanselminutes: Rendere Docker incantevole per gli sviluppatori con Simon Ferquel
Windows Subsystem for Linux