17 min de leitura · Guia técnico
Portainer e CLI Docker são as duas principais formas de gerenciar containers Docker: o Portainer oferece uma interface web visual e intuitiva, enquanto a CLI Docker fornece controle total via terminal com máxima flexibilidade e automação. A escolha entre os dois depende do perfil do administrador, da complexidade do ambiente e da necessidade de automação.
Portainer vs CLI Docker: entenda as diferenças fundamentais
Antes de decidir qual abordagem adotar para gerenciar containers Docker no seu servidor, é essencial compreender o que cada ferramenta oferece e em quais cenários cada uma se destaca. O Portainer é uma interface gráfica web que se conecta ao daemon Docker via socket Unix (/var/run/docker.sock), permitindo criar, iniciar, parar e inspecionar containers sem digitar um único comando. Já a CLI Docker (interface de linha de comando) é a forma nativa de interagir com o Docker Engine, sendo indispensável para automação, scripts e pipelines de CI/CD.
Em termos práticos, o Portainer é ideal para equipes com perfis mistos — onde nem todos dominam o terminal — e para visualizar rapidamente o estado de múltiplos containers. A CLI, por outro lado, é a escolha de administradores experientes que precisam de controle granular, integração com cron jobs e reprodutibilidade via scripts. Ambas as abordagens acessam o mesmo daemon Docker e podem ser usadas simultaneamente sem conflito.
- Portainer CE: gratuito, open source, interface web, suporte a múltiplos ambientes, ideal para equipes e visualização rápida.
- CLI Docker: nativa, sem overhead adicional, essencial para automação, scripts shell e pipelines DevOps.
- Portainer Business: adiciona RBAC avançado, auditoria, suporte a Kubernetes empresarial e suporte técnico pago.
- Uso combinado: alterações feitas via CLI aparecem imediatamente no Portainer e vice-versa — não há conflito entre as duas abordagens.
Pré-requisitos
- Servidor VPS ou dedicado com Linux (Ubuntu 24.04 LTS, Debian 12 ou Rocky Linux 9 recomendados)
- Docker Engine instalado e em execução (
docker --versiondeve retornar versão 24.x ou superior) - Acesso SSH com privilégios root ou usuário com permissão no grupo
docker - Porta 9443 (HTTPS do Portainer) liberada no firewall para acesso à interface web
- Mínimo de 512 MB de RAM disponível no servidor (1 GB ou mais recomendado para ambientes com múltiplos containers)
- Conhecimento básico de terminal Linux para seguir os exemplos de CLI
Como instalar e acessar o Portainer no Docker
O Portainer CE é distribuído como uma imagem Docker oficial, o que torna sua instalação extremamente simples. Você não precisa instalar dependências adicionais — basta ter o Docker Engine funcionando. O processo abaixo foi testado no Ubuntu 24.04 LTS e no Debian 12.
Primeiro, crie o volume persistente onde o Portainer armazenará seus dados de configuração:
docker volume create portainer_data
Em seguida, execute o container do Portainer com as opções necessárias:
docker run -d \
--name=portainer \
--restart=always \
-p 8000:8000 \
-p 9443:9443 \
-v /var/run/docker.sock:/var/run/docker.sock \
-v portainer_data:/data \
portainer/portainer-ce:latest
Após executar o comando, você verá o ID do container criado:
a3f2c1d4e5b6789012345678901234567890abcdef1234567890abcdef123456
Verifique se o container está em execução:
docker ps --filter name=portainer
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
a3f2c1d4e5b6 portainer/portainer-ce:latest "/portainer" 2 minutes ago Up 2 minutes 0.0.0.0:8000->8000/tcp, 0.0.0.0:9443->9443/tcp portainer
Acesse a interface web em https://SEU_IP:9443. Na primeira vez, o Portainer solicitará a criação de um usuário administrador. Defina uma senha forte com no mínimo 12 caracteres. Após o login, selecione o ambiente Docker local para começar a gerenciar seus containers.
Atenção: o Portainer usa um certificado TLS autoassinado por padrão. Seu navegador exibirá um aviso de segurança — isso é esperado. Para produção, configure um certificado válido via Let's Encrypt ou substitua os certificados no volume de dados do Portainer.
Gerenciando containers com a CLI Docker: comandos essenciais
A interface de linha de comando do Docker oferece controle preciso sobre cada aspecto do ciclo de vida dos containers. Para administradores que trabalham com automação e scripts, dominar a CLI é indispensável. Abaixo estão os comandos mais utilizados no dia a dia, com exemplos práticos.
Listar todos os containers em execução:
docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
b1c2d3e4f5a6 nginx "/docker-entrypoint.…" 3 hours ago Up 3 hours 0.0.0.0:80->80/tcp webserver
Listar todos os containers, incluindo os parados:
docker ps -a
Iniciar um container Nginx simples:
docker run -d \
--name webserver \
--restart=unless-stopped \
-p 80:80 \
nginx:1.26
Inspecionar logs de um container em tempo real:
docker logs -f webserver
Acessar o shell de um container em execução:
docker exec -it webserver /bin/bash
Parar e remover um container:
docker stop webserver && docker rm webserver
Verificar uso de recursos de todos os containers em tempo real:
docker stats
CONTAINER ID NAME CPU % MEM USAGE / LIMIT MEM % NET I/O BLOCK I/O
b1c2d3e4f5a6 webserver 0.02% 5.8MiB / 1.9GiB 0.30% 1.2kB / 0B 0B / 0B
Para ambientes com múltiplos serviços, o Docker Compose é a extensão natural da CLI. Com um arquivo docker-compose.yml, você define toda a stack de serviços e sobe tudo com um único comando:
docker compose up -d
Se você ainda está configurando seu servidor Linux para receber aplicações Docker, consulte o guia Configurando um Servidor Linux para Hospedagem de Sites para garantir que o ambiente base esteja corretamente preparado.
Comparativo detalhado: Portainer vs CLI Docker por caso de uso
Para tomar a decisão certa entre gerenciamento visual com Portainer e controle via terminal com CLI Docker, é preciso avaliar cada cenário de uso. A tabela a seguir apresenta os principais critérios de comparação:
- Facilidade de uso: Portainer vence — interface web intuitiva, sem necessidade de memorizar comandos. CLI exige conhecimento técnico de terminal Linux.
- Automação e scripts: CLI vence — integração nativa com shell scripts, cron jobs, Ansible e pipelines CI/CD. Portainer não oferece automação via linha de comando.
- Visibilidade e monitoramento: Portainer vence — dashboards com uso de CPU, memória, rede e logs de todos os containers em uma única tela.
- Velocidade de execução: CLI vence — comandos diretos sem overhead de interface web. Ideal para operações em massa via scripts.
- Gerenciamento de múltiplos servidores: Portainer vence — suporte nativo a múltiplos endpoints Docker remotos via agente ou TCP com TLS.
- Controle de acesso por equipe: Portainer Business vence — RBAC avançado com papéis por usuário. CLI não tem controle de acesso nativo.
- Uso de recursos do servidor: CLI vence — zero overhead adicional. Portainer CE consome tipicamente menos de 100 MB de RAM, mas ainda é um serviço extra.
- Reprodutibilidade e versionamento: CLI + Docker Compose vence — arquivos YAML versionáveis no Git. Portainer não exporta configurações facilmente.
- Curva de aprendizado: Portainer é mais acessível para iniciantes. CLI requer familiaridade com Linux e Docker.
- Quando NÃO usar Portainer: em ambientes de produção críticos onde toda mudança deve ser rastreada via código (GitOps), ou em servidores com menos de 256 MB de RAM disponível.
- Quando NÃO usar apenas CLI: em equipes com membros não técnicos que precisam reiniciar ou monitorar containers sem acesso SSH.
Configurando segurança no Portainer para uso em produção
Usar o Portainer em ambiente de produção exige atenção especial à segurança. Por padrão, a interface fica acessível em qualquer IP que alcance a porta 9443 do servidor. Isso representa um risco se não for devidamente restringido.
Restrinja o acesso à porta do Portainer via UFW (Ubuntu/Debian):
ufw allow from SEU_IP_ADMIN to any port 9443
ufw deny 9443
Ou via iptables (Rocky Linux 9 / AlmaLinux 9):
iptables -A INPUT -p tcp --dport 9443 -s SEU_IP_ADMIN -j ACCEPT
iptables -A INPUT -p tcp --dport 9443 -j DROP
Para adicionar uma camada extra de proteção, coloque o Portainer atrás de um proxy reverso Nginx com autenticação básica ou certificado SSL válido. Crie o arquivo de configuração Nginx:
server {
listen 443 ssl;
server_name portainer.seudominio.com.br;
ssl_certificate /etc/letsencrypt/live/portainer.seudominio.com.br/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/portainer.seudominio.com.br/privkey.pem;
location / {
proxy_pass https://localhost:9443;
proxy_ssl_verify off;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
}
}
Atenção: nunca exponha a porta 9443 do Portainer diretamente à internet sem restrição de IP ou autenticação adicional. Um painel de gerenciamento de containers exposto publicamente é um vetor de ataque crítico.
Habilite também a autenticação de dois fatores (2FA) dentro do próprio Portainer: acesse Minha Conta → Autenticação de Dois Fatores e configure um aplicativo TOTP como Google Authenticator ou Authy.
Para entender melhor como proteger o acesso SSH ao seu servidor antes de configurar o Portainer, veja o guia Acessando servidores VPS Linux da AviraHost.
Usando Portainer e CLI Docker juntos: fluxo de trabalho recomendado
A abordagem mais eficiente para gerenciar containers Docker em produção não é escolher um ou outro, mas combinar os pontos fortes de cada ferramenta. Um fluxo de trabalho maduro usa a CLI para deploy e automação, e o Portainer para monitoramento e operações pontuais.
Fluxo recomendado para equipes de infraestrutura:
- Defina toda a stack de serviços em arquivos
docker-compose.ymlversionados no Git. - Use a CLI Docker (ou pipeline CI/CD) para fazer o deploy inicial:
docker compose up -d. - Use o Portainer para monitorar logs, uso de recursos e status dos containers em tempo real.
- Para reinicializações emergenciais ou ajustes rápidos, use o Portainer via interface web.
- Para mudanças estruturais (novas variáveis de ambiente, volumes, redes), edite o
docker-compose.ymle faça o redeploy via CLI. - Mantenha o Portainer atualizado regularmente:
docker pull portainer/portainer-ce:latestseguido dedocker stop portainer && docker rm portainere recrie o container com o mesmo comando de instalação.
Este fluxo garante que toda mudança estrutural seja rastreável via controle de versão, enquanto o Portainer serve como painel de observabilidade e ferramenta de resposta rápida a incidentes.
Problemas comuns e como resolver
Sintoma: Portainer não consegue conectar ao daemon Docker
Causa: o socket /var/run/docker.sock não foi montado corretamente no container do Portainer, ou as permissões do socket estão incorretas.
Solução: verifique se o volume foi mapeado corretamente no comando de criação do container (-v /var/run/docker.sock:/var/run/docker.sock). Verifique as permissões com ls -la /var/run/docker.sock — o socket deve pertencer ao grupo docker. Se necessário, adicione o usuário ao grupo: usermod -aG docker $USER e reinicie a sessão SSH.
Sintoma: interface do Portainer inacessível após reinicialização do servidor
Causa: o container do Portainer foi criado sem a opção --restart=always, portanto não sobe automaticamente após reboot.
Solução: atualize a política de restart do container existente com o comando: docker update --restart=always portainer. Para verificar a política atual: docker inspect portainer --format='{{.HostConfig.RestartPolicy.Name}}'.
Sintoma: comando docker ps retorna "permission denied"
Causa: o usuário atual não tem permissão para acessar o socket do Docker. Isso ocorre quando o usuário não pertence ao grupo docker e não está executando como root.
Solução: adicione o usuário ao grupo docker: sudo usermod -aG docker $(whoami). Faça logout e login novamente para que a mudança de grupo tenha efeito. Alternativamente, use sudo docker ps como solução temporária.
Sintoma: Portainer exibe containers mas não consegue iniciar ou parar
Causa: conflito de permissões ou o usuário logado no Portainer não tem privilégios de administrador no ambiente configurado.
Solução: acesse o Portainer com a conta de administrador principal. Verifique em Environments → Local → Browse se o ambiente está com status Up. Se o problema persistir, reinicie o container do Portainer: docker restart portainer.
Sintoma: docker compose up falha com "port is already allocated"
Causa: outra aplicação ou container já está usando a porta especificada no arquivo docker-compose.yml.
Solução: identifique qual processo está usando a porta com ss -tlnp | grep :80 (substitua 80 pela porta em conflito). Pare o serviço conflitante ou altere a porta mapeada no docker-compose.yml antes de subir novamente.
Perguntas frequentes sobre Portainer e CLI Docker
Portainer é seguro para usar em produção?
Sim, o Portainer pode ser usado em produção desde que configurado corretamente: acesso restrito por HTTPS, autenticação habilitada e porta de administração bloqueada por firewall para IPs não autorizados. Em ambientes críticos, recomenda-se também habilitar autenticação de dois fatores no painel do Portainer.
Portainer consome muitos recursos do servidor?
O Portainer CE (Community Edition) é leve e consome tipicamente menos de 100 MB de RAM em operação normal. Ele roda como um container Docker, portanto o overhead é mínimo e não interfere significativamente nos demais serviços do servidor.
Posso gerenciar múltiplos servidores Docker com o Portainer?
Sim. O Portainer suporta gerenciamento de múltiplos ambientes Docker remotos a partir de uma única interface. Você pode adicionar endpoints remotos via TCP com TLS ou via agente Portainer instalado nos servidores remotos, centralizando o controle de toda a infraestrutura.
Qual a diferença entre Portainer CE e Portainer Business?
O Portainer CE é gratuito e open source, cobrindo a maioria das necessidades de gerenciamento de containers. O Portainer Business adiciona recursos como controle de acesso baseado em papéis (RBAC) avançado, suporte a Kubernetes empresarial, auditoria de ações e suporte técnico oficial pago.
É possível usar Portainer e CLI Docker ao mesmo tempo?
Sim, ambos acessam o mesmo daemon Docker e podem ser usados simultaneamente sem conflito. Alterações feitas via CLI aparecem imediatamente no Portainer e vice-versa, pois ambos interagem com o mesmo socket Unix /var/run/docker.sock.
Conclusão
- Use o Portainer quando precisar de visibilidade rápida, gerenciar equipes com perfis mistos ou administrar múltiplos servidores Docker a partir de uma única interface web segura.
- Use a CLI Docker para automação, scripts de deploy, pipelines CI/CD e qualquer operação que precise ser reproduzível e versionada em repositórios Git.
- Combine as duas abordagens: defina e versione sua infraestrutura via Docker Compose na CLI, e use o Portainer como painel de monitoramento e resposta rápida a incidentes — essa é a estratégia mais robusta para ambientes de produção.
Leia também
- Checklist: como configurar Traefik como proxy reverso para Docker
- Solucionar lentidão no MySQL 8.0 antes que derrube sua aplicação
- Guia: Laravel não conecta ao MySQL no Debian 12
Precisa de ajuda com Docker e containers no seu servidor?
Configurar e manter ambientes Docker em produção exige um servidor com recursos adequados, rede estável e suporte técnico disponível quando você precisar. Um VPS Linux bem dimensionado é a base para rodar Portainer, Docker Compose e múltiplos containers com segurança e performance.
Conheça os planos de VPS Linux da AviraHost e comece a gerenciar seus containers hoje