Docker Management · 13 min read · Sep 22, 2025
Como Instalar e Usar o Portainer para Gerenciamento de Docker com Nginx Proxy Manager

Portainer é uma solução de gerenciamento de contêineres de código aberto para Docker, Kubernetes e Nomad que simplifica o início, a criação e a execução de contêineres de maneira fácil. Ele fornece um painel baseado na web para gerenciar contêineres, imagens, redes e volumes.
Neste tutorial, você aprenderá a instalar e configurar a solução de gerenciamento de contêineres Portainer em um servidor Linux e usá-la para criar e gerenciar contêineres Docker para executar diferentes aplicativos. Você também aprenderá a colocar esses contêineres atrás do Nginx usando o gerenciador de proxy Nginx.
Pré-requisitos
- Um servidor Linux executando Ubuntu / Debian / Cent OS / Rocky Linux 8 / Alma Linux.
- Um usuário não-root com privilégios sudo.
- Um Nome de Domínio Totalmente Qualificado (FQDN) apontando para o servidor para Portainer (
portrainer.example.com) e Nginx Proxy Manager (npm.example.com).
Passo 1 - Configurar o Firewall
Cent OS/Rocky Linux/Alma Linux
Você deve ter o firewall Firewalld instalado. Verifique o status do firewall.
$ sudo firewall-cmd --state
running
Abra as portas 80, 9443 e 443. O Portainer usa a porta 9443 para expor sua interface web via HTTPS. O Nginx Proxy Manager usa a porta 81 para sua interface.
$ sudo firewall-cmd --permanent --add-service=http
$ sudo firewall-cmd --permanent --add-service=https
$ sudo firewall-cmd --permanent --add-port=9443/tcp
$ sudo firewall-cmd --permanent --add-port=81/tcp
Recarregue o firewall para habilitar as alterações.
$ sudo firewall-cmd --reload
Ubuntu/Debian
Os sistemas Ubuntu e Debian usam ufw (Uncomplicated Firewall) por padrão.
Verifique se o firewall está em execução.
$ sudo ufw status
Se estiver em execução, abra as portas 80, 9443 e 443.
$ sudo ufw allow 80
$ sudo ufw allow 443
$ sudo ufw allow 9443
$ sudo ufw allow 81
Abra a porta SSH se o firewall não estiver em execução.
$ sudo ufw allow "OpenSSH"
Habilite o firewall se ele não estiver em execução.
$ sudo ufw enable
Se estiver em execução, recarregue-o para aplicar as alterações.
$ sudo ufw reload
Passo 2 - Instalar o Docker
Cent OS/Rocky Linux/Alma Linux
Execute o seguinte comando para instalar o Docker.
$ sudo yum install -y yum-utils
$ sudo yum-config-manager \
--add-repo \
https://download.docker.com/linux/centos/docker-ce.repo
$ sudo yum install docker-ce docker-ce-cli containerd.io
Ubuntu
$ sudo apt install ca-certificates curl gnupg lsb-release
$ curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg
$ echo "deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/ubuntu \
$(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
$ sudo apt update
$ sudo apt install docker-ce docker-ce-cli containerd.io
Debian
$ sudo apt install ca-certificates curl gnupg lsb-release
$ curl -fsSL https://download.docker.com/linux/debian/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg
$ 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" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
$ sudo apt update
$ sudo apt install docker-ce docker-ce-cli containerd.io
Habilite e inicie o serviço Docker.
$ sudo systemctl start docker --now
Adicione seu nome de usuário ao grupo Docker.
$ sudo usermod -aG docker $USER
Saia do sistema e faça login novamente para aplicar a alteração.
Passo 3 - Instalar o Docker Compose
Baixe e instale o binário do Docker Compose.
$ sudo curl -L "https://github.com/docker/compose/releases/download/1.29.2/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
Aplique permissão executável ao binário.
$ sudo chmod +x /usr/local/bin/docker-compose
Passo 4 - Instalar o Portainer
Crie um diretório para o Portainer.
$ mkdir ~/portainer
Mude para o diretório.
$ cd ~/portainer
Crie e abra o arquivo Docker Compose para edição.
$ nano docker-compose.yaml
Cole o seguinte código nele.
version: "3.3"
services:
portainer:
image: portainer/portainer-ce:latest
container_name: portainer
restart: always
privileged: true
volumes:
- ./data:/data:Z
- /var/run/docker.sock:/var/run/docker.sock:Z
ports:
- 9443:9443
Salve o arquivo pressionando Ctrl + X e digitando Y quando solicitado.
Vamos analisar o arquivo Docker Compose.
- Estamos puxando a versão mais recente da Edição Comunitária do Portainer do Docker Hub. A Edição Comunitária do Portainer é gratuita para uso, enquanto a edição Empresarial requer uma licença paga. Você pode puxar a Edição Empresarial, mas será solicitado a chave de licença para usá-la.
- Nomeamos nosso contêiner como
portainerpara fins de identificação e vinculação. - A política de reinício está definida como
alwayspara que o contêiner permaneça ativo durante a inicialização. - A configuração
privileged: trueé para que o Portainer possa acessar o socket do Docker e executar em um contexto privilegiado, uma vez que estamos usando o SELinux. Se você não estiver usando o SELinux, pode remover essa configuração. Essa configuração dá ao contêiner do Portainer acesso a tudo no sistema host, incluindo acesso ao hardware. Portanto, habilite essa configuração apenas quando souber o que está fazendo. - A seção
volumesmapeia a pasta no host para as pastas no contêiner usando montagens de Bind. Expondo o diretório~/portainer/dataao contêiner para armazenar quaisquer dados relevantes e a API do socket do Docker para gerenciamento de contêineres. O rótulo:Zinforma ao Docker que estamos executando o SELinux em nosso host. Se você não tiver o SELinux habilitado, deve remover o rótulo.
Inicie o Portainer.
$ docker-compose up -d
Verifique o status do contêiner.
$ docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
916411e8d12e portainer/portainer-ce:latest "/portainer" 5 seconds ago Up 4 seconds 8000/tcp, 9000/tcp, 0.0.0.0:9443->9443/tcp, :::9443->9443/tcp portainer
Passo 5 - Acessar e Configurar o Portainer
Abra a URL https:// em seu navegador, e você verá a seguinte tela.

Você será solicitado a criar um novo usuário administrador. Adicione os detalhes do seu usuário. Desmarque a caixa Permitir coleta de estatísticas anônimas se você se preocupa com a privacidade. Clique no botão Criar usuário para iniciar a instalação e criar uma nova conta de administrador.
Em seguida, você será levado à seguinte tela do painel.

Após alguns segundos, ele será atualizado automaticamente e mostrará a seguinte tela.

Ele mostrará o ambiente local no qual o Portainer está sendo executado. Clique no ambiente local para começar.

A maioria das seções é autoexplicativa. A seção Stacks ajuda na criação de contêineres usando arquivos Docker Compose. Você pode implantar contêineres diretamente usando a categoria Containers na barra lateral. Você pode configurar o ambiente Docker atual através da seção Hosts. A seção App Templates vem com arquivos Docker Compose pré-instalados para instalar os aplicativos mais comuns. Você também pode criar modelos personalizados.
A seção Settings permite que você configure várias configurações, como adicionar registros Docker personalizados, adicionar vários hosts para Docker swarm, configurar o acesso do usuário, fazer backup de dados e personalizar o Portainer.
Passo 5 - Colocar o Portainer atrás de um proxy reverso usando o Nginx Proxy Manager (NPM)
Antes de prosseguir, vamos colocar o Portainer atrás de um proxy reverso usando o Nginx Proxy Manager. O Nginx Proxy Manager é um aplicativo Docker que fornece uma interface de gerenciamento web para configurar o Nginx como um host de proxy reverso. Ele também pode ser usado como um host de redirecionamento ou streaming.
Instalar o NPM
O primeiro passo é criar uma rede para o Nginx Proxy Manager (NPM). Abra a seção Networks e clique no botão Add Network para criar uma nova rede.

Dê um nome à rede e deixe todas as configurações inalteradas. Clique no botão Create the network para finalizar.

Visite a seção Stacks e crie uma nova pilha usando o botão Add stack.

Nomeie a pilha como nginx-proxy-manager e cole o seguinte código nela.
version: "3.3"
services:
npm-app:
image: 'jc21/nginx-proxy-manager:latest'
container_name: npm-app
restart: unless-stopped
ports:
- '80:80' # Porta HTTP Pública
- '443:443' # Porta HTTPS Pública
- '81:81' # Porta Web Admin
# Adicione qualquer outra porta de Stream que você deseja expor
# - '21:21' # FTP
environment:
DB_MYSQL_HOST: "npm-db"
DB_MYSQL_PORT: 3306
DB_MYSQL_USER: "npm"
DB_MYSQL_PASSWORD: ${DB_MYSQL_PASSWORD}
DB_MYSQL_NAME: "npm"
# Descomente a linha abaixo se o IPv6 não estiver habilitado em seu host
# DISABLE_IPV6: 'true'
volumes:
- ./npm-data:/data:Z
- ./letsencrypt:/etc/letsencrypt:Z
depends_on:
- npm-db
networks:
- npm-network
- npm-internal
npm-db:
image: 'mariadb:latest'
container_name: npm-db
restart: unless-stopped
environment:
MYSQL_ROOT_PASSWORD: ${MYSQL_ROOT_PASSWORD}
MYSQL_DATABASE: 'npm'
MYSQL_USER: 'npm'
MYSQL_PASSWORD: ${DB_MYSQL_PASSWORD}
volumes:
- ./npm-data/mysql:/var/lib/mysql:Z
networks:
- npm-internal
networks:
npm-internal:
npm-network:
external: true

Definimos duas variáveis de ambiente para definir as senhas do banco de dados e do root MySQL. O Portainer pode ser usado para definir segredos usando variáveis de ambiente. Role para baixo na página e clique no botão Add environment variable para adicionar senhas fortes.

Clique no botão Deploy the stack para criar e iniciar o contêiner NPM.
Acessar o NPM
Abra a URL https:// em seu navegador, e você verá a seguinte tela. Insira as seguintes credenciais padrão para fazer login.
Endereço de e-mail: [email protected] Senha: changeme
Em seguida, você será solicitado a definir um nome e um endereço de e-mail. Clique no botão Save, e você será solicitado a criar uma nova senha. Clique no botão Save novamente para começar.

Visite Hosts >> Proxy Hosts e clique no botão Add Proxy Host.

Insira o nome do domínio como portainer.example.com. Escolha o esquema como https. Insira o nome do contêiner como Forward Hostname e 9443 como Forward port. Marque as opções Block Common Exploits e Websockets Support.

Mude para a aba SSL e selecione Request a new SSL Certificate no menu suspenso. Marque as opções Force SSL e HTTP/2 Support para proteger e otimizar sua conexão SSL. Insira o endereço de e-mail para receber notificações de renovação e concorde com os termos de serviço. Clique no botão Save para finalizar a configuração do Proxy Host para o Portainer.
Conectar o Portainer ao Contêiner NPM
Configuramos o Proxy host, mas o contêiner ainda não está conectado à rede NPM. Volte ao painel do Portainer, visite a seção Containers e selecione o contêiner portainer.
Selecione npm-network no menu suspenso na seção Connected networks e clique no botão Join network para adicionar o contêiner Portainer à rede do gerenciador de proxy.

Você pode receber um erro, mas atualize a página e você deve ver o contêiner adicionado à rede NPM.

Você deve ser capaz de acessar o Portainer usando a URL https://portainer.example.com em seu navegador.
Você pode seguir um procedimento semelhante para colocar o NPM atrás de uma URL publicamente acessível como https://npm.example.com, conforme discutido em nosso tutorial do Nginx Proxy Manager.
Agora que você configurou uma URL pública para o Portainer, pode remover a porta 9443 exposta. Para fazer isso, volte ao Terminal e mude para o diretório do portainer.
$ cd ~/portainer
Abra o arquivo Docker Compose para edição.
$ nano docker-compose.yaml
Remova a seção de portas comentando-a, conforme mostrado abaixo.
version: "3.3"
services:
portainer:
image: portainer/portainer-ce:latest
container_name: portainer
restart: always
privileged: true
volumes:
- ./data:/data:Z
- /var/run/docker.sock:/var/run/docker.sock:Z
#ports:
# - 9443:9443
networks:
- npm-network
networks:
npm-network:
external: true
Salve o arquivo pressionando Ctrl + X e digitando Y quando solicitado.
Aqui, adicionamos os detalhes da rede NPM porque precisaremos reiniciar o contêiner Portainer.
Pare o contêiner Portainer.
$ docker-compose down --remove-orphans
Inicie o contêiner novamente com a configuração atualizada.
$ docker-compose up -d
Passo 6 - Implantar um contêiner usando o Modelo de Aplicativo
O Portainer fornece vários modelos pré-definidos para lançar aplicativos diretamente com configuração mínima.

Visite a seção App Templates e selecione qualquer modelo. Dê um nome a ele e selecione a rede para uso. Use a seção de opções avançadas para implantar portas, redes e montagens de volume personalizadas.
Clique no botão Deploy the container para finalizar a implantação do seu aplicativo. Aqui estamos implantando o contêiner Redis.

Passo 7 - Gerenciar Contêineres
Vamos gerenciar um contêiner existente. Abra a página de contêineres e você verá todos os contêineres em execução.

Clique no contêiner hw-redis recém-criado para prosseguir.

Na parte superior, você pode ver uma lista de ações que pode realizar em um contêiner em execução. Você pode parar e matar o contêiner. Recriar criará o contêiner do zero. A opção Duplicate/Edit permitirá que você crie outro contêiner idêntico, permitindo que você altere as configurações antes de lançá-lo.
O status do contêiner mostra o tempo de execução, endereço IP e outros detalhes sobre o contêiner.
A opção Logs mostra a saída do comando docker logs. Como a saída do comando não é armazenada em cache, toda vez que você atualiza a página, o comando é executado do zero.

A opção Inspect executa o comando docker inspect no contêiner e mostra sua saída.

A opção Stats mostra o uso do contêiner em tempo real.

Você pode iniciar o console do Contêiner usando a opção Console. Você será solicitado a fornecer o comando e o usuário do sistema para executar.

Pressione o botão Connect para iniciar o console.

A opção Attach executa o comando docker attach.
Existem outras opções na página de detalhes do Contêiner. Você pode criar uma imagem usando um contêiner existente. Outras opções incluem alterar a política de reinício de um contêiner e conectar ou desconectar uma rede a um contêiner existente.
Anexar um contêiner externo ao Portainer
Criar qualquer contêiner fora do Portainer aparecerá dentro dele, desde que seja criado no mesmo sistema em que o Portainer está sendo executado. Isso é possível porque o Portainer está conectado ao Docker usando o websocket.
Vamos testar executando o contêiner Hello World do Docker.
$ docker run hello-world
Unable to find image 'hello-world:latest' locally
latest: Pulling from library/hello-world
2db29710123e: Pull complete
Digest: sha256:10d7d58d5ebd2a652f4d93fdd86da8f265f5318c6a73cc5b6a9798ff6d2b2e67
Status: Downloaded newer image for hello-world:latest
Hello from Docker!
This message shows that your installation appears to be working correctly.
To generate this message, Docker took the following steps:
1. The Docker client contacted the Docker daemon.
2. The Docker daemon pulled the "hello-world" image from the Docker Hub.
(amd64)
3. The Docker daemon created a new container from that image which runs the
executable that produces the output you are currently reading.
4. The Docker daemon streamed that output to the Docker client, which sent it
to your terminal.
To try something more ambitious, you can run an Ubuntu container with:
$ docker run -it ubuntu bash
Share images, automate workflows, and more with a free Docker ID:
https://hub.docker.com/
For more examples and ideas, visit:
https://docs.docker.com/get-started/
Verifique a lista de contêineres no terminal. Estamos usando a flag -a para mostrar a lista de todos os contêineres, incluindo os parados. Você pode ver o nome do contêiner como sad_williamson.
$ docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
5fa46b85d594 hello-world "/hello" 3 minutes ago Exited (0) 3 minutes ago sad_williamson
.....
Agora, verifique a página de Contêineres do Portainer, e o contêiner hello world aparecerá como parado na lista com o mesmo nome.

Conclusão
Isso conclui nosso tutorial sobre como instalar e usar o Portainer para gerenciamento de Docker e Nginx Proxy Manager. Vamos explorar a construção de imagens Docker, criação de contêineres personalizados e uso do Portainer com Docker swarm em um próximo tutorial. Se você tiver alguma dúvida, poste nos comentários abaixo.
Receba novas postagens na sua caixa de entrada
Sem spam. Cancele a assinatura a qualquer momento.