Windows e i contenitoriWindows and containers

I contenitori sono una tecnologia per la creazione di pacchetti e l'esecuzione di applicazioni di Windows e Linux in ambienti di diverso tipo, in locale e nel cloud.Containers are a technology for packaging and running Windows and Linux applications across diverse environments on-premises and in the cloud. Questa tecnologia offre un ambiente semplice e isolato che semplifica lo sviluppo, la distribuzione e la gestione delle app.Containers provide a lightweight, isolated environment that makes apps easier to develop, deploy, and manage. Grazie alla rapidità di avvio e arresto, i contenitori rappresentano la soluzione ideale per le app che devono adattarsi rapidamente alle continue variazioni della domanda.Containers start and stop quickly, making them ideal for apps that need to rapidly adapt to changing demand. La semplicità dei contenitori fa di loro anche un utile strumento per aumentare la densità e l'utilizzo dell'infrastruttura.The lightweight nature of containers also make them a useful tool for increasing the density and utilization of your infrastructure.

Immagine che illustra come i contenitori possono essere eseguiti nel cloud o in locale per il supporto di app monolitiche o microservizi scritti in quasi tutti i linguaggi.

Per visualizzare una roadmap delle funzionalità pianificate e attualmente disponibili, vedere la roadmap dei contenitori di Windows Server.To view a roadmap of planned and currently available features, see the Windows Server containers roadmap.

Ecosistema dei contenitori MicrosoftThe Microsoft container ecosystem

Microsoft offre una serie di strumenti e piattaforme che facilitano lo sviluppo e la distribuzione di app nei contenitori consentendoti di effettuare queste operazioni:Microsoft provides a number of tools and platforms to help you develop and deploy apps in containers:

  • Eseguire contenitori basati su Windows o Linux in Windows 10 per lo sviluppo e il testing usando Docker Desktop, che sfrutta la funzionalità di gestione dei contenitori integrata in Windows.Run Windows-based or Linux-based containers on Windows 10 for development and testing using Docker Desktop, which makes use of containers functionality built-in to Windows. Puoi anche eseguire contenitori in modalità nativa in Windows Server.You can also run containers natively on Windows Server.

  • Sviluppare, testare, pubblicare e distribuire contenitori basati su Windows usando il potente supporto per contenitori in Visual Studio e Visual Studio Code, incluso il supporto per Docker, Docker Compose, Kubernetes, Helm e altre tecnologie utili.Develop, test, publish, and deploy Windows-based containers using the powerful container support in Visual Studio and Visual Studio Code, which include support for Docker, Docker Compose, Kubernetes, Helm, and other useful technologies.

  • Pubblicare le app come immagini di contenitore sull'hub Docker pubblico, per consentire ad altri utenti di usarle, oppure su un Registro Azure Container privato per svilupparle e distribuirle all'interno dell'organizzazione, eseguendone il push e il pull direttamente da Visual Studio e Visual Studio Code.Publish your apps as container images to the public DockerHub for others to use, or to a private Azure Container Registry for your org's own development and deployment, pushing and pulling directly from within Visual Studio and Visual Studio Code.

  • Distribuire i contenitori su larga scala in Azure o in altri cloud:Deploy containers at scale on Azure or other clouds:

    • Eseguire il pull dell'app (immagine del contenitore) da un registro contenitori, ad esempio Registro Azure Container, e quindi distribuirla e gestirla su larga scala usando un agente di orchestrazione, ad esempio Servizio Azure Kubernetes (AKS) o Azure Service Fabric.Pull your app (container image) from a container registry, such as the Azure Container Registry, and then deploy and manage it at scale using an orchestrator such as Azure Kubernetes Service (AKS) or Azure Service Fabric.
    • Servizio Azure Kubernetes distribuisce i contenitori nelle macchine virtuali di Azure e li gestisce su larga scala, indipendentemente dal numero, che può variare da decine a migliaia.Azure Kubernetes Service deploys containers to Azure virtual machines and manages them at scale, whether that's dozens of containers, hundreds, or even thousands. Le macchine virtuali di Azure eseguono un'immagine personalizzata di Windows Server (se distribuisci un'app basata su Windows) o un'immagine personalizzata di Ubuntu Linux (se distribuisci un'app basata su Linux).The Azure virtual machines run either a customized Windows Server image (if you're deploying a Windows-based app), or a customized Ubuntu Linux image (if you're deploying a Linux-based app).
  • Distribuire i contenitori in locale usando Azure Stack con il motore AKS (in anteprima con i contenitori di Linux) o Azure Stack con OpenShift.Deploy containers on-premises by using Azure Stack with the AKS Engine (in preview with Linux containers) or Azure Stack with OpenShift. Puoi anche configurare direttamente Kubernetes su Windows Server (vedi Kubernetes in Windows). Microsoft sta inoltre lavorando al supporto per l'esecuzione di contenitori di Windows su RedHat OpenShift Container Platform.You can also set up Kubernetes yourself on Windows Server (see Kubernetes on Windows), and we're working on support for running Windows containers on RedHat OpenShift Container Platform as well.

Come funzionano i contenitoriHow containers work

Un contenitore è un silo isolato e leggero per l'esecuzione di un'applicazione sul sistema operativo host.A container is an isolated, lightweight silo for running an application on the host operating system. I contenitori si basano sul kernel del sistema operativo host, che può essere considerato come l'insieme di tubature nascoste del sistema operativo, come illustrato in questo diagramma.Containers build on top of the host operating system's kernel (which can be thought of as the buried plumbing of the operating system), as shown in this diagram.

Diagramma dell'architettura che mostra la modalità di esecuzione dei contenitori sopra il kernel

Un contenitore non ha accesso illimitato al kernel del sistema operativo host, anche se lo condivide.While a container shares the host operating system's kernel, the container doesn't get unfettered access to it. Il contenitore ottiene in realtà una visualizzazione isolata (e in alcuni casi virtualizzata) del sistema.Instead, the container gets an isolated–and in some cases virtualized–view of the system. Un contenitore può ad esempio accedere a una versione virtualizzata del file system e del Registro di sistema, ma le modifiche interessano solo il contenitore e vengono ignorate quando questo si arresta.For example, a container can access a virtualized version of the file system and registry, but any changes affect only the container and are discarded when it stops. Per salvare i dati, il contenitore può montare una risorsa di archiviazione permanente, ad esempio un disco di Azure o una condivisione file (incluso File di Azure).To save data, the container can mount persistent storage such as an Azure Disk or a file share (including Azure Files).

Un contenitore si basa sul kernel, ma quest'ultimo non fornisce tutte le API e i servizi necessari per l'esecuzione di un'app. La maggior parte di essi viene fornita dai file di sistema (librerie) eseguiti al di sopra del kernel in modalità utente.A container builds on top of the kernel, but the kernel doesn't provide all of the APIs and services an app needs to run–most of these are provided by system files (libraries) that run above the kernel in user mode. Poiché è isolato dall'ambiente in modalità utente dell'host, il contenitore necessita di una propria copia di questi file di sistema, che vengono inseriti in un pacchetto noto come immagine di base.Because a container is isolated from the host's user mode environment, the container needs its own copy of these user mode system files, which are packaged into something known as a base image. Questa immagine viene usata come livello di base su cui viene creato il contenitore e offre i servizi del sistema operativo non forniti dal kernel.The base image serves as the foundational layer upon which your container is built, providing it with operating system services not provided by the kernel. Informazioni più dettagliate sulle immagini di contenitore sono riportate più avanti.But we'll talk more about container images later.

Confronto tra contenitori e macchine virtualiContainers vs. virtual machines

A differenza di un contenitore, una macchina virtuale esegue un sistema operativo completo, incluso il relativo kernel, come illustrato in questo diagramma.In contrast to a container, a virtual machine (VMs) runs a complete operating system–including its own kernel–as shown in this diagram.

Diagramma dell'architettura che mostra come le macchine virtuali eseguono un sistema operativo completo accanto al sistema operativo host

I contenitori e le macchine virtuali hanno ciascuno un uso specifico. Molte distribuzioni di contenitori usano infatti macchine virtuali come sistema operativo host anziché essere eseguite direttamente sull'hardware, soprattutto nel caso di contenitori nel cloud.Containers and virtual machines each have their uses–in fact, many deployments of containers use virtual machines as the host operating system rather than running directly on the hardware, especially when running containers in the cloud.

Per altre informazioni sulle analogie e sulle differenze di queste tecnologie complementari, vedi Confronto tra contenitori e macchine virtuali.For more details on the similarities and differences of these complementary technologies, see Containers vs. virtual machines.

Immagini contenitoreContainer images

Tutti i contenitori vengono creati a partire da specifiche immagini.All containers are created from container images. Le immagini di contenitore sono costituite da un'aggregazione di file organizzati in uno stack di livelli che si trovano nel computer locale o in un registro contenitori remoto.Container images are a bundle of files organized into a stack of layers that reside on your local machine or in a remote container registry. Un'immagine di contenitore è costituita dai file del sistema operativo in modalità utente necessari per supportare l'app, i runtime o le dipendenze dell'app e qualsiasi altro file di configurazione necessario per la corretta esecuzione dell'app.The container image consists of the user mode operating system files needed to support your app, your app, any runtimes or dependencies of your app, and any other miscellaneous configuration file your app needs to run properly.

Microsoft offre diverse immagini, denominate immagini di base, che puoi usare come punto di partenza per creare un'immagine di contenitore personalizzata:Microsoft offers several images (called base images) that you can use as a starting point to build your own container image:

  • Windows: l'immagine che contiene il set completo di API e servizi di sistema Windows (esclusi i ruoli del server).Windows - contains the full set of Windows APIs and system services (minus server roles).
  • Windows Server Core: un'immagine più piccola che contiene un subset delle API di Windows Server, ovvero la versione completa di .NET Framework.Windows Server Core - a smaller image that contains a subset of the Windows Server APIs–namely the full .NET framework. Include anche la maggior parte dei ruoli del server anche se, purtroppo per alcuni, è escluso Server fax.It also includes most server roles, though sadly to few, not Fax Server.
  • Nano server: l'immagine più piccola di Windows Server, con supporto per le API di .NET Core e alcuni ruoli del server.Nano Server - the smallest Windows Server image, with support for the .NET Core APIs and some server roles.
  • Windows 10 IoT Core: una versione di Windows usata dai produttori di hardware per i dispositivi di Internet delle cose che eseguono processori ARM o x86/x64.Windows 10 IoT Core - a version of Windows used by hardware manufacturers for small Internet of Things devices that run ARM or x86/x64 processors.

Come indicato in precedenza, le immagini di contenitore sono costituite da una serie di livelli.As mentioned earlier, container images are composed of a series of layers. Ogni livello contiene un set di file che, quando sovrapposti, rappresentano l'immagine del contenitore.Each layer contains a set of files that, when overlaid together, represent your container image. A causa della natura a più livelli dei contenitori, non è necessario definire sempre come destinazione un'immagine di base per creare un contenitore di Windows.Because of the layered nature of containers, you don't have to always target a base image to build a Windows container. In alternativa, è possibile usare un'altra immagine che contiene già il framework desiderato.Instead, you could target another image that already carries the framework you want. Il team di .NET, ad esempio, pubblica un'immagine .NET Core che contiene il runtime di .NET Core.For example, the .NET team publishes a .NET core image that carries the .NET core runtime. In questo modo, evita agli utenti la necessità di duplicare il processo di installazione di .NET Core, grazie alla possibilità di riutilizzare i livelli di questa immagine di contenitore.It saves users from needing to duplicate the process of installing .NET core–instead they can reuse the layers of this container image. L'immagine di .NET Core è di per sé basata su Nano Server.The .NET core image itself is built based upon Nano Server.

Per informazioni dettagliate, vedi Immagini di base dei contenitori.For more details, see Container Base Images.

Utenti dei contenitoriContainer users

Contenitori per gli sviluppatoriContainers for developers

I contenitori consentono agli sviluppatori di creare e distribuire più velocemente app di qualità superiore.Containers help developers build and ship higher-quality apps, faster. Con i contenitori, gli sviluppatori possono creare un'immagine distribuibile in pochi secondi, in modo identico su più ambienti.With containers, developers can create a container image that deploys in seconds, identically across environments. I contenitori offrono un meccanismo semplice per condividere il codice tra i team e per avviare un ambiente di sviluppo senza alcun impatto sul file system host.Containers act as an easy mechanism to share code across teams and to bootstrap a development environment without impacting your host filesystem.

I contenitori sono portabili e versatili, possono eseguire app scritte in qualsiasi linguaggio e sono compatibili con qualsiasi computer che esegue Windows 10, versione 1607 o successiva, oppure Windows Server 2016 o versione successiva.Containers are portable and versatile, can run apps written in any language, and they're compatible with any machine running Windows 10, version 1607 or later, or Windows Server 2016 or later. Gli sviluppatori possono creare e testare un contenitore in locale sul proprio laptop o desktop e quindi distribuire la stessa immagine di contenitore nel cloud privato della propria azienda, in un cloud pubblico o a un provider di servizi.Developers can create and test a container locally on their laptop or desktop, and then deploy that same container image to their company's private cloud, public cloud, or service provider. La flessibilità naturale dei contenitori supporta i modelli di sviluppo delle nuove app negli ambienti cloud virtualizzati, su larga scala.The natural agility of containers supports modern app development patterns in large-scale, virtualized cloud environments.

Contenitori per i professionisti ITContainers for IT professionals

I contenitori consentono agli amministratori di creare un'infrastruttura più facile da aggiornare e gestire, in grado di sfruttare in modo ottimale le risorse hardware.Containers help admins create infrastructure that's easier to update and maintain, and that more fully utilizes hardware resources. I professionisti IT possono usare i contenitori per offrire ambienti standardizzati per i team di sviluppo, QA e produzione.IT professionals can use containers to provide standardized environments for their development, QA, and production teams. Usando i contenitori, gli amministratori di sistema eliminano le differenze nelle installazioni dei sistemi operativi e nell'infrastruttura sottostante.By using containers, systems administrators abstract away differences in operating system installations and the underlying infrastructure.

Orchestrazione dei contenitoriContainer orchestration

Gli agenti di orchestrazione costituiscono una parte essenziale dell'infrastruttura durante la configurazione di un ambiente basato su contenitori.Orchestrators are a critical piece of infrastructure when setting up a container-based environment. Anche se è possibile gestire alcuni contenitori manualmente con Docker e Windows, le app usano spesso cinque, dieci o persino centinaia di contenitori, ed è in questo caso che entrano in gioco gli agenti di orchestrazione.While you can manage a few containers manually using Docker and Windows, apps often make use of five, ten, or even hundreds of containers, which is where orchestrators come in.

Questi agenti sono stati creati per aiutare a gestire i contenitori su larga scala in fase di produzione.Container orchestrators were built to help manage containers at scale and in production. Gli agenti di orchestrazione offrono funzionalità per:Orchestrators provide functionality for:

  • Distribuzione su larga scalaDeploying at scale
  • Pianificazione del carico di lavoroWorkload scheduling
  • Monitoraggio condizioniHealth monitoring
  • Failover in caso di errore di un nodoFailing over when a node fails
  • Scalabilità delle prestazioniScaling up or down
  • Funzionalità di reteNetworking
  • Individuazione dei serviziService discovery
  • Coordinamento degli aggiornamenti di appCoordinating app upgrades
  • Affinità dei nodi del clusterCluster node affinity

Con i contenitori di Windows sono disponibili diversi agenti di orchestrazione. Ecco le opzioni offerte da Microsoft:There are many different orchestrators that you can use with Windows containers; here are the options Microsoft provides:

Provare i contenitori in WindowsTry containers on Windows

Per iniziare a usare i contenitori in Windows Server o Windows 10, vedi gli argomenti seguenti:To get started with containers on Windows Server or Windows 10, see the following:

Per informazioni su come decidere quali servizi di Azure sono adatti al proprio scenario, vedi Servizi contenitore di Azure e Scegliere i servizi di Azure da usare per ospitare un'applicazione.For help deciding which Azure services are right for your scenario, see Azure container services and Choosing what Azure services to use to host your application.