Introdução aos Contêineres LXD do Ubuntu

Os contêineres são úteis por diversos motivos. Eles isolam aplicativos do restante do sistema. São portáteis e fáceis de clonar e/ou mover para outros sistemas operacionais. E, no caso do Linux, funcionam da mesma forma em qualquer distribuição, sem necessidade de adaptações. Se você precisar mover um contêiner do RedHat para o Ubuntu, deve ser apenas uma simples operação de cópia.
O Docker é uma solução popular projetada para conter um único aplicativo: por exemplo, um servidor de banco de dados MySQL. O LXD é semelhante em alguns aspectos, mas foi projetado para conter um sistema operacional inteiro. Isso o torna útil para alguns cenários. Por exemplo, você pode criar um contêiner LXD, instalar um servidor de banco de dados e um servidor http. Você pode então criar um site WordPress dentro dele. Agora, você pode mudar de nuvem para nuvem apenas movendo este contêiner LXD para onde for necessário quando não estiver satisfeito com seu provedor anterior. E como é fácil clonar um contêiner, você pode até fazer upload de seu site para vários provedores de nuvem para criar uma configuração redundante e de alta disponibilidade.
O LXD não virtualiza hardware como o QEMU ou o VirtualBox, o que significa que é muito rápido, oferecendo uma velocidade de execução quase nativa.
Instalar e Configurar o LXD
Abra um terminal e instale o LXD, além das utilidades ZFS, que o ajudarão a acelerar algumas operações e economizar espaço em disco ao trabalhar com contêineres.
sudo apt install zfsutils-linux lxd
Inicie a configuração do LXD.
sudo lxd initPressione ENTER para selecionar os valores padrão.
Para Tamanho em GB do novo dispositivo de loop (mínimo de 1GB) [padrão=15GB], você pode escolher outro valor, como “50GB”, se souber que criará muitos contêineres.

Encontrar e Iniciar uma Imagem de Distribuição LXD
Para listar todas as imagens do Ubuntu:
lxc image list ubuntu: arch=amd64
Haverá muitos resultados. Você pode omitir arch=amd64 se precisar de imagens para outras plataformas, como processadores ARM (dispositivos Raspberry Pi usam essa arquitetura).
Na imagem anterior, os resultados foram limitados (com |head) para facilitar a leitura. A impressão digital do Ubuntu 18.04 (84a71299044b) foi destacada. Se você quiser iniciar um contêiner com essa distribuição, o comando seria:
lxc launch ubuntu:84a71299044bNo momento, isso retornaria um erro de permissão negada. Você precisa estar no grupo “lxd”. Seu usuário já foi adicionado a esse grupo, mas para torná-lo ativo você precisa sair e entrar novamente. Se quiser evitar isso, use este comando, substituindo “usuario” pelo seu nome de usuário:
execsu - usuario
Agora, os comandos lxc funcionam sem exigir sudo.
Iniciar Contêineres LXD com Distribuições que Não São do Ubuntu
Este comando mostrará quais outras distribuições estão disponíveis:
lxc image list images: arch=amd64Para iniciar uma imagem, em vez da impressão digital, você também pode usar um nome de alias se ver um disponível na lista.
lxc launch images:debian/9
Se você adicionar uma string ao final, pode escolher um nome para seu contêiner:
lxc launch images:debian/9 wordpress-siteGerenciar Contêineres LXD
Para listar todos os contêineres:
lxc list
A coluna “IPV4” é especialmente importante se você tiver algum serviço em execução nessa instância. Por exemplo, se um servidor http Apache estiver em execução na instância, entrar em “10.234.232.246” no navegador exibiria o site hospedado no contêiner.
Para parar um contêiner:
lxc stop nome_do_containerIsso pode levar muito tempo (ou falhar) com distribuições que não são do Ubuntu. É melhor obter um shell para o contêiner e, uma vez dentro, digitar systemctl poweroff para pará-lo.
Se tudo mais falhar, você pode forçar a parada com:
lxc stop nome_do_container --forcePara iniciá-lo:
lxc start nome_do_containerPara entrar no seu contêiner:
lxc shell nome_do_container
Você pode instalar programas com “sudo apt install” e fazer qualquer outra coisa que faria em uma distribuição Linux normal, por exemplo, configurar um servidor Apache. Quando quiser sair do contêiner, basta digitar:
exitTransferir Arquivos Para/De Contêineres LXD
Para enviar um arquivo para seu contêiner:
lxc file push /caminho/para/arquivo/local nome_do_container/caminho/para/arquivo/enviadoInclua o nome do arquivo a ser criado, não apenas o diretório onde deseja carregá-lo. Aqui está um exemplo:
lxc file push lxd-apt-install.png accurate-colt/var/www/website/upload.pngPara enviar um diretório em vez de um arquivo:
lxc file push /caminho/para/diretorio/local nome_do_container/caminho/para/diretorio/remoto --recursive--verboseExemplo:
lxc file push /bin accurate-colt/tmp --recursive--verbosePara baixar um diretório do seu contêiner para seu sistema operacional principal:
lxc file pull nome_do_container/caminho/para/diretorio/remoto /caminho/para/diretorio/local --recursive--verboseExemplo:
lxc file pull accurate-colt/tmp /tmp --recursive--verboseConclusão
Isso abrange o uso básico de contêineres LXD. Existem recursos mais avançados, como snapshots e rollbacks, imposição de limites em recursos como CPU e RAM, clonagem de contêineres, e assim por diante. Esses tópicos podem ser abordados em um futuro tutorial se percebermos que os leitores estão interessados no assunto.