Virtualização leve e eficiente para ambientes Linux
Linux Containers (LXC) é uma tecnologia de virtualização em nível de sistema operacional que permite executar múltiplos sistemas Linux isolados (contêineres) em um único host Linux. Diferente das máquinas virtuais tradicionais, que emulam hardware completo, os contêineres LXC compartilham o kernel do sistema operacional host, resultando em menor sobrecarga e maior eficiência. Isso os torna ideais para ambientes de desenvolvimento, testes e até mesmo produção, onde a agilidade e o uso eficiente de recursos são cruciais.
Este guia detalhado abordará a instalação, configuração, criação e gerenciamento de contêineres LXC em sistemas Ubuntu, fornecendo as informações necessárias para que você possa começar a utilizar essa poderosa ferramenta de virtualização.
Documents LXCA instalação do LXC no Ubuntu é um processo direto, geralmente envolvendo o uso do gerenciador de pacotes apt
. É recomendável atualizar o sistema antes de iniciar a instalação para garantir que você tenha os pacotes mais recentes disponíveis.
Antes de instalar qualquer novo software, é uma boa prática atualizar a lista de pacotes e os pacotes existentes no seu sistema Ubuntu:
sudo apt update
sudo apt upgrade -y
Após a atualização do sistema, você pode instalar o LXC e suas dependências. O pacote principal é lxc
, mas também é útil instalar lxc-utils
para ferramentas adicionais de gerenciamento e lxd
para uma experiência mais moderna e gerenciada de contêineres, embora este guia se concentre principalmente no LXC puro.
sudo apt install lxc lxc-utils -y
Para confirmar que o LXC foi instalado corretamente, você pode verificar a versão do LXC ou listar os contêineres (inicialmente, não haverá nenhum):
lxc-checkconfig
lxc-ls --fancy
O comando lxc-checkconfig
verificará se o kernel do seu sistema está configurado para suportar LXC, exibindo enabled
para os recursos necessários. Se algum recurso estiver desabilitado, pode ser necessário atualizar o kernel ou habilitar módulos específicos, embora em instalações modernas do Ubuntu isso raramente seja um problema.
Após a instalação, algumas configurações iniciais podem ser necessárias, especialmente se você planeja usar contêineres não privilegiados ou configurar redes mais complexas. Por padrão, o LXC pode ser usado com contêineres privilegiados, mas para maior segurança, contêineres não privilegiados são preferíveis.
O LXC pode configurar uma ponte de rede padrão para seus contêineres, permitindo que eles obtenham endereços IP e acessem a rede externa. Se você instalou o lxd
, ele geralmente lida com a configuração de rede automaticamente. Para LXC puro, você pode precisar configurar lxc-net
ou uma ponte manual.
Para verificar a configuração de rede padrão:
cat /etc/default/lxc-net
Se você deseja que usuários não-root criem e gerenciem contêineres, é necessário configurar subuid
e subgid
para mapeamento de IDs de usuário e grupo. Isso é crucial para a segurança de contêineres não privilegiados.
Para permitir que um usuário comum (não-root) crie e gerencie contêineres LXC não privilegiados, você precisa configurar o mapeamento de IDs de usuário e grupo. Adicione as seguintes linhas aos arquivos /etc/subuid
e /etc/subgid
para o seu usuário (substitua seu_usuario
pelo seu nome de usuário real):
echo "seu_usuario:100000:65536" | sudo tee -a /etc/subuid
echo "seu_usuario:100000:65536" | sudo tee -a /etc/subgid
Isso mapeia um intervalo de 65536 UIDs e GIDs começando em 100000 para o seu usuário dentro do contêiner. Após essas alterações, você precisará reiniciar o sistema ou fazer logout e login novamente para que as alterações entrem em vigor.
Com o LXC instalado e configurado, você pode começar a criar seus contêineres. O LXC utiliza modelos (templates) para criar contêineres baseados em diferentes distribuições Linux.
Você pode listar os modelos de contêineres disponíveis com o seguinte comando:
ls /usr/share/lxc/templates
Modelos comuns incluem lxc-ubuntu
, lxc-debian
, lxc-fedora
, etc.
Para criar um novo contêiner Ubuntu chamado meu-primeiro-container
, use o comando lxc-create
:
sudo lxc-create -t ubuntu -n meu-primeiro-container
Este comando baixará a imagem base do Ubuntu e configurará o contêiner. O processo pode levar alguns minutos, dependendo da sua conexão com a internet. Você pode especificar a versão do Ubuntu usando a opção -r
(release), por exemplo, -r focal
para Ubuntu 20.04 LTS.
Para criar um contêiner não privilegiado, você precisará usar o comando como seu usuário e especificar o diretório de armazenamento:
lxc-create -t ubuntu -n meu-container-nao-privilegiado
--dir ~/.local/share/lxc
Após a criação, o arquivo de configuração do contêiner estará localizado em /var/lib/lxc/meu-primeiro-container/config
(para contêineres privilegiados) ou ~/.local/share/lxc/meu-container-nao-privilegiado/config
(para contêineres não privilegiados). Você pode editar este arquivo para ajustar parâmetros como rede, recursos de CPU/memória, etc.
Por exemplo, para definir um hostname e configurar a rede para DHCP:
lxc.uts.name = meu-primeiro-container
lxc.net.0.type = veth
lxc.net.0.link = lxcbr0
lxc.net.0.flags = up
lxc.net.0.hwaddr = 00:16:3e:xx:xx:xx
O gerenciamento de contêineres LXC é feito através de uma série de comandos lxc-*
.
Para iniciar um contêiner:
sudo lxc-start -n meu-primeiro-container -d
A opção -d
inicia o contêiner em segundo plano (daemon).
Para ver o status de todos os contêineres:
sudo lxc-ls --fancy
Isso mostrará o nome, estado, endereço IP e outros detalhes dos seus contêineres.
Você pode acessar o console de um contêiner em execução usando lxc-attach
ou lxc-console
:
sudo lxc-attach -n meu-primeiro-container
Ou, para um console mais tradicional (útil para depuração de boot):
sudo lxc-console -n meu-primeiro-container
Para sair do lxc-console
, pressione Ctrl+a
seguido de q
.
Para parar um contêiner em execução:
sudo lxc-stop -n meu-primeiro-container
Para reiniciar um contêiner:
sudo lxc-stop -n meu-primeiro-container
&& sudo lxc-start -n meu-primeiro-container -d
Antes de deletar um contêiner, certifique-se de que ele esteja parado:
sudo lxc-stop -n meu-primeiro-container
sudo lxc-destroy -n meu-primeiro-container