Containers LXC (Linux containers) com o LXD no CentOS 7

Share on:

Apresentando o LXC/LXD

Software livre sempre nos traz projetos maravilhosos. Há mais de 10 anos usando máquinas virtuais descobri muitos meses atrás as vantagens dos contêineres. Não pretendo aqui fazer uma análise de um ou de outro, cada um tem suas aplicações e vantagens.

O LXC nos traz uma versatilidade enorme ao podermos “fatiar” um sistema Linux em vários sistemas isolados bem rapidamente. Ele é um método de virtualização que roda no nível do sistema operacional e elimina a sobrecarga de rodar um kernel para cada sistema Linux, como é feito no caso da virtualização. Quer saber tudo sobre LXC? Veja aqui.

Já LXD é uma adição incrível ao LXC. O LXD roda sobre o LXC e traz uma versatilidade enorme ao gerenciamento dos contêineres. Ele é basicamente uma alternativa às ferramentas do LXC e um sistema de distribuição de templates pré-criados de várias distribuições Linux. Precisa de um CentOS 7 rapidinho? Sem problemas! Em segundos ele estará rodando e acessível graças ao LXC/LXD.

Hora de colocar tudo para funcionar

Feitas as apresentações vamos colocar a mão na massa (ou no terminal, se preferir :P). Para esta tarefa parti de um CentOS 7 minimal.

Primeiro, tenha certeza que seu Linux esteja atualizando rodando:

1yum update

Após isso vamos habilitar o repositório Epel e o Copr:

1yum install epel-release yum-plugin-copr -y

Agora prosseguimos com a instalação:

1yum copr enable ngompa/snapcore-el7
2yum install snapd

Precisamos ativar a inicialização automática do serviço

1systemctl enable --now snapd.socket

E habilitar alguns parâmetros na inicialização e argumento do kernel

1grubby --args="user_namespace.enable=1" --update-kernel="$(grubby --default-kernel)"
2grubby --args="namespace.unpriv_enable=1" --update-kernel="$(grubby --default-kernel)"
3sh -c 'echo "user.max_user_namespaces=3883" > /etc/sysctl.d/99-userns.conf'

Nesse ponto efetue um reboot do seu servidor Linux e após logar-se rode os comandos abaixo:

1snap search lxd
2snap install lxd
3ln -s /var/lib/snapd/snap /snap

Após o comando abaixo veja se o resultado é similar a imagem mostrada:

1snap list

Resultado do comando snap list

Inicie o daemon do LXD.

1systemctl start snap.lxd.daemon

Crie agora um grupo chamado lxd e se inclua nele. Aqui, caso não esteja executando como root e usando o sudo inclua seu usuário nesse novo grupo.

1newgrp lxd
2usermod -a -G lxd root
3id
4exit

Execute o comando abaixo e tenha certeza que nenhum erro é retornado, tendo a saída igual a mostrada na imagem:

1lxc list

Resultado do comando lxc list

Com tudo rodando ok, vamos inicializar o LXD e setar algumas configurações necessárias:

1lxd init

Resultado do comando lxc init

Em “Storage backend” escolhi LVM, mas você pode escolher btrfs ou dir, por exemplo. Mais detalhes sobre cada um nesse link.

Por fim, lance um novo contêiner com o comando

1lxc launch images:centos/7/amd64 centos-teste

Para acessar o terminal do contêiner:

1lxc exec centos-teste bash

O contêiner já “fala” pela bridge criada automaticamente pelo LXD com o mundo exterior, mas o mundo exterior não fala com o contêiner. Para isso é necessário criar regras de NAT no firewall do Linux, mas isso fica pra um outro artigo.