Como executar várias distribuições simultaneamente usando contêineres Linux

  • Joshua Davis
  • 0
  • 2790
  • 75

Os Linux Containers (LXC) são uma tecnologia de virtualização leve e têm vários usos. 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 completas, como VirtualBox, KVM ou Xen. Uma tecnologia semelhante presente no mundo do BSD é o FreeBSD Jails.

Como exemplo, a máquina em que estou escrevendo é um laptop executando o Linux Mint 18, alimentado por um processador Intel Atom e com escassos 2 GB de RAM. No entanto, estou executando três contêineres Linux, cada um com uma instância do servidor da 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 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 superior. Se você estiver usando outra distribuição, consulte a documentação oficial da sua distribuição se algo não funcionar como o esperado. Também é assumida uma familiaridade com a linha de comando e solução de problemas gerais.

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 para instalar lxc lxc-templates uidmap [/ sourcecode]

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

[código de origem] mkdir -p ~ / .config / lxc
eco "lxc.id_map = u 0 100000 65536" & amp; amp; gt; ~ / .config / lxc / default.conf
eco "lxc.id_map = g 0 100000 65536" & amp; amp; gt;& amp; amp; gt; ~ / .config / lxc / default.conf
eco "lxc.network.type = veth" & amp; amp; gt;& amp; amp; gt; ~ / .config / lxc / default.conf
eco "lxc.network.link = lxcbr0" & amp; amp; gt;& amp; amp; gt; ~ / .config / lxc / default.conf
eco "$ USER veth lxcbr0 2" | sudo tee -a / etc / lxc / lxc-usernet [/ código de origem]

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

[código de origem] 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 all user $$ [/ sourcecode]

Configurando seu contêiner

Agora que você possui o LXC Container instalado junto com outro software obrigatório, aqui estão as etapas para configurar o Container:

1. Neste exemplo, vamos montar um container Ubuntu, nomeado ubu1. Para fazer isso, execute o seguinte comando:

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

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

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

4. Digite as especificidades 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 instale a imagem de maneira não interativa, o seguinte comando alcança 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 fará o download e instalará uma imagem mínima do Ubuntu xenial no 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

Iniciando o contêiner

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

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

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

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

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

o -f parâmetro habilita chique 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 contêiner usando o lxc-attach comando:

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

Agora você terá um casca de raiz no seu contêiner. É recomendável que você configure uma senha para o usuário root e crie uma conta de usuário comum:

[código de origem] passwd
adduser beebom [/ sourcecode]

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

[sourcecode] para instalar o wget openssh-server htop tmux nano iptables [/ sourcecode]

Parando seu contêiner

Depois de terminar de brincar com o contêiner, use o Saída comando para retornar ao sistema host. Agora use o lxc-stop comando para parar seu contêiner:

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

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

Clonagem e instantâneos

Clones

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

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

[código de origem] lxc-stop -n ubu1

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

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

Instantâneos

Suponha que você esteja prestes a tornar potencialmente perigoso ou difícil de recuperar as alterações em um contêiner, como reconfigurar um servidor da web. Para minimizar o dano, você pode criar uma captura instantânea 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 pare o recipiente:

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

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

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

Isso cria um instantâneo chamado snap0. Quaisquer capturas instantâneas subsequentes que você criar usando este comando serão chamadas snap1, snap2, etc.

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

[código-fonte] lxc-snapshot -r snap0 -n ubu1 [/ código-fonte]

Isso restaurará o instantâneo snap0 ao ubu1 recipiente.

Iniciar automaticamente contêineres na inicialização

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

[código de origem] lxc.start.auto = 1
lxc.start.delay = 5 [/ código-fonte]

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

Solução de problemas

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

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

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

Problemas ao executar vários contêineres simultaneamente

Se você tentar executar vários contêineres de uma só vez, 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 / etc / lxc / lxc-usernet arquivar como raiz. Pode ser algo como isto:

[código de origem] # USERNAME TYPE BRIDGE COUNT
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

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 enviá-las para 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 você 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 da GUI em um contêiner, isso leva uma quantidade significativa de tempo e esforço e, portanto, não é recomendado. Se você deseja executar aplicativos da GUI em uma caixa de proteção, consulte nosso artigo sobre como aplicar aplicações em caixa de proteção no Linux.

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

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

Assim, termina o nosso guia sobre como executar 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; portanto, fique à vontade para experimentar e descobrir novos casos de uso. Se você tiver problemas para configurar contêineres, sinta-se à vontade para fazer uma pergunta na seção de comentários.




Ainda sem comentários

Guias de compra de gadgets, tecnologias importantes
Publicamos guias detalhados para a compra de equipamentos, criamos listas interessantes dos melhores produtos do mercado, cobrimos notícias do mundo da tecnologia