Guia completo de como usar o LXC para iniciantes
O que é o LXC?
LXC (Linux Containers) é uma ferramenta poderosa para criação de containers, diferente do docker ele te dá mais possibilidades de configurações.
Suas imagens se parecem muito com uma VM, e isso pode te dar a possibilidade de instalar mais recursos dentro do container.
Ideal para cenários em que você tem poucos recursos, como mini pcs, placa single board.
Ele suporta as mais diversas arquiteturas, como x86, arm64, armhf, riscv64, entre outros.
O proxmox trás uma interface gráfica ao lxc, facilitando e muito o processo de criação e configuração, porém nesse tópico irei abordar usando apenas linhas de comando, para entendermos a fundo como funciona o lxc.
Instalação
A maioria das distribuições linux possui o LXC nativo nos seus gerenciadores de pacotes, bastando apenas executar o comando de instalação.
sudo apt update
sudo apt install lxc lxcfs apparmor-utils cgroup-tools
o lxcfs será usado para conseguimos limitar os recursos para cada container, ele não é obrigatório mas pode ajudar a limitar e monitorar os recursos que cada container está consumindo.
Rede
Ao instalar o lxc ele cria um serviço de rede nat virtual, esse serviço sobe automaticamente um servidor dhcp, um nat e um bloco de ip local.
Você pode criar um container em modo bridge para acessar diretamente sua interface de rede, o nat serve apenas para facilitar as configurações no caso de sistemas que não possui uma rede nat já existente.
O nome do serviço é lxc-net.
Você confere executando o comando.
systemctl status lxc-net
O script de inicalização da rede é /usr/libexec/lxc/lxc-net
.
Para sobreescrever as configurações você pode utilizar editar o arquivo /etc/default/lxc-net
.
Criando nosso primeiro container
Vamos criar um container de forma bem simples, bastando apenas executar o comando abaixo.
lxc-create -t download -n ubuntu
Esse comando irá perguntar qual imagem você gostaria de usar, nesse caso usaremos o Ubuntu na arquitetura amd64. Lembre-se de selecionar a arquitetura compatível com o seu sistema.

Após criamos o container vamos iniciar.
lxc-start ubuntu
Para acessar o container basta executar o seguinte comando.
lxc-attach ubuntu

Pronto, temos um container simples, o que podemos fazer com ele?
Entendendo o lxc.
Quando criamos um container, o lxc cria uma pasta com um gestor de arquivos próprio, ele contém todos os softwares instalados no contêineres, assim como as configurações.
Você pode configurar bastante coisa, como se estivesse numa vm mesmo.
Uma vantagem incrível do LXC se comparado ao Docker é a possibilidade de criar interfaces de rede virtual dentro do container, isso abre a possibilidade para configurar até mesmo um roteador interno.
VPN.
Para demonstrar algumas vantagens do lxc vou configurar uma vpn dentro dela, usando wireguard.
Caso queira saber mais sobre o wireguard temos uma publicação dedicado, https://linuxbasic.net/d/8-explicacao-resumida-como-funciona-o-wireguard

Instalando o openwrt.
Uma das possibilidade o lxc que eu mais gosto é de instalar um roteador. Você pode instalar o openwrt e configurar redes com VPN, NAT, VPC e por aí vai.
Tudo dentro do container, consumindo poucos recursos, e de forma bem eficiente.
Vamos iniciar o container openwrt
lxc-create -t download -n openwrt -- --dist openwrt --release 24.10 --arch amd64
lxc-start openwrt
lxc-ls --fancy

lxc-info openwrt

Vamos liberar o acesso no firewall do openwrt
lxc-attach openwrt
opkg update && opkg install nano
nano /etc/config/firewall
Adicione a seguinte config no final do arquivo
config rule
option name 'Allow-Remote-Wan'
list proto 'tcp'
option src 'wan'
option dest_port '22 80 443'
option target 'ACCEPT'

/etc/init.d/firewall restart
Acesse o ip local do lxc no navegador

Agora temos um roteador openwrt rodando e pronto para ser configurado.
Openwrt, passando interface de rede wifi
Você pode passar uma interface wifi inteira do hospedeiro para o container, com isso você pode criar uma rede wifi dentro do openwrt usando o hardware wifi.
No OpenWRT instale o driver da sua placa de rede no openwrt, no meu caso o drive é o kmod-ath9k-htc
.
opkg install kmod-ath9k-htc
Vamos instalar agora os softwares necessários para gerenciar o wifi
opkg install hostapd wpa-supplicant wifi-scripts wireless-regdb
Agora vamos adicionar a seguinte configuração no container.
No hospedeiro edite o seguinte arquivo
cd /var/lib/lxc/openwrt
nano ./config
Adicione a seguinte linha no final do arquivo
lxc.net.1.type = phys
lxc.net.1.link = wlan0
lxc.net.1.flags = up
lxc.net.1.hwaddr = 00:16:3e:xx:xx:xx
no meu caso o nome da minha interface é wlxc4e984dddfe0

Reinicie o container
lxc-stop openwrt
lxc-start openwrt
lxc-attach openwrt
Acesse a interface web novamente.
obs: talvez o ip de acesso mudo ao reiniciar o container.
Vai em wireless.

Agora podemos subir uma rede wifi, conectar e configurar como quisermos.

Limitando recursos
Podemos limitar os recursos que o container terá acesso.
Aindano exemplo do openwrt vamos limitar o uso de cpu para 1 núcleo, e a memória ram para 128mb.
Para isso basta adicionar as seguintes linhas no arquivo de configuração.
# 128mb em bytes
lxc.cgroup2.memory.max = 134217728
lxc.cgroup2.cpuset.cpus = 1
lxc-attach openwrt
opkg update && opkg install htop
htop

o htop no openwrt não mostra o numero preciso de processadores limitados para o container, mas quando é configurado está limitando sim a apenas um processador.
Conclusão
O lxc é uma opção bastante completa e robusta, mais personalizada que o docker e faz parecer realmente que você está executando uma VM.
Existem softwares open source que utiliza interface gráfica para gerenciar os containers, como o incus do próprio lxc ou até mesmo o proxmox, que é uma solução completa de virtualização.
Essa são apenas algumas das possibilidades com o lxc, existem várias configurações bem legais para se fazer.
Ex:
- Configurar lvm
- Usar placa de vídeo no container
- Montar uma ambiente de rede virtual para testes
Referências:
https://linuxcontainers.org/lxc/getting-started/