A virtualização em nível de sistema operacional é um paradigma de virtualização de sistema operacional (SO) no qual o núcleo (kernel) permite a existência de múltiplas instâncias isoladas de espaço de usuário, chamadas de contêineres (LXC, Solaris Containers, AIX WPARs, HP-UX SRP Containers, Docker, Podman, Guix), zonas (Solaris Containers), servidores virtuais privados (OpenVZ), partições, ambientes virtuais (VEs), núcleos virtuais (DragonFly BSD) e jails (FreeBSD jail e chroot). Tais instâncias podem parecer computadores reais do ponto de vista dos programas executados nelas. Um programa de computador executado em um sistema operacional comum pode ver todos os recursos (dispositivos conectados, arquivos e pastas, compartilhamentos de rede, potência da CPU, capacidades de hardware quantificáveis) daquele computador. Programas executados dentro de um contêiner só podem ver o conteúdo do contêiner e os dispositivos atribuídos a ele.

Em sistemas operacionais Unix-like, esse recurso pode ser visto como uma implementação avançada do mecanismo padrão chroot, que altera a pasta raiz aparente para o processo atual em execução e seus filhos. Além dos mecanismos de isolamento, o núcleo frequentemente fornece recursos de gerenciamento de recursos para limitar o impacto das atividades de um contêiner em outros contêineres. Os contêineres Linux são todos baseados nos mecanismos de virtualização, isolamento e gerenciamento de recursos fornecidos pelo núcleo Linux, notadamente namespaces e cgroups.

Embora a palavra contêiner se refira mais comumente à virtualização em nível de SO, às vezes é usada para se referir a máquinas virtuais mais completas que operam em variados graus de concerto com o SO hospedeiro, como os contêineres Hyper-V da Microsoft. Para uma visão geral da virtualização desde 1960, consulte Cronologia das tecnologias de virtualização.

Operação Em sistemas operacionais comuns para computadores pessoais, um programa de computador pode ver (embora possa não ser capaz de acessar) todos os recursos do sistema. Eles incluem: Capacidades de hardware que podem ser empregadas, como a CPU e a conexão de rede Dados que podem ser lidos ou gravados, como arquivos, pastas e compartilhamentos de rede Periféricos conectados com os quais pode interagir, como webcam, impressora, scanner ou fax O sistema operacional pode permitir ou negar o acesso a tais recursos com base em qual programa os solicita e na conta de usuário no contexto em que é executado. O sistema operacional também pode ocultar esses recursos para que, quando o programa de computador os enumerar, eles não apareçam nos resultados da enumeração. No entanto, do ponto de vista da programação, o programa de computador interagiu com esses recursos e o sistema operacional gerenciou um ato de interação.

Com a virtualização em nível de sistema operacional, ou conteinerização, é possível executar programas dentro de contêineres, aos quais apenas partes desses recursos são alocadas. Um programa que espera ver o computador inteiro, uma vez executado dentro de um contêiner, pode ver apenas os recursos alocados e acredita que eles são tudo o que está disponível. Vários contêineres podem ser criados em cada sistema operacional, para cada um dos quais um subconjunto dos recursos do computador é alocado. Cada contêiner pode conter qualquer número de programas de computador. Esses programas podem ser executados simultaneamente ou separadamente e podem até interagir uns com os outros.

A conteinerização tem semelhanças com a virtualização de aplicativos: nesta última, apenas um programa de computador é colocado em um contêiner isolado e o isolamento se aplica apenas ao sistema de arquivos.

Usos A virtualização em nível de sistema operacional é comumente usada em ambientes de hospedagem virtual, onde é útil para alocar de forma segura recursos de hardware finitos entre um grande número de usuários que desconfiam mutuamente entre si. Os administradores de sistema também podem usá-la para consolidar o hardware do servidor, movendo serviços em hosts separados para contêineres em um único servidor.

A virtualização em nível de sistema operacional também pode ser usada para executar software criado para uma determinada distribuição Linux em outra distribuição; um exemplo é o Distrobox.

Outros cenários típicos incluem a separação de vários programas em contêineres distintos para melhor segurança, independência de hardware e recursos adicionais de gerenciamento de recursos. No entanto, a segurança aprimorada fornecida pelo uso de um mecanismo chroot não é perfeita. Implementações de virtualização em nível de sistema operacional capazes de migração ao vivo também podem ser usadas para balanceamento de carga dinâmico de contêineres entre nós em um cluster.

Sobrecarga A virtualização em nível de sistema operacional geralmente impõe menos sobrecarga do que a virtualização total porque os programas em partições virtuais de nível de SO usam a interface de chamada de sistema normal do sistema operacional e não precisam ser submetidos a emulação ou ser executados em uma máquina virtual intermediária, como é o caso da virtualização total (como VMware ESXi, QEMU ou Hyper-V) e da paravirtualização (como Xen ou User-mode Linux). Esta forma de virtualização também não requer suporte de hardware para um desempenho eficiente.

Flexibilidade A virtualização em nível de sistema operacional não é tão flexível quanto outras abordagens de virtualização, pois não pode hospedar um sistema operacional convidado diferente do hospedeiro, ou um núcleo convidado diferente. Por exemplo, com o Linux, diferentes distribuições funcionam bem, mas outros sistemas operacionais, como o Windows, não podem ser hospedados. Sistemas operacionais que usam sistemáticas de entrada variável estão sujeitos a limitações dentro da arquitetura virtualizada. Métodos de adaptação, incluindo análises de retransmissão de servidor em nuvem, mantêm o ambiente virtual de nível de SO dentro dessas aplicações.

O Solaris supera parcialmente a limitação descrita acima com seu recurso de branded zones, que fornece a capacidade de executar um ambiente dentro de um contêiner que emula uma versão mais antiga do Solaris 8 ou 9 em um host Solaris 10. "Linux branded zones" (referidas como zonas de marca "lx") também estão disponíveis em sistemas Solaris baseados em x86, fornecendo um espaço de usuário Linux completo e suporte para a execução de aplicativos Linux; além disso, o Solaris fornece utilitários necessários para instalar as distribuições Red Hat Enterprise Linux 3.x ou CentOS 3.x dentro de zonas "lx". No entanto, em 2010, as zonas de marca Linux foram removidas do Solaris; em 2014, elas foram reintroduzidas no Illumos, que é a bifurcação (fork) de código aberto do Solaris, suportando núcleos Linux de 32 bits.

Armazenamento Algumas implementações fornecem mecanismos de copy-on-write (CoW) em nível de arquivo. (Mais comumente, um sistema de arquivos padrão é compartilhado entre as partições, e aquelas partições que alteram os arquivos criam automaticamente suas próprias cópias.) Isso é mais fácil de fazer backup, mais eficiente em termos de espaço e mais simples de armazenar em cache do que os esquemas de copy-on-write em nível de bloco comuns em virtualizadores de sistema completo. Virtualizadores de sistema completo, no entanto, podem trabalhar com sistemas de arquivos não nativos e criar e reverter snapshots de todo o estado do sistema.

Implementações Implementações mantidas ativamente / em desenvolvimento

Mecanismo Sistemaoperacional Licença Iníciododesenvolvimento Recursos chroot A maioria dos sistemas UNIX-like Varia por sistema 1982 DockerLinux, Windows x64 macOS 2013 PodmanLinux, Windows, macOS, FreeBSD 2018 LXC Linux 2008 Apptainer (fork do Singularity) Linux 2015 OpenVZLinux 2005 VirtuozzoLinux, Windows 2000 Solaris Containers (Zones)illumos (OpenSolaris),Solaris,Proprietário 2004 (ZFS) Network virtualization and resource control (Crossbow) FAQ FreeBSD jailFreeBSD, DragonFly BSD 2000 (ZFS) vkernelDragonFly BSD 2006 WPARsAIX 2007 iCore Virtual AccountsWindows XP 2008 Sandboxie Windows 2004 systemd-nspawn Linux 2010 Turbo Windows 2012

Implementações históricas / defuntas

Mecanismo Sistemaoperacional Licença Ativamentedesenvolvidodesdeouentre Recursos Linux-VServer(contexto de segurança) Linux, Windows Server 2016 2001~2018 lmctfy Linux 2013~2015 sysjailOpenBSD, NetBSD 2006~2009 rkt (rocket) Linux 2014~2018

Ver também Computação sem servidor Hipervisor Hipervisor de armazenamento Linux cgroups Namespaces do Linux Open Container Initiative Orquestração de contêineres Virtualização de recursos virtuais

Notas

Referências

Categoria:Segurança em sistemas operacionais Categoria:Virtualização Categoria:Linux Categoria:Recursos do núcleo do Linux