Os contêineres do Linux (LXC) são uma tecnologia de virtualização leve e têm vários usos. É parte do kernel Linux e pode permitir que você emule uma ou várias distros 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 semelhante presente no mundo BSD são FreeBSD Jails.
Por exemplo, a máquina na qual estou escrevendo é um laptop com Linux Mint 18, equipado com um processador Intel Atom e com escassos 2 GB de RAM. Ainda assim, estou executando três contêineres 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ê deseja executar várias distros em seu sistema Linux, o Linux Containers deve fazer o trabalho para você muito bem.
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 esperado. A familiaridade com a linha de comando e solução de problemas geral também é assumida.
Pré-requisitos
Aqui estão algumas coisas que você deve configurar para começar a usar várias distros:
1. Instale o LXC e outro software de pré-requisito usando:
[código fonte] sudo apt install lxc lxc-templates uidmap [/ código fonte]
2. Agora você precisa configure seu perfil. Digite os seguintes comandos para configurá-lo:
[código fonte] mkdir -p ~ / .config / lxc
echo "lxc.id_map = u 0 100000 65536" & amp; amp; amp; gt; ~ / .config / lxc / default.conf
echo "lxc.id_map = g 0 100000 65536" & amp; amp; amp; gt;& amp; amp; amp; gt; ~ / .config / lxc / default.conf
echo "lxc.network.type = veth" & amp; amp; amp; gt;& amp; amp; amp; gt; ~ / .config / lxc / default.conf
echo "lxc.network.link = lxcbr0" & amp; amp; amp; gt;& amp; amp; amp; gt; ~ / .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:
[código fonte] sudo usermod -add-subuids 100000-165536 $ USUÁRIO
sudo usermod -add-subgids 100000-165536 $ USUÁRIO
sudo cgm criar todos os usuários
sudo cgm chown todos os usuários $ (id -u) $ (id -g)
cgm movepid all user $$ [/ sourcecode]
Configurando seu contêiner
Agora que você instalou o LXC Container 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, 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 download 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ê verá agora uma lista de imagens de distro suportadas:
4. Insira 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 obtém o mesmo resultado que o anterior:
[código fonte] lxc-create -t download -n ubu1 - -dist ubuntu -release xenial -arch amd64 [/ código fonte]
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ção, você verá uma tela como esta:
Agora você está pronto para usar seu contêiner Ubuntu recém-configurado.
Usando várias distros 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 container 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 contêineres - 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]
Você agora terá um casca de raiz em seu contêiner. É recomendado que você configure uma senha para o usuário root, e criar uma conta de usuário normal:
[código fonte] passwd
adduser beebom [/ sourcecode]
Claro, substitua beebom 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:
[código fonte] apt install wget openssh-server htop tmux nano iptables [/ código fonte]
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 o seu contêiner:
[código fonte] lxc-stop -n ubu1 [/ código fonte]
Isso fará com que o contêiner seja encerrado de forma limpa e não consumirá mais recursos do sistema, exceto espaço em disco.
Clonagem e instantâneos
Clones
Depois de instalar os programas em um contêiner e configurá-lo de acordo com sua preferência, você pode 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 contêiner usando lxc-stop
, então use o cópia lxc
comando:
[código fonte] lxc-stop -n ubu1
lxc-copy -n ubu1 -N ubu2 [/ código fonte]
Aqui o -opção n especifica o recipiente de origem, e a -A opção N especifica o nome do clone. Para verificar que o contêiner foi clonado, use o lxc-ls
comando:
Instantâneos
Suponha que você esteja prestes a fazer algumas alterações potencialmente perigosas ou difíceis de recuperar de alterações em um contêiner, como reconfigurar um servidor da web. Para minimizar o dano, 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 funcionamento 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 instantâneos subsequentes que você criar usando este comando serão chamados snap1, snap2, etc.
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 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 irá restaurar o instantâneo snap0
para o ubu1
recipiente.
Recipientes de inicialização automática na inicialização
Você pode fazer um contêiner, por exemplo, um contêiner de servidor web, iniciar automaticamente quando você inicializa seu sistema. Para fazer isso, vá para o arquivo de configuração do contêiner, localizado em $ HOME / .local / share / lxc /
, 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 espere 5 segundos antes de iniciar o próximo contêiner, se houver.
Solução de problemas
Se você estiver tendo 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 com a execução de vários contêineres simultaneamente
Se você tentar executar vários contêineres de uma vez, você pode ver erros como “Cota alcançada” 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 / etc / lxc / lxc-usernet
arquivo como raiz. Pode ser algo assim:
[código fonte] # NOME DE USUÁRIO TYPE BRIDGE COUNT
beebom veth lxcbr0 5 [/ código fonte]
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 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 enviá-los 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 você não confia - qualquer dano que tal 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 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 GUI em um sandbox, consulte nosso artigo sobre como fazer um sandbox de aplicativos no Linux.
VEJA TAMBÉM: 7 melhores alternativas do VirtualBox que você pode usar
Execute várias distros simultaneamente com contêineres Linux
Assim termina nosso How-To sobre a execução de várias distros 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.