Instalando o Portainer com Docker Compose

Administrar o Docker pela CLI não é algo complexo, porém para quem está começando e até mesmo para ter uma visão mais ampla do ambiente, uma interface web torna tudo mais intuitivo e simples de gerenciar. E é exatamente aí que o Portainer se destaca.

DICA IMPORTANTE

Ter uma interface web é excelente para facilitar o gerenciamento, porém é importante não depender exclusivamente dela. Em caso de falhas ou indisponibilidade da aplicação, saber utilizar o CLI garante que você conseguirá analisar e manter o ambiente funcionando.

Lembrando que parte das informações apresentadas foram extraídas da documentação oficial do Portainer. No post anterior configuramos um cluster com Docker Swarm, e agora iremos instalar o Portainer com um agente em cada Node do cluster para facilitar a gestão do ambiente.

Caso você não tenha um cluster Swarm e esteja utilizando apenas o Docker em um servidor isolado, também é possível instalar o Portainer sem o agente. Nesse cenário, a conexão entre o Portainer e o serviço Docker ocorrerá diretamente pela Docker API.

Quer montar seu ambiente Docker Swarm?

Aprenda a montar e gerenciar seu ambiente Docker Swarm de forma prática e organizada. Neste guia, você verá passo a passo como configurar o cluster

Clique aqui

Iniciando a Instalação do Portainer

Para manter tudo organizado e facilitar a gestão do projeto, vamos criar uma pasta no servidor destinada a armazenar os dados do Portainer.

A pasta portainer será a raiz do projeto. Dentro dela, criaremos a pasta dados, que terá uma função muito importante: é nela que o Portainer salvará todas as informações do seu ambiente, como configurações, usuários e histórico de containers.

Separar os dados dessa forma garante que, mesmo que algo aconteça com o Portainer ou com os containers, suas informações estarão seguras e organizadas, facilitando backups e manutenções futuras.

Meu caminho no servidor, o seu pode ser diferente:

/home/administrador/portainer/dados

mkdir portainer
cd portainer/
mkdir dados

Já dentro da pasta portainer, execute o comando abaixo, esse comando baixa o arquivo portainer-agent-stack.yml do site oficial do Portainer.


curl -L https://downloads.portainer.io/ce-lts/portainer-agent-stack.yml -o portainer-agent-stack.yml

Antes de executar, vamos ajustar o arquivo portainer-agent-stack.yml, para se adequar a nossa necessidade.


nano /home/administrador/portainer/portainer-agent-stack.yml

VERSÃO

Por padrão, o Portainer e o agente vêm configurados para usar a última versão disponível (latest). Porém, em ambientes de produção, não é recomendável utilizar o parâmetro latest. Isso acontece porque, a cada vez que a stack for atualizada, o Docker buscará automaticamente a versão mais recente da imagem. Se essa versão apresentar algum problema, seu ambiente pode ser afetado.

Para evitar esse tipo de risco, consultei o Docker Hub, verifiquei as versões disponíveis e selecionei a 2.36.0. Já utilizo essa versão em meu ambiente de produção e, até o momento, não encontrei nenhum problema.

VOLUMES

Adicionei também o nosso volume que criamos anteriormenente:

/home/administrador/portainer/dados 

Essa pasta será o local onde o Portainer armazenará todas as suas informações, incluindo base de dados e outras configurações. Com isso, sempre que o Portainer for iniciado, ele irá buscar os arquivos nessa pasta e carregar os dados.

Sem a configuração de volumes, os dados não são persistidos. Isso significa que, a cada reinício do Portainer, ele começaria zerado, sem nenhuma informação anterior.



version: '3.2'
services:

  # AGENTE PORTAINER
  portainer-agent:
    image: portainer/agent:2.36.0
    volumes:
      - /var/run/docker.sock:/var/run/docker.sock
      - /var/lib/docker/volumes:/var/lib/docker/volumes
    networks:
      - rede-portainer-local
    deploy:
      mode: global
      placement:
        constraints: [node.platform.os == linux]

  # SERVER PORTAINER
  portainer-server:
    image: portainer/portainer-ce:2.36.0
    command: -H tcp://tasks.agent:9001 --tlsskipverify
    ports:
      - "8888:9443"
      - "9000:9000"
      - "8000:8000"
    volumes:
      - /home/administrador/portainer/dados:/data
    environment:
      - TZ=America/Recife
    networks:
      - rede-portainer-local
    deploy:
      mode: replicated
      replicas: 1
      placement:
        constraints: [node.role == manager]

networks:
  rede-portainer-local:
    driver: overlay

Ajustes realizado vou descrever brevemente o que vai acontecer, temos dois serviços nesse arquivo (portainer-server e portainer-agent) coloquei assim pra melhor entender.

PORTAINER-AGENT

Esse serviço será replicado em cada servidor do Cluster, o Agent atua como um intermediário entre o Portainer (a interface web) e os nodes do cluster. Ele permite que o Portainer:

  • Se conecte de forma segura aos nodes do Docker.

  • Execute comandos e colete informações sobre containers, serviços, volumes, redes etc.

  • Gerencie múltiplos nodes em um Swarm sem precisar que o Portainer tenha acesso direto ao Docker de cada node.

PORTAINER-SERVER
 

Este serviço terá apenas uma réplica e, como mencionado anteriormente, será conectado aos Agents de cada node do cluster. Dessa forma, o Portainer Server consegue administrar todos os serviços e recursos do Docker em cada node, oferecendo uma visão centralizada e gerenciamento completo do ambiente.

 

Estando na pasta /portainer, onde está localizado o arquivo portainer-agent-stack.yml, podemos subir a Stack utilizando o seguinte comando:


docker stack deploy -c portainer-agent-stack.yml portainer

O nome portainer no final do comando acima, é o nome da stack que fica de sua preferência, você escolhe o que melhor se encaixa em seu ambiente e se tudo ocorreu normalmente, você poderá verificar as réplicas em execução utilizando o comando abaixo:

docker stack services portainer

Irá retornar algo semelhante a este abaixo, é possível ver que todas as replicas estão funcionando.


root@docker01:~# docker stack services portainer
ID             NAME                        MODE         REPLICAS   IMAGE                           PORTS
swknuekqskrz   portainer_portainer-agent   global       5/5        portainer/agent:2.36.0
hm43nbvoeedc   portainer_portainer-server  replicated   1/1        portainer/portainer-ce:2.36.0

docker stack services portainer

Só pra relembrar o nome portainer em vermelho acima, é o nome da stack que eu dei quando usamos o comando docker stack deploy -c portainer-agent-stack.yml portainer o nome da stack fica a seu critério,.

Toda vez que precisar consultar informação da stack é necessário saber o nome da stack e pra saber quais stacks estão rodando em seu Swarm e seu respectivos nomes, use o comando abaixo:

docker stack ls

Será retornado algo parecido com a informação abaixo:


root@docker01:~# docker stack ls
NAME              SERVICES
portainer         2

Com a stack funcionando, vamos acessar a interface web, precisamos saber em qual manager o portainer esta funcionando, pra isso vamos usar o comando abaixo:

docker stack ps portainer


root@docker01:~# docker stack ps portainer
ID             NAME                                              IMAGE                           NODE               DESIRED STATE   CURRENT STATE        ERROR     PORTS
k2i42xh5a3jz   portainer_portainer-agent.incoxqmp6a6kvn6lxjmpev6cb   portainer/agent:2.36.0      docker05   Running         Running 4 days ago      
1i6d1lm2iwa8   portainer_portainer-agent.kf98zk7znyiesu08k08r31tcw   portainer/agent:2.36.0      docker04   Running         Running 4 days ago      
w1g8r8b1kt5w   portainer_portainer-agent.l8w71f18npkpyh9o2zf8qq7qi   portainer/agent:2.36.0      docker01   Running         Running 4 days ago      
y5sso09ldba5   portainer_portainer-agent.t0kkphlsxmnlfh9wk9aqxcnur   portainer/agent:2.36.0      docker03   Running         Running 4 days ago
56obzngwyxto   portainer_portainer-agent.wgcs0701qylmmlsi2wii76dh0   portainer/agent:2.36.0      docker02   Running         Running 4 days ago      
o8edy1rqbnmi   portainer_portainer-server.1                          portainer/portainer-ce:2.36.0 docker02   Running         Running 4 days ago             *:8000->8000/tcp,*:8000->8000/tcp,*:9000->9000/tcp,*:9000->9000/tcp,*:9443->9443/tcp,*:9443->9443/tcp

No retorno acima esta informando que o portainer-server esta rodando no servidor docker02. Para acessar a interface Web utilizo https://IP-Servidor:9443 a principio ele vai pedir um nome de usuário e senha

Após logar no Portainer, em muitos dos casos o ambiente será detectado automaticamente no Portainer:

 

É só selecionar o ambiente.

Pronto! Portainer instalado e pronto para utilização.

Se esse material foi útil para você e te ajudou no processo, considere acompanhar o meu trabalho e ficar por dentro de novos conteúdos.

Minhas Redes:

Deixe um comentário

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *