Recomendado, 2024

Escolha Do Editor

Como executar múltiplas distros Simultaneosly usando contêineres Linux

Os contêineres Linux (LXC) são uma tecnologia de virtualização leve e têm vários usos. Ele faz parte do kernel do Linux e permite emular uma ou várias distribuições do Linux em um único host Linux. Pense nisso como um meio termo entre um chroot e tecnologias de virtualização completas, como VirtualBox, KVM ou Xen. Uma tecnologia semelhante presente no mundo do BSD são as FreeBSD Jails.

Por exemplo, a máquina que estou escrevendo é um laptop rodando Linux Mint 18, alimentado por um processador Intel Atom, e tem 2 GB de RAM. No entanto, estou executando três contêineres do Linux, cada um com uma instância do servidor da Web Apache em execução, sem um grande impacto no desempenho. Isso seria impensável com uma máquina virtual tradicional como o VirtualBox. Então, se você quer rodar múltiplas distribuições no 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 acima. Se você estiver usando outra distro, consulte a documentação oficial da sua distro se algo não funcionar como 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. Instale o LXC e outro software de pré-requisito usando:

[sourcecode] sudo apt instalar 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" & amp; gt; ~ / .config / lxc / default.conf
echo "lxc.id_map = g 0 100000 65536", & gt; ~ / .config / lxc / default.conf
echo "lxc.network.type = veth", & amp; gt; & amp; gt; ~ / .config / lxc / default.conf
echo "lxc.network.link = lxcbr0" & amp; gt; & amp; gt; ~ / .config / lxc / default.conf
echo "$ USER veth lxcbr0 2" | sudo tee -a / etc / lxc / lxc-usernet [/ sourcecode]

3. Em seguida, você precisa configurar as permissões de usuário da seguinte maneira:

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

sudo cgm criar todos os usuários
sudo cgm chown todo usuário $ (id -u) $ (id -g)
cgm movepid todo usuário $$ [/ 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 contêiner Ubuntu chamado ubu1 . Para fazer isso, execute o seguinte comando:

[código-fonte] lxc-create –template download –name ubu1 [/ sourcecode]

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

3. Você verá agora uma lista de imagens de distribuição suportadas :

4. Digite os detalhes da distribuição que você deseja instalar. Vou instalar a versão de 64 bits do Ubuntu 16.04 (codinome xenial) aqui:

5. Se você deseja instalar a imagem de forma não interativa, o seguinte comando atinge o mesmo resultado que o acima:

[código fonte] lxc-create -t ​​download -n ubu1 - –dist ubuntu –release xenial –arch amd64 [/ sourcecode]

6. O LXC agora baixará 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ção, você verá uma tela como esta:

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

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

Começando o contêiner

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

[código fonte] lxc-start -n ubu1 -d [/ sourcecode]

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

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

[código fonte] lxc-ls -f [/ sourcecode]

O parâmetro -f permite relatórios sofisticados . Aqui, você pode ver que eu tenho dois containers - um Debian (parado) e um Ubuntu (rodando).

Acessando e usando seu contêiner

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

[código fonte] lxc-attach -n ubu1 [/ sourcecode]

Agora você terá um shell de root no seu contêiner. Recomenda-se que você configure uma senha para o usuário root e crie uma conta de usuário comum :

[sourcecode] passwd
adduser beebom [/ sourcecode]

Claro, substitua beebom pelo nome de usuário desejado. Você pode então instalar o software e configurar seu contêiner como faria em um sistema normal. Por exemplo, em um repositório Debian ou Ubuntu:

[sourcecode] apt instale o wget openssh-server htop no 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 seu contêiner :

[código fonte] 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 pelo espaço em disco.

Clonagem e instantâneos

Clones

Depois de instalar os programas em um contêiner e configurá-los como preferir, você poderá criar uma ou várias cópias para facilitar o provisionamento. Você pode fazer isso criando um clone, que é 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 contêiner usando lxc-stop e use o comando lxc-copy :

[código fonte] lxc-stop -n ubu

lxc-copy -n ubu1 -N ubu2 [/ código-fonte]

Aqui, a opção -n especifica o contêiner de origem e a opção -N especifica o nome do clone . Para verificar se o contêiner foi clonado, use o comando lxc-ls :

Instantâneos

Suponha que você esteja prestes a tornar algo potencialmente perigoso ou difícil de recuperar de alterações em um contêiner, como a reconfiguração de um servidor da web. Para minimizar o dano, você pode criar um instantâneo do contêiner antes de fazer essa alteração. No caso de algo dar errado durante a configuração, você pode simplesmente parar o contêiner e recuperá-lo para seu estado de funcionamento anterior, restaurando um instantâneo.

Para criar o instantâneo, primeiro pare o contêiner :

[código fonte] lxc-stop -n ubu1 [/ sourcecode]

Em seguida, crie um instantâneo usando o comando lxc-snapshot :

[código de fonte] lxc-snapshot -n ubu1 [/ sourcecode]

Isso cria um instantâneo chamado snap0 . Qualquer instantâneo subseqüente que você criar usando este comando será chamado de snap1, snap2 etc.

Depois disso, você pode iniciar o contêiner e fazer as alterações desejadas. Se, a qualquer momento, você desejar retornar a um instantâneo criado, pare o contêiner e use o comando lxc-snapshot com o parâmetro -r para restaurar um instantâneo :

[código fonte] lxc-instantâneo -r snap0 -n ubu1 [/ sourcecode]

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

Iniciar automaticamente contêineres na inicialização

Você pode criar um contêiner, por exemplo, um contêiner de servidor da Web, iniciar automaticamente quando inicializar seu sistema. Para fazer isso, vá para o arquivo de configuração do contêiner, localizado em $HOME/.local/share/lxc//config, e adicione as seguintes linhas :

[código fonte] lxc.start.auto = 1
lxc.start.delay = 5 [/ sourcecode]

A primeira linha especifica que o contêiner deve ser iniciado na inicialização. O segundo diz ao sistema para esperar 5 segundos antes de iniciar o próximo container, 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 no modo Foreground . Por exemplo:

[código fonte] lxc-start -n ubu1 -F [/ sourcecode]

Isso mostrará os erros na consola atual, o 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 de uma só vez, poderá ver erros como "Cota atingida" ou "falha ao criar a rede configurada". Isso ocorre porque você está executando mais interfaces de rede do que as atribuídas 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 root . Pode parecer algo assim:

[sourcecode] # CONTAGEM DE PONTE DO TIPO DE UTILIZADOR
beebom veth lxcbr0 5 [/ sourcecode]

Você pode alterar 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

Contêineres 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 submetê-las a um servidor de produção. Outro caso de uso é testar como um aplicativo é executado em diferentes versões de várias distros.

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

Executar múltiplas distribuições simultaneamente com contêineres Linux

Assim termina nosso How-To na execução de várias distribuições Linux em um único computador, sem a sobrecarga de uma máquina virtual de tamanho completo. A utilidade desta tecnologia é limitada apenas pela sua criatividade, portanto 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.

Top