Linux Container

THIAGO LEAL DAMÁSIO MACHADO
Engenharia de Computação e Informação

Resumo

O objetivo deste trabalho é apresentar ao leitor como funciona o Linux Container (LXC) e suas aplicações, buscando compará-lo com outras opções disponíveis no mercado.

O que é LXC?

O Linux Container (LXC) é um projeto criado por engenheiros da IBM em 2008 e atualmente mantido pela Canonical. Consiste de uma interface para gerenciamento de containers que tem como base o mesmo Kernel Linux. Esta interface oferece uma variedade de ferramentas e uma poderosa API que tornam simples o controle de containers para usuários de Linux. [6]


Para um melhor entendimento das funcionalidades do LCX é necessário entender a definição de container. Um container do LXC é basicamente uma virtualização a nível de sistema operacional, isto significa que o kernel do sistema operacional permite que múltiplos processos executem isoladamente na mesma máquina. [7]

O principal objetivo do LXC é criar vários ambientes Linux sem precisar utlizar diferentes kernels de modo a ser mais eficiente do que uma máquina virtual.[6]

Como funciona?

O LXC permite a criação de containers utilizando algumas funcionalidades do kernel do linux como namespaces, cgroups, chroot, SELinux e apparmor.[6]


A figura II mostra que as três aplicações (APP 1, APP 2 e APP 3) executam isoladas em containers no sistema operacional. Este isolamento se dá por conta da funcionalidade namespaces do kernel do Linux. [7] Os namespaces funcionam envolvendo as configurações globais do sistema em um ambiente que faz parecer para um processo que ele está sendo executado somente com processos do mesmo ambiente.[8]

Ainda para garantir o isolamento de cada aplicação, o LXC usa o chroot. Este comando altera o diretório de root de um processo e de seus filhos, garantindo assim que ele não possa acessar arquivos de fora deste diretório.[8]

Porém somente o uso dos namespaces pode fazer com que um container isolado utilize todos os recursos da máquina, para que isto não ocorra a funcionalidade do cgroups é utlizada. [7] O cgroups é uma funcionalidade do Linux que permite que os processos sejam organizados em grupos hieraquicamente, de acordo com o tipo de recurso da máquina que eles utilizam, assim estes recursos podem ser monitorados e limitados para cada grupo.[8]

O linux containers também faz uso do SELinux (Security Enhanced Linux), esta ferramenta verifica em cada chamada do sistema se a aplicação está autorizada a realizar uma determinada operação. Basicamente, as restrições são aplicadas de acordo com o usuário e o domínio que executou cada aplicação. Juntamente com o apparmor, cuja função é aplicar restrições a uma determinada aplicação independete do usuário que a executou, o LXC consegue garantir que cada container vai seguir as configurações de uso de recursos aplicadas.[8]

Como usar?

Esta seção tem como objetivo mostar um passo a passo para criar um container utilizando o LXC, indo desde a instalação até alguns comandos básicos.[6]

As principais distribuições de Linux, como Debian, Fedora, Arch e Ubuntu, possuem o LXC em seus repositórios padrões. Assim a Instalação pode ser executada de forma simples pelo terminal, como por exemplo, usando o seguinte comando no Debian ou Ubuntu: Ao final da instalação os comandos do LXC e templates estaram disponíveis.

Com o LXC instalado já se pode criar containers, o mais indicado é criar containers sem privilégios como um usuário padrão (não root). Use o seguinte comando para criar um container: Uma lista de templates será exibida e você deve escolher o que mais lhe agradar. Os templates permitem que você crie um container com uma imagem de algum sistema operacional Linux, como Ubuntu por exemplo.

Pouco tempo depois seu container será criado e você pode iniciá-lo com:

Para checar o status use:

Com o seguinte comando é possível abrir uma linha de comando dentro do container:

O container pode ser parado com: Da próxima vez que for iniciado todas as configurações serão mantidas.

E para destruir o container: Ao ser destruído todos os arquivos e configurações dentro do container são perdidos.

Comparativo

Como dito anteriormente, uma das ideias por trás do LXC é montar uma estrutura de virtualização que seja mais eficiente que máquinas virtuais. Essa eficiência se mostra através de uma estrutura que permite uma maior escalabilidade e melhor uso dos recursos da máquina hospedeira.[1]


A figura III mostra um comparativo entre as estruturas de virtualização. Do lado esquerdo temos um diagrama de máquinas virtuais sendo gerenciadas por um Hypervisor, nessa estrutura existe uma simulação do hardware para cada GuestOS (sistema operacional), o Hypervisor fica encarregado de gerenciar cada instância de sistema operacional virtualizado. A principal desvantagem disso é que manter diversos sistemas operacionais em execução é muito custoso para o hospedeiro sendo díficil ter uma grande escalabilidade.[2]

Do lado direito temos o mesmo diagrama da figura II que mostra a estrutura de uma virtualização com containers. Cada aplicação executa em um contexto isolado usando o kernel do sistema operacional do hospedeiro. A pesar de ser uma solução mais leve e que permite uma escalabilidade maior, o LXC posssui a desvantagem de não poder executar, de forma trivial, uma aplicação para um sistema operacional específico que não seja linux, como por exemplo Windows.[2]

O LXC deixou de ser a opção mais popular de virtualização de containers com o lançamento do Docker em 2013. O Docker implementa quase algumas funcionalidades do LXC com o adicional de ter uma camada de abstração que permite o uso de imagens. As imagens são scripts que dizem todas as configurações que um container deve ter, assim é possível utilizar uma arquitetura de microsserviços na qual cada container representa um serviço. Além disso o Docker pode ser usado em várias plataformas (Windows, Mac, Linux) e ao contrário do LXC não é totalmente gratuíto.[5]


Conclusão

O LXC permite não apenas que aplicações executem em contexto isolado, mas também que containers sejam criados como máquinas bastante leves (com um boot mais rápido e menor consumo de RAM). No entanto pode não ser o ideal se a finalidade for aplicações que necessitem de um sistema operacional como Windows, nesse caso pode ser mais interessante o uso de uma máquina virtual.

No comparativo com o Docker, também fica claro que a pesar das funcionalidades parecidas Docker e LXC possuem propósitos distintos. O LXC oferece uma opção de virtualizção completa do sistema operacional e o Docker oferece uma virtualização de aplicações, no LXC cada container pode ser uma máquina e no Docker cada container é uma aplicação ou serviço.

Perguntas

  1. O que é um container?
    Um container é uma virtualização a nível de sistema operacional, isto significa que o kernel do sistema operacional permite que múltiplos processos executem isoladamente na mesma máquina.
  2. Qual a função dos namespaces?
    Os namespaces são responsáveis por garantir que processos de ambientes diferentes executem de forma isolada.
  3. Como o LXC garante que os recursos do hospedeiro não são exauridos por um único namespace?
    Através dos cgroups.
  4. Qual a principal vantagem do LXC sobre máquinas virtuais?
    O LXC cria máquinas virtuais que compartilham o mesmo kernel sendo assim mais leves e rápidas que as máquinas virtuais tradicionais.
  5. Qual a diferença entre Docker e Linux Container?
    No LXC cada container pode ser uma máquina e no Docker cada container é uma aplicação ou serviço.

Referências Bibliográficas

  1. Scheepers, Mathijs Jeroen. Virtualization and Containerization of Application Infrastructure: A Comparison. University of Twente P.O. Box 217, 7500AE Enschede. The Netherlands.
  2. Miguel G. Xavier, Marcelo V. Neves, and Fabio D. Rossi. Performance evaluation of container-based virtualization for high performance computing environments. In 2013 21st Euromicro International Conference on Paral-lel, Distributed, and Network-Based Processing, 13431803, pages 233–240, Belfast, UK, 2013. IEEE.
  3. Il-Young Moon Oh-Young Kwon Byeong-Jun Kim Kyoung-Taek Seo, Hyun-Seo Hwang. Performance comparison analysis of linux container and virtual machine for building cloud. Advanced Science and Technology Letters, volume 66: pages 105–111, 2013.
  4. Ann Mary Joy. Performance comparison between linux containers and virtual machines. In 2015 International Conference on Advances in Computer Engineering and Applications, 15309964, pages 98–102, Ghaziabad, India, 2015. IEEE.
  5. David Bernstein. Containers and cloud: From lxc to docker to kubernetes. IEEE Cloud Computing, 1(3):81–84, 2014.
  6. Linux Containers introduction. Acessado em: 24/08/2017 às 23:20.
  7. Gomes, Rafael. Docker para desenvolvedores. Salvador, Bravos, 2017.
  8. Linux Manual. Acessado em: 30/10/2017 às 19:36.

Imagens

  1. Reproduzido de Canonical. Acessado em: 03/11/2017 às 20:25.
  2. Reproduzido de Entenda o que é o LXC. Acessado em: 30/08/2017 às 23:20.
  3. Reproduzido de LXC vs Docker. Acessado em: 03/11/2017 às 22:09.

Contato

Este trabalho foi versionado usando git, sinta-se livre para comentar sobre o artigo na página do github.