Como fazer várias distribuições de inicialização usando contêineres do Linux

Linux Containers (LXC) é uma tecnologia de virtualização leve e tem vários usos. Ele faz parte do kernel do Linux e pode permitir que você emule uma ou várias distribuições Linux em um único host Linux. Pense nisso como um meio termo entre um chroot e tecnologias de virtualização completa, como VirtualBox, KVM ou Xen. Uma tecnologia similar presente no mundo BSD são as Jails do FreeBSD.

Por exemplo, a máquina em que estou escrevendo é um laptop rodando Linux Mint 18, alimentado por um processador Intel Atom, e tem apenas 2 GB de RAM. No entanto, estou executando três contêineres Linux, cada um com uma instância do servidor web Apache em execução, sem grande impacto no desempenho. Isso seria impensável com uma máquina virtual tradicional como o VirtualBox. Portanto, se você deseja executar várias distribuições em seu sistema Linux, o Linux Containers deve fazer o trabalho para você.

Instalando e Configurando Contêineres Linux

Estamos configurando o LXC no Linux Mint 18 de 64 bits. As instruções de instalação fornecidas aqui também funcionarão sem modificações no Ubuntu 16.04 e superior. Se você estiver usando outra distribuição, consulte a documentação oficial da sua distribuição se algo não funcionar conforme o esperado. Uma familiaridade com a linha de comando e solução de problemas gerais também é presumida.

Pré-requisitos

Aqui estão algumas coisas que você deve configurar para começar a usar várias distribuições:

1. Instalar LXC e outro software de pré-requisito usando:

[sourcecode]sudo apt install lxc lxc-templates uidmap[/sourcecode]

2. Agora você precisa configurar seu perfil. Digite os seguintes comandos para configurá-lo:

[sourcecode]mkdir -p ~/.config/lxc
echo “lxc.id_map = u 0 100000 65536” > ~/.config/lxc/default.conf
echo “lxc.id_map = g 0 100000 65536” >> ~/.config/lxc/default.conf
echo “lxc.network.type = veth” >> ~/.config/lxc/default.conf
echo “lxc.network.link = lxcbr0” >> ~/.config/lxc/default.conf
echo “$USER veth lxcbr0 2” | sudo tee -a /etc/lxc/lxc-usernet[/sourcecode]

3. Então, você precisa configurar as permissões do usuário do seguinte modo:

[sourcecode]sudo usermod –add-subuids 100000-165536 $USER
sudo usermod –add-subgids 100000-165536 $USER

sudo cgm cria todos os usuários
sudo cgm chown todos os usuários $(id -u) $(id -g)
cgm movepid todos os usuários $$[/sourcecode]

Configurando seu contêiner

Agora que você tem o LXC Container instalado junto com outro software de pré-requisito, aqui estão as etapas para configurar o Container:

1. Neste exemplo, vamos configurar um container Ubuntu, chamado ubu1. Para isso, execute o seguinte comando:

[sourcecode]lxc-create – download do modelo – nome ubu1[/sourcecode]

2. Aqui, o parâmetro –template diz ao lxc para download uma imagem pré-configurada da internet, enquanto o parâmetro –name especifica o nome do contêiner – ubu1 neste caso. Você pode usar o nome que quiser.

3. Agora você verá uma lista de imagens de distribuição suportadas:

seleção de distribuição

4. Insira as especificações da distribuição que você deseja instalar. Vou instalar a versão de 64 bits do Ubuntu 16.04 (codinome xenial) aqui:

instalar-ubuntu

5. Se você deseja instale a imagem de forma não interativao comando a seguir obtém o mesmo resultado que o acima:

[sourcecode]lxc-create -t ​​download -n ubu1 — –dist ubuntu –release xenial –arch amd64[/sourcecode]

6. O LXC agora fará o download e instalará uma imagem xenial mínima do Ubuntu em seu sistema host. O download e a instalação podem demorar um pouco, dependendo da sua conexão com a Internet e da velocidade do seu PC. Após a instalaçãovocê verá uma tela como esta:

ubuntu_installed

Agora você está pronto para usar seu contêiner Ubuntu recém-configurado.

Usando várias distribuições com contêineres Linux

Iniciando o contêiner

Inicie seu contêiner usando o comando lxc-start:

[sourcecode]lxc-start -n ubu1 -d[/sourcecode]

Aqui, o parâmetro -n especifica o nome do contêiner que você deseja iniciar (ubu1 neste caso), e o parâmetro -d faz rodar em segundo plano.

Você pode verificar se o contêiner foi iniciado usando o comando lxc-ls:

[sourcecode]lxc-ls -f[/sourcecode]

contêineres de corrida

O parâmetro -f permite gostar comunicando. Aqui, você pode ver que eu tenho dois recipientes – um Debian (parado) e um Ubuntu (em execução).

Acessando e usando seu contêiner

Você pode acessar o console do container usando o comando lxc-attach:

[sourcecode]lxc-attach -n ubu1[/sourcecode]

Agora você terá um casca de raiz em seu recipiente. Recomenda-se configurar uma senha para o usuário root e criar uma conta de usuário comum:

[sourcecode]senha
adduser beebum[/sourcecode]

Claro, substitua bum com o nome de usuário que você deseja. Você pode então instalar o software e configurar seu contêiner como faria em um sistema normal. Por exemplo, em um contêiner Debian ou Ubuntu:

[sourcecode]apt install wget openssh-server htop tmux nano iptables[/sourcecode]

Parando seu contêiner

Depois de terminar de jogar com o contêiner, use o comando exit para retornar ao sistema host. Agora use o comando lxc-stop para parar o seu recipiente:

[sourcecode]lxc-stop -n ubu1[/sourcecode]

Isso fará com que o contêiner seja encerrado de forma limpa e não consumirá mais recursos em seu sistema, exceto espaço em disco.

Clonagem e instantâneos

Clones

Depois de instalar programas em um contêiner e configurá-lo ao seu gosto, você pode querer criar uma ou várias cópias dele para fácil provisionamento. Você pode fazer isso criando um cloneque é uma réplica exata de um contêiner.

Por exemplo, para criar um clone do contêiner ubu1 (vamos chamá-lo de ubu2), primeiro pare o recipiente usando lxc-stop, então use o comando lxc-copy:

[sourcecode]lxc-stop -n ubu1

lxc-copy -n ubu1 -N ubu2[/sourcecode]

Aqui o -n opção especifica o contêiner de origeme as -N opção especifica o nome do clone. Para verificar que o container foi clonado, use o comando lxc-ls:

clone

Instantâneos

Suponha que você esteja prestes a fazer algumas alterações potencialmente perigosas ou difíceis de recuperar em um contêiner, como reconfigurar um servidor web. Para minimizar os danos, você pode criar um instantâneo do contêiner antes de fazer essa alteração. Caso algo dê errado durante a configuração, você pode simplesmente parar o contêiner e recuperá-lo ao seu estado de trabalho anterior, restaurando um instantâneo.

Para criar o instantâneo, primeiro parar o recipiente:

[sourcecode]lxc-stop -n ubu1[/sourcecode]

Então, criar um instantâneo usando o comando lxc-snapshot:

[sourcecode]lxc-snapshot -n ubu1[/sourcecode]

Isso cria um instantâneo chamado snap0. Quaisquer instantâneos subsequentes que você criar usando este comando serão chamados snap1, snap2etc

Depois disso, você pode começar o contêiner e faça as alterações desejadas. Se a qualquer momento você quiser retornar a um instantâneo que você criou, Pare o contêiner e use o comando lxc-snapshot com o parâmetro -r para restaurar um instantâneo:

[sourcecode]lxc-snapshot -r snap0 -n ubu1[/sourcecode]

Isso restaurará o instantâneo snap0 para o contêiner ubu1.

Inicialização automática de contêineres na inicialização

Você pode fazer um contêiner, por exemplo, um contêiner de servidor web, inicializar automaticamente quando você inicializar seu sistema. Para fazer isso, acesse o arquivo de configuração do contêinerlocalizado em $HOME/.local/share/lxc//config, e adicione as seguintes linhas:

[sourcecode]lxc.start.auto = 1
lxc.início.atraso = 5[/sourcecode]

A primeira linha especifica que o contêiner deve ser iniciado na inicialização. A segunda diz ao sistema para espere 5 segundos antes de iniciar o próximo recipiente, se houver.

Solução de problemas

Se você está tendo problemas para iniciar contêineres, a primeira coisa a tentar é executar o comando lxc-start em Primeiro plano modo. Por exemplo:

[sourcecode]lxc-start -n ubu1 -F[/sourcecode]

Isso vai mostrar-lhe os erros no console atuale, que é muito útil para identificar a natureza do problema.

Problemas com a execução de vários contêineres simultaneamente

Se você tentar executar vários contêineres ao mesmo tempo, você pode ver erros como “Cota atingida” ou “falha ao criar a rede configurada”. Isso ocorre porque você está executando mais interfaces de rede do que o atribuído a você. Você pode aumentar o número de pontes de rede que um usuário pode executar modificando o arquivo /etc/lxc/lxc-usernet como raiz. Pode parecer algo assim:

[sourcecode]# CONTAGEM DE PONTE DE TIPO DE NOME DE USUÁRIO
beebom veth lxcbr0 5[/sourcecode]

Você pode mude o número no final (5 neste exemplo), para um número maior, como 10. Isso permitirá que você execute até 10 contêineres de uma só vez.

Outros usos de contêineres Linux

Os contêineres do Linux têm vários usos. Você pode usá-los como caixas de teste leves, por exemplo, para testar várias configurações de um servidor da Web ou de banco de dados antes de confirmá-los em um servidor de produção. Outro caso de uso é testar como um aplicativo é executado em diferentes versões de várias distribuições.

Você também pode usá-los para isolar aplicativos nos quais não confia – qualquer dano causado por um aplicativo será limitado ao seu próprio contêiner e não afetará o sistema host. Observe que, embora seja possível executar aplicativos GUI em um contêiner, isso leva muito tempo e esforço e, portanto, não é recomendado. Se você deseja executar aplicativos GUI em uma sandbox, consulte nosso artigo sobre como sandbox apps no Linux.

VEJA TAMBÉM: 7 melhores alternativas ao VirtualBox que você pode usar

Execute várias distribuições simultaneamente com contêineres Linux

Assim termina nosso How-To sobre a execução de várias distribuições Linux em um único computador, sem a sobrecarga de uma máquina virtual de tamanho normal. A utilidade dessa tecnologia é limitada apenas pela sua criatividade, então sinta-se à vontade para experimentar e descobrir novos casos de uso. Se você tiver problemas para configurar contêineres, sinta-se à vontade para nos fazer uma pergunta na seção de comentários.

Leave a Comment

Your email address will not be published.