Introduzione ai contenitori Docker remoti in WSL 2Get started with Docker remote containers on WSL 2

Questa guida dettagliata consente di iniziare a sviluppare con i contenitori remoti impostando Docker desktop per Windows con WSL 2 (sottosistema Windows per Linux, versione 2).This step-by-step guide will help you get started developing with remote containers by setting up Docker Desktop for Windows with WSL 2 (Windows Subsystem for Linux, version 2).

Docker desktop per Windows è disponibile gratuitamente e fornisce un ambiente di sviluppo per la compilazione, la distribuzione e l'esecuzione di app docker.Docker Desktop for Windows is available for free and provides a development environment for building, shipping, and running dockerized apps. Abilitando il motore basato su WSL 2, è possibile eseguire i contenitori Linux e Windows in Docker desktop nello stesso computer.By enabling the WSL 2 based engine, you can run both Linux and Windows containers in Docker Desktop on the same machine.

Panoramica dei contenitori DockerOverview of Docker containers

Docker è uno strumento usato per creare, distribuire ed eseguire applicazioni usando i contenitori.Docker is a tool used to create, deploy, and run applications using containers. 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.Containers enable developers to package an app with all of the parts it needs (libraries, frameworks, dependencies, etc) and ship it all out as one package. 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.Using a container ensures that the app will run the same regardless of any customized settings or previously installed libraries on the computer running it that could differ from the machine that was used to write and test the app's code. Ciò consente agli sviluppatori di concentrarsi sulla scrittura del codice senza doversi preoccupare del sistema in cui verrà eseguito il codice.This permits developers to focus on writing code without worrying about the system that code will be run on.

I contenitori Docker sono simili alle macchine virtuali, ma non creano un intero sistema operativo virtuale.Docker containers are similar to virtual machines, but don't create an entire virtual operating system. Docker consente invece all'app di usare lo stesso kernel Linux del sistema in cui è in esecuzione.Instead, Docker enables the app to use the same Linux kernel as the system that it's running on. 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.This allows the app package to only require parts not already on the host computer, reducing the package size and improving performance.

La disponibilità continua, usando contenitori Docker con strumenti come Kubernetes, è un altro motivo per l'ampia diffusione dei contenitori.Continuous availability, using Docker containers with tools like Kubernetes, is another reason for the popularity of containers. In questo modo è possibile creare più versioni del contenitore dell'app in momenti diversi.This enables multiple versions of your app container to be created at different times. 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.Rather than needing to take down an entire system for updates or maintenance, each container (and it's specific microservices) can be replaced on the fly. Puoi preparare un nuovo contenitore con tutti gli aggiornamenti, configurare il contenitore per la produzione e puntare semplicemente al nuovo contenitore quando è pronto.You can prepare a new container with all of your updates, set up the container for production, and just point to the new container once it's ready. Puoi anche archiviare versioni diverse dell'app usando i contenitori e mantenerle in esecuzione come fallback di sicurezza, se necessario.You can also archive different versions of your app using containers and keep them running as a safety fallback if needed.

Per altre informazioni, vedere Introduzione ai contenitori Docker in Microsoft Learn.To learn more, checkout the Introduction to Docker containers on Microsoft Learn.

PrerequisitiPrerequisites

Nota

WSL può eseguire le distribuzioni in modalità WSL versione 1 o WSL 2.WSL can run distributions in both WSL version 1 or WSL 2 mode. Per verificarlo, aprire PowerShell e immettere: wsl -l -v .You can check this by opening PowerShell and entering: wsl -l -v. Verificare che la distribuzione sia impostata per usare WSL 2 immettendo: wsl --set-version <distro> 2 .Ensure that the your distribution is set to use WSL 2 by entering: wsl --set-version <distro> 2. Sostituire <distro> con il nome della distribuzione (ad esempio, Ubuntu 18,04).Replace <distro> with the distro name (e.g. Ubuntu 18.04).

In WSL versione 1, a causa delle differenze fondamentali tra Windows e Linux, il motore Docker non può essere eseguito direttamente all'interno di WSL, quindi il team Docker ha sviluppato una soluzione alternativa usando macchine virtuali Hyper-V e LinuxKit.In WSL version 1, due to fundamental differences between Windows and Linux, the Docker Engine couldn't run directly inside WSL, so the Docker team developed an alternative solution using Hyper-V VMs and LinuxKit. Tuttavia, poiché WSL 2 viene ora eseguito in un kernel Linux con capacità di chiamata del sistema completa, Docker può essere eseguito completamente in WSL 2.However, since WSL 2 now runs on a Linux kernel with full system call capacity, Docker can fully run in WSL 2. Ciò significa che i contenitori Linux possono essere eseguiti in modalità nativa senza emulazione, ottenendo prestazioni e interoperabilità migliori tra gli strumenti di Windows e Linux.This means that Linux containers can run natively without emulation, resulting in better performance and interoperability between your Windows and Linux tools.

Installare Docker DesktopInstall 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 creare 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.With the WSL 2 backend supported in Docker Desktop for Windows, you can work in a Linux-based development environment and build Linux-based containers, while using Visual Studio Code for code editing and debugging, and running your container in the Microsoft Edge browser on Windows.

Per installare Docker (dopo aver già installato WSL 2):To install Docker (after already installing WSL 2):

  1. Scaricare Docker desktop e seguire le istruzioni di installazione.Download Docker Desktop and follow the installation instructions.

  2. Una volta installato, avviare Docker desktop dal menu Start di Windows, quindi selezionare l'icona Docker dal menu icone nascoste della barra delle applicazioni.Once installed, start Docker Desktop from the Windows Start menu, then select the Docker icon from the hidden icons menu of your taskbar. Fare clic con il pulsante destro del mouse sull'icona per visualizzare il menu comandi di Docker e selezionare "Impostazioni".Right-click the icon to display the Docker commands menu and select "Settings". Icona del dashboard di Docker desktopDocker Desktop dashboard icon

  3. Verificare che l'opzione "usa il motore basato su WSL 2" sia selezionata in Impostazioni > generali.Ensure that "Use the WSL 2 based engine" is checked in Settings > General. Impostazioni generali di Docker desktopDocker Desktop general settings

  4. Selezionare tra le distribuzioni WSL 2 installate per le quali si vuole abilitare l'integrazione con Docker in, passare a Impostazioni > risorse > WSL integrazione.Select from your installed WSL 2 distributions which you want to enable Docker integration on by going to: Settings > Resources > WSL Integration. Impostazioni delle risorse di Docker desktopDocker Desktop resource settings

  5. Per confermare che Docker è stato installato, aprire una distribuzione di WSL (ad esempio Ubuntu) e visualizzare la versione e il numero di build immettendo: docker --versionTo confirm that Docker has been installed, open a WSL distribution (e.g. Ubuntu) and display the version and build number by entering: docker --version

  6. Verificare che l'installazione funzioni correttamente eseguendo una semplice immagine Docker incorporata usando: docker run hello-worldTest that your installation works correctly by running a simple built-in Docker image using: docker run hello-world

Suggerimento

Ecco alcuni comandi di Docker utili da tenere presente:Here are a few helpful Docker commands to know:

  • Elenca i comandi disponibili nell'interfaccia della riga di comando di Docker immettendo: dockerList the commands available in the Docker CLI by entering: docker
  • Elenca le informazioni per un comando specifico con: docker <COMMAND> --helpList information for a specific command with: docker <COMMAND> --help
  • Elenca le immagini Docker nel computer (che è solo l'immagine hello-world a questo punto) con: docker image ls --allList the docker images on your machine (which is just the hello-world image at this point), with: docker image ls --all
  • Elencare i contenitori nel computer, con: docker container ls --all o docker ps -a (senza il flag-a Show all, verranno visualizzati solo i contenitori in esecuzione)List the containers on your machine, with: docker container ls --all or docker ps -a (without the -a show all flag, only running containers will be displayed)
  • Elenca le informazioni a livello di sistema relative all'installazione di Docker, incluse le statistiche e le risorse (CPU & memoria) disponibili nel contesto WSL 2, con: docker infoList system-wide information regarding the Docker installation, including statistics and resources (CPU & memory) available to you in the WSL 2 context, with: docker info

Sviluppare in contenitori remoti usando VS CodeDevelop in remote containers using VS Code

Per iniziare a sviluppare app con Docker con WSL 2, è consigliabile usare VS Code, oltre all'estensione WSL remota e all'estensione docker.To get started developing apps using Docker with WSL 2, we recommend using VS Code, along with the Remote-WSL extension and Docker extension.

  • Installare il vs code estensione Remote-WSL.Install the VS Code Remote-WSL extension. 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 sfide tra sistemi operativi).This extension enables you to open your Linux project running on WSL in VS Code (no need to worry about pathing issues, binary compatibility, or other cross-OS challenges).

  • Installare l'estensione di Visual Studio code Remote-Containers.Install the VS code Remote-Containers extension. Questa estensione consente di aprire la cartella o il repository del progetto all'interno di un contenitore, sfruttando il set di funzionalità completo Visual Studio Code per eseguire il lavoro di sviluppo all'interno del contenitore.This extension enables you to open your project folder or repo inside of a container, taking advantage of Visual Studio Code's full feature set to do your development work within the container.

  • Installare l'estensione docker vs code.Install the VS Code Docker extension. Questa estensione aggiunge la funzionalità per la creazione, la gestione e la distribuzione di applicazioni in contenitori dall'interno VS Code.This extension adds the functionality to build, manage, and deploy containerized applications from inside VS Code. Per usare effettivamente il contenitore come ambiente di sviluppo, è necessaria l'estensione Remote-Container.(You need the Remote-Container extension to actually use the container as your dev environment.)

Usare Docker per creare un contenitore di sviluppo per un progetto di app esistente.Let's use Docker to create a development container for an existing app project.

  1. Per questo esempio verrà usato il codice sorgente dell' esercitazione Hello World per Django nell'ambiente di sviluppo Python configurare docs. È possibile ignorare questo passaggio se si preferisce usare il proprio codice sorgente del progetto.For this example, I'll use the source code from my Hello World tutorial for Django in the Python development environment set up docs. You can skip this step if you prefer to use your own project source code. Per scaricare l'app Web HelloWorld-Django da GitHub, aprire un terminale WSL (Ubuntu, ad esempio) e immettere: git clone https://github.com/mattwojo/helloworld-django.gitTo download my HelloWorld-Django web app from GitHub, open a WSL terminal (Ubuntu for example) and enter: git clone https://github.com/mattwojo/helloworld-django.git

    Nota

    Archiviare sempre il codice nello stesso file system in cui si stanno usando gli strumenti di.Always store your code in the same file system that you're using tools in. Questo comporterà prestazioni di accesso ai file più rapide.This will result in faster file access performance. In questo esempio si usa una distribuzione Linux (Ubuntu) e si vogliono archiviare i file di progetto nella file system WSL \\wsl\ .In this example, we are using a Linux distro (Ubuntu) and want to store our project files on the WSL file system \\wsl\. L'archiviazione dei file di progetto nel file system di Windows potrebbe rallentare significativamente le attività quando si usano gli strumenti Linux in WSL per accedere a tali file.Storing project files on the Windows file system would significantly slow things down when using Linux tools in WSL to access those files.

  2. Dal terminale WSL passare alla cartella del codice sorgente per il progetto:From your WSL terminal, change directories to the source code folder for this project:

    cd helloworld-django
    
  3. Aprire il progetto in VS Code in esecuzione nel server di estensione locale Remote-WSL immettendo:Open the project in VS Code running on the local Remote-WSL extension server by entering:

    code .
    

    Verificare di essere connessi alla distribuzione di WSL Linux selezionando l'indicatore remoto verde nell'angolo inferiore sinistro dell'istanza di VS Code.Confirm that you are connected to your WSL Linux distro by checking the green remote indicator in the bottom-left corner of your VS Code instance.

    Indicatore remoto VS Code WSL

  4. Dal comando VS Code tavolozza (CTRL + MAIUSC + P), immettere: Remote-Containers: Apri cartella nel contenitore... Se questo comando non viene visualizzato quando si inizia a digitarlo, verificare di avere installato l'estensione del contenitore remoto collegata sopra.From the VS Code command pallette (Ctrl + Shift + P), enter: Remote-Containers: Open Folder in Container... If this command doesn't display as you begin to type it, check to ensure that you've installed the Remote Container extension linked above.

    VS Code comando contenitore remoto

  5. Selezionare la cartella del progetto che si desidera distribuire.Select the project folder that you wish to containerize. Nel mio caso, questo è \\wsl\Ubuntu-20.04\home\mattwojo\repos\helloworld-django\In my case, this is \\wsl\Ubuntu-20.04\home\mattwojo\repos\helloworld-django\

    VS Code cartella contenitore remoto

  6. Verrà visualizzato un elenco di definizioni di contenitori, perché non è ancora presente alcuna configurazione di DevContainer nella cartella del progetto (repository).A list of container definitions will appear, since there is no DevContainer configuration in the project folder (repo) yet. L'elenco delle definizioni di configurazione del contenitore visualizzate viene filtrato in base al tipo di progetto.The list of container configuration definitions that appears is filtered based on your project type. Per il progetto Django, seleziono Python 3.For my Django project, I'll select Python 3.

    VS Code definizioni di configurazione del contenitore remoto

  7. Viene aperta una nuova istanza di VS Code, inizia a compilare la nuova immagine e, al termine della compilazione, avvierà il contenitore.A new instance of VS Code will open, begin building our new image, and once the build completed, will start our container. Si noterà che è stata visualizzata una nuova .devcontainer cartella con le informazioni di configurazione del contenitore all'interno di un Dockerfile devcontainer.json file e.You will see that a new .devcontainer folder has appeared with container configuration information inside a Dockerfile and devcontainer.json file.

    Cartella VS Code. devcontainer

  8. Per verificare che il progetto sia ancora connesso sia a WSL che all'interno di un contenitore, aprire il VS Code terminale integrato (CTRL + MAIUSC + ~).To confirm that your project is still connected to both WSL and within a container, open the VS Code integrated terminal (Ctrl + Shift + ~). Controllare il sistema operativo immettendo: uname e la versione di Python con: python3 --version .Check the operating system by entering: uname and the Python version with: python3 --version. Si può notare che l'uname è stato restituito 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 essere diversa dalla versione di Python installata nella distribuzione di WSL.You can see that the uname came back as "Linux", so you are still connected to the WSL 2 engine, and Python version number will be based on the container config that may differ from the Python version installed on your WSL distribution.

  9. Per eseguire ed eseguire il debug dell'app all'interno del contenitore usando Visual Studio Code, aprire innanzitutto il menu Run (CTRL + MAIUSC + D o selezionare la scheda nella barra dei menu a sinistra).To run and debug your app inside of the container using Visual Studio Code, first open the Run menu (Ctrl+Shift+D or select the tab on the far left menu bar). Selezionare quindi Esegui e debug per selezionare una configurazione di debug e scegliere la configurazione più adatta al progetto (nell'esempio, questo sarà "Django").Then select Run and Debug to select a debug configuration and choose the configuration that best suites your project (in my example, this will be "Django"). Verrà creato un launch.json file nella .vscode cartella del progetto con le istruzioni su come eseguire l'app.This will create a launch.json file in the .vscode folder of your project with instructions on how to run your app.

    VS Code eseguire la configurazione di debug

  10. Dall'interno vs Code selezionare Esegui > Avvia debug (oppure premere il tasto F5 ).From inside VS Code, select Run > Start debugging (or just press the F5 key). Verrà aperto un terminale all'interno VS Code e verrà visualizzato un risultato simile al seguente: "avvio del server di sviluppo in http://127.0.0.1:8000/ uscita dal server con Control-C".This will open a terminal inside VS Code and you should see a result saying something like: "Starting development server at http://127.0.0.1:8000/ Quit the server with CONTROL-C." Tener premuto il tasto 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.Hold down the Control key and select the address displayed to open your app in your default web browser and see your project running inside of its container.

    VS Code l'esecuzione di un contenitore Docker

A questo punto è stato configurato un contenitore di sviluppo remoto con Docker desktop, basato sul back-end WSL 2, che è possibile codificare, compilare, eseguire, distribuire o eseguire il debug usando VS Code.You have now successfully configured a remote development container using Docker Desktop, powered by the WSL 2 backend, that you can code in, build, run, deploy, or debug using VS Code!

Risoluzione dei problemiTroubleshooting

Contesto Docker WSL deprecatoWSL docker context deprecated

Se si usa un'anteprima tecnica iniziale di Docker per WSL, è possibile che si disponga di un contesto Docker denominato "WSL" che è ora deprecato e non è più usato.If you were using an early Tech Preview of Docker for WSL, you may have a Docker context called "wsl" that is now deprecated and no longer used. È possibile verificare con il comando: docker context ls .You can check with the command: docker context ls. È possibile rimuovere questo contesto "WSL" per evitare errori con il comando: docker context rm wsl perché si vuole usare il contesto predefinito sia per Windows che per WSL2.You can remove this "wsl" context to avoid errors with the command: docker context rm wsl as you want to use the default context for both Windows and WSL2.

Possibili errori che potrebbero verificarsi con il 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.Possible errors you might encounter with this deprecated wsl context include: docker wsl open //./pipe/docker_wsl: The system cannot find the file specified. or 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 ulteriori informazioni su questo problema, vedere How to set up Docker with Windows System for Linux (WSL2) in Windows 10.For more on this issue, see How to set up Docker within Windows System for Linux (WSL2) on Windows 10.

Problemi durante la ricerca della cartella di archiviazione delle immagini DockerTrouble finding docker image storage folder

Docker crea due cartelle di distribuzione per archiviare i dati:Docker creates two distro folders to store data:

  • \WSL $ \docker-desktop\wsl$\docker-desktop
  • \WSL $ \docker-desktop-data\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.You can find these folders by opening your WSL Linux distribution and entering: explorer.exe . to view the folder in Windows File Explorer. Immettere: \\wsl\<distro name>\mnt\wsl sostituendo <distro name> con il nome della distribuzione (ad esempio, Ubuntu-20,04) per visualizzare queste cartelle.Enter: \\wsl\<distro name>\mnt\wsl replacing <distro name> with the name of your distribution (ie. Ubuntu-20.04) to see these folders.

Per altre informazioni sull'individuazione dei percorsi di archiviazione Docker in WSL, vedere questo problema dal repository WSL o da questo post di StackOverlow.Find more on locating docker storage locations in WSL, see this issue from the WSL repo or this StackOverlow post.

Per ulteriori informazioni sulla risoluzione dei problemi generali in WSL, vedere la documentazione relativa alla risoluzione dei problemi.For more help with general troubleshooting issues in WSL, see the Troubleshooting doc.

Risorse aggiuntiveAdditional resources