Olá a todos!!
Sim eu sei. Não paro de fazer posts com containers. Containers para aqui e para ali e no entanto, só falo em usar containers que já estão publicamente disponíveis, com as suas qualidades e defeitos. E sobre os que nós queremos fazer? Escrever nós de raiz?
O mundo do desenvolvimento de software tem avançado a uma velocidade vertiginosa até agora – esperem até as pessoas começarem a usar AI para melhorar o seu trabalho – e uma das grandes revoluções dos últimos tempos foi o uso da tecnologia que permite containers. Longe vão os tempos de “isto funciona na minha máquina” mas quando é feito o upload para o ambiente de servidores, a coisa não funciona corretamente.
Foi precisamente nesta premissa que a tecnologia floresceu. Mas não nos deixemos enganar por quem diz que isto é passageiro: os containers vieram para ficar, e não só simplificam o processo de desenvolvimento, como também ajudam a garantir que as nossas aplicações funcionam bem em qualquer ambiente desde que suporte corretamente o que escrevemos.
No meio de tudo isto, o Forklift destaca-se como uma ferramenta muito útil, que nos pode ajudar a dar vida a containers personalizados para as nossas próprias aplicações, sem grandes dores de cabeça.Se nunca ouviram falar do Forklift, não se preocupem! Neste post, iremos explorar como esta ferramenta nos facilita a vida, explicando passo a passo como podemos usá-la para construir, gerir e implementar as nossas próprias aplicações em containers.
A complexidade também não deverá uma preocupação: o Forklift é mais simples do que parece e irá nos poupar uma quantidade apreciável de tempo.
O Que é o Forklift?
Para começarmos com o pé direito, vamos entender o que é realmente o Forklift. Desenvolvido pela equipa da Infoxchange, o Forklift é uma ferramenta open-source projetada para nos auxiliar a construir e gerir containers Docker. Essencialmente, funciona como um “orquestrador” de containers em linha de consola, que simplifica os comandos que precisamos de executar e automatiza várias tarefas.
O Forklift facilita a integração de componentes, o controlo de versões (quem faz tracking de containers do docker hub sabe a falta que isto faz), a gestão de dependências e a configuração do ambiente de execução.
Agora perguntam: “Eu não posso fazer tudo o que acabaste de dizer com o Docker diretamente?”. Sim, podem! Mas o Forklift traz-nos uma série de conveniências, como templates pré-configurados, comandos simplificados e um sistema de configuração centralizado que torna o processo muito mais eficiente.
Em vez de estarmos a repetir comandos ou a perder tempo com configurações manuais, o Forklift springs into action para nos ajudar a forcar no desenvolvimento da aplicação propriamente dita.
Porquê Usar o Forklift?
Não sejamos hipócritas. Todos sabemos que o processo de criar e manter containers, mesmo usando o Docker, muito rapidamente se torna um pesadelo. Entre dependências desatualizadas, ambientes incompatíveis, e configurações que nunca mais acabam, acabamos por perder tempo. Com o Forklift, temos uma solução simples e eficiente para os nossos projetos em containers, porque:
- Centraliza Configurações: Em vez de termos várias configurações espalhadas, podemos consolidar tudo num único local, tornando mais fácil a gestão e a implementação.
- Templates e Configurações Pré-Definidas: O Forklift vem com templates que agilizam em muito o nosso trabalho, especialmente em projetos mais complexos.
- Automatização e Orquestração: Já sabiam que eu ia dizer isto. A ferramenta cuida da execução de comandos repetitivos e da gestão de múltiplos containers em simultâneo.
Essas vantagens tornam o Forklift uma escolha interessante para equipas de desenvolvimento (e nós) que querem otimizar o seu fluxo de trabalho e garantir que tudo funcione sem problemas, independentemente do ambiente onde o código é executado.
Como Começar com o Forklift?
Instalação do Forklift
O primeiro passo será instalar o Forklift. Vamos precisar de ter o Docker instalado no nosso sistema, pois o Forklift é construído sobre ele. A instalação é simples e podemos fazê-la clonando o repositório oficial do Forklift do GitHub.
git clone https://github.com/infoxchange/docker-forklift.git cd docker-forklift
Nota: existem outras formas de fazer o deployment, por exemplo com o pip, mas não a abordaremos aqui.
Configuração do Ambiente de Trabalho
No Forklift, as configurações ficam centralizadas, o que é uma vantagem. Em vez de se perder tempo com ficheiros de configuração isolados, podemos configurar tudo a partir de um único lugar. Para começar, basta configurar o ficheiro `.env`, onde definimos variáveis como as versões das dependências e as configurações específicas ao nosso ambiente. Podemos inclusivé guardar em repositórios git pessoais e hosted on-prem.
cp example.env .env vi .env
Nota: no `.env`, configuramos as variáveis que vamos precisar, como o nome do projeto, portas expostas, dependências, e outras configurações relevantes. Esta abordagem centralizada torna a configuração inicial muito mais simples, especialmente para equipas que trabalham com várias pessoas.
Criação de Templates e Dockerfiles Personalizados
Um dos pontos fortes do Forklift é a possibilidade de criar templates para Dockerfiles, permitindo-nos reaproveitar configurações e agilizar o processo de criação de containers. Podemos simplesmente alterar o template base e adaptá-lo às nossas necessidades, sem termos que começar do zero cada vez que precisamos de um novo container.
forklift create template nome_template
Aqui neste ficheiro, podemos definir todas as dependências e scripts de instalação que o nosso projeto vai precisar. Por exemplo, podemos configurar uma stack LAMP (Linux, Apache, MySQL, PHP) num único template, que poderá ser reutilizado para projetos futuros.
Gerindo Múltiplos Containers com Facilidade
A maioria de nós já trabalhou em projetos que precisavam de mais do que um container – talvez um para a aplicação backend, outro para o frontend, e talvez ainda um para a base de dados. Gerir múltiplos containers pode ser complicado, mas o Forklift facilita igualmente bastante este processo.
Criação de Múltiplos Containers
Com o Forklift, podemos definir múltiplos containers no mesmo projeto e gerir todos a partir de um único ponto. Isto é especialmente útil em aplicações de micro serviços, onde cada componente da aplicação funciona em seu próprio container.
forklift run nome_do_container
Este comando irá criar e iniciar o container com as configurações que definimos no template, sem que precisemos de mexer manualmente em ficheiros ou comandos do Docker. Podemos repetir este processo para quantos containers forem necessários.
Rede Entre Containers
Outra coisa que dolorosamente sabemos que, em ambientes com múltiplos containers, é essencial garantir que os containers “falam” entre si. Com o Forklift, configuramos as redes dos containers de forma rápida, garantindo a comunicação entre eles sem grandes complicações.
forklift network create nome_da_rede forklift network connect nome_do_container nome_da_rede
Isto simplifica a integração de diferentes componentes da nossa aplicação, assegurando que tudo funciona de forma coesa como é desejado.
Automatização e Integração Contínua
Hoje em dia, praticamente todos os projetos beneficiam de automatização e integração contínua CI/CD. O Forklift facilita a integração com ferramentas de CI/CD como o Jenkins, GitHub Actions ou GitLab CI. Basta configurarmos os nossos scripts no `.env`, e o Forklift cuida da criação dos containers e da execução de testes de forma automática.
Configuração de CI/CD com Forklift
Com um ambiente configurado e o Forklift a cuidar dos containers, podemos facilmente incluir comandos no nosso pipeline de CI/CD. Isto permite que a nossa aplicação seja testada e implantada automaticamente, sem necessidade de intervenção manual.
forklift build && forklift test
Testes Automatizados
Com os templates do Forklift, conseguimos configurar containers de teste que podem ser utilizados sempre que há uma atualização no código. Este processo assegura que o código é testado em condições idênticas ao ambiente de produção, evitando problemas de compatibilidade e garantindo que tudo corre como planeado.
Dicas e Truques para Tirar o Máximo Proveito do Forklift
Agora que chegamos aqui, devem estar com vontade de experimentar o Forklift (ou pelo menos a considerar a ideia!). Para que possam tirar o máximo proveito desta ferramenta, deixo aqui algumas dicas e truques:
- Aproveitem os Templates: Criem templates para diferentes tipos de projetos que façam regularmente. Por exemplo, um template para aplicações em Node.js, outro para Django, etc. Isso vai poupar vos imenso tempo!
- Mantenham o `.env` Atualizado: Como o `.env` centraliza as configurações, qualquer alteração que façam lá terá impacto nos vossos containers. Isto é ótimo, mas também requer que tenhamos cuidado para não fazer alterações desnecessárias. Preferencialmente com controle de versões. Ask me how i know…
- Automatizem Testes com os vossos Containers: Com o Forklift, podem criar containers de teste dedicados que verificam o estado da vossa aplicação sempre que há uma atualização. Automatizem o máximo possível!
- Utilizem o `docker-compose` com Forklift: Apesar do Forklift já centralizar por si muita coisa, ele funciona muito bem com o `docker-compose`, o que irá ajudar ainda mais na gestão de múltiplos containers.
E chegamos a mais um post semanal. Neste apresentei para os que não conheciam o Forklift, e como é uma ferramenta fantástica para quem trabalha regularmente com containers e quer simplificar a sua vida. Com ele, conseguimos centralizar as nossas configurações, criar containers rapidamente e garantir que tudo está a funcionar como deveria.
Para além disto, facilita a gestão de múltiplos containers e pipelines de integração contínua, sendo uma solução completa para desenvolvimento em ambientes Docker.
Até a próxima semana. E já sabem, se encontrarem alguma coisa errada, ou tiverem alguma sugestão sabem onde me encontrar.
Um abraço.
Nuno
PS: Esta semana o primeiro dos meus sponsors faz 10 anos de atividade. Parabéns IPDROID por 10 anos a inovar, a crescer e a disponibilizar soluções modernas a custo justo.