Docker + Portainer em Proxmox/LXC

Desatualizado. Mantido apenas para referência.
Para uma solução mais simples e atualizada, devem utilizar o seguinte script (Docker - Kubernetes → Docker LXC): https://tteck.github.io/Proxmox/

A pedido de várias famílias, seguem os passos de instalação de Docker + Portainer em LXC (Proxmox 7.1.x - embora deva funcionar sem problemas em outras versões).

Esta solução traz as seguintes vantagens:

  • Baixo uso de recursos quando comparado com uma VM (mesmo com um Ubuntu Minimized).
  • Tão ou ainda mais simples de instalar que em VM.
  • Simples de manter sem necessidade de configurações extra (vem com a funcionalidade de auto-update ativa).
  • Reboots praticamente instantâneos.
  • Menos wearout nos discos pois escreve menos que uma VM.

Por outro lado, tem uma desvantagem:

  • Principalmente em modo privilegiado, torna-se mais facilitado o acesso ilegítimo e a comunicação entre o LXC e o Host/Proxmox. (Se não precisarem do modo privilegiado, não ativem. Se não souberem o que estão a fazer, não ativem)
  1. Preparação da imagem/template:
    1.1. Na consola, atualizar a lista de templates (pveam update).
    1.2. Dentro do nó, clicar em “local” > “CT Templates” > “Templates”.
    1.3. Pesquisar “turnkey-core”, selecionar a entrada “TurnKey Core” (atualmente na versão 16.1-1) e clicar em Download.
    1.4 Após o download, a imagem deverá surgir na lista de “CT Templates”.
  2. Criação do contentor LXC:
    2.1. Dentro do nó, clicar em “Create CT” (canto superior direito junto ao user/perfil).
    2.2. Preencher os campos (o que não estiver mencionado é para deixar com as opções por defeito):
    2.3.1. “General”:
    a. Hostname: “docker” (ou o que lhe quiserem chamar)
    b. Definir uma password (e carregar a chave SSH - se ainda não sabem o que é, deviam pesquisar e começar a usar!)
    d. Desativar a opção “unpriviledged container” apenas se precisarem do contentor em modo privilegiado e souberem o que estão a fazer.
    2.3.2 “Template”:
    a. Storage: local (ou outra dependendo dos vossos nós)
    b. Template: o que descarregaram no passo anterior
    2.3.3. “Disks”:
    a. Storage: local-lvm (ou outra dependendo dos vossos nós)
    b. Disk size: O que precisarem. Mais ou menos 8gb + a storage para o Docker.
    2.3.4. “CPU”:
    a. Cores: Os que precisarem
    2.3.5. “Memory”:
    a. Memory: ~512mb + a memóriaque precisarem para o Docker
    2.3.6. “Network tab”:
    a. As vossas configurações de IP. Pessoalmente prefiro não depender do DHCP em servidores, mas para uso caseiro, DHCP com reserva também é uma opção quase aceitável.
    2.3.7. “DNS”
    a. As vossas definições de DNS, caso sejam diferentes do host.
    2.4. Não ativar a opção “Start after created”, clicar em “Finish” e aguardar pelo “TASK OK”.
    2.5. Selecionar o contentor que acabaram de criar e clicar em “Options” > “Features” e ativar a opção “keyctl”.
    2.6. Configurar o Debian Turnkey Core:
    2.6.1 Iniciar o contentor.
    2.6.2. Fazer login com os dados definidos anteriormente.
    2.6.3. Clicar em skip nos dois primeiros painéis, depois “Install” e aguardar um pouco pela instalação.
    2.6.4. Control + C para sair da instalação.
    2.6.5. Atualizar (apt update && apt upgrade -y).
  3. Instalar o Docker
    3.1 Executar os seguintes comandos:
    3.1.1. apt-get install \ ca-certificates \ curl \ gnupg \ lsb-release
    3.1.2. curl -fsSL https://download.docker.com/linux/debian/gpg | gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg
    3.1.3. echo \ "deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/debian \ $(lsb_release -cs) stable" | tee /etc/apt/sources.list.d/docker.list > /dev/null
    3.1.3. echo \ "deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/debian \ $(lsb_release -cs) stable" | tee /etc/apt/sources.list.d/docker.list > /dev/null
    3.1.4 apt update
    3.1.5 apt install docker-ce docker-ce-cli containerd.io docker-compose-plugin
    3.1.6. Verificar se o Docker se encontra a correr: systemctl status docker
  4. Instalar o Portainer
    4.1 Executar os seguintes comandos:
    4.1.1 docker volume create portainer_data
    4.1.2 docker run -d -p 8000:8000 -p 9443:9443 --name portainer \ --restart=always \ -v /var/run/docker.sock:/var/run/docker.sock \ -v portainer_data:/data \ portainer/portainer-ce:latest
    4.1.3. Verificar se o Portainer se encontra a correr docker ps
    4.2. Aceder ao Portainer em https://ip_do_contentor:9443
    4.3. Definir as credenciais quando solicitado.
5 Curtiram

Boa tarde,
Antes de mais muito obrigado pelo tuturial, é uma solução muito interessante a explorar dado que atualmente tenho VM’s só para correr dockers!
Uma questão, alguma sugestão para ter acessíveis ficheiros externos sem correr o LXC em modo privilegiado?
Para usar uma partilha Samba ou NFS é necessário o LXC usar este modo.
Muito obrigado desde já!

Excelente trabalho em prol da comunidade.
Só uma questão na versão 7 do proxmox para correr o docker dentro do LXC já não é necessário ativar as features keyctl e nesting ao mesmo tempo?
image

Da experiencia que tive, abandonei as imagens LXC por causa de algumas incompatibilidades de correr docker dentro de LXC. por exemplo nas reposições dos backups, em regra, não funcionava. montar storage NFS diretamente na imagem LXC também se tornou um pesadelo. Sorry, mas não me lembro dos detalhes dos use cases.

Mais uma vez excelente trabalho.
Abraço,
Mata

Bom dia,

Quando fala em reposição de backups, a que tipo de problema se refere?
Relativamente ao storage a melhor forma é montar dentro do proxmox e depois fazer um bind mount. Mesmo usando containers em modo sem privilégios não é muito complicado ter acesso ao storage externo.

Cumprimentos,


Copyright © 2017-2021. Todos os direitos reservados
CPHA.pt - info@cpha.pt


FAQ | Termos de Serviço/Regras | Política de Privacidade