Quando trabalhamos com contêineres, nós necessitamos de uma “imagem base” do sistema operacional que será personalizada para iniciar o ambiente e a nossa aplicação.
Essa personalização é feita em camadas de forma que se pode manter um versionamento das modificações permitindo não só rastrear como controlar as modificações permitindo que elas sejam facilmente replicáveis.
Tomando como exemplo a necessidade de se instalar um serviço web, em um ambiente físico ou de máquinas virtuais você precisa que a equipe de infra instale todas as dependências, módulos e bibliotecas para o seu serviço web (apache, nginx etc) ; em ambiente de conteineres, isso passa a ser tarefa da equipe de devs. O que acaba com aquela velha situação em que a aplicação funciona perfeitamente na máquina de desenvolvimento, mas ao levar para produção, não funciona.
Plataformas/Ferramentas para gerenciar contêineres
Algumas pessoas iniciantes no assunto, quase sempre associam contêineres ao “Docker” e acreditam que ambos tratam-se da mesma coisa, então antes de prosseguirmos vamos falar um pouco sobre isso.
O Docker é apenas uma das inúmeras ferramentas criadas para gerenciarmos contêineres de forma “amigável”, mas há outras opções de ferramentas como as que seguem na lista abaixo:
- Docker – https://docs.docker.com/
- Podman – https://podman.io/docs
- LXD – https://linuxcontainers.org/lxd/introduction/
- ConteinerD – https://github.com/containerd/containerd/blob/main/docs/getting-started.md
- Amazon Elastic Conteiner Service (AWS ECS) – https://aws.amazon.com/pt/ecs/
- Google Cloud Conteiner – https://cloud.google.com/containers
- Kubernetes – https://kubernetes.io/pt-br/docs/home/
E há muitas outras ferramentas além destas. Algumas delas seguem ao padrão OCI (Open Conteiner Initiative – https://opencontainers.org/ ), que é o padrão seguido pelo Docker e outras não.
Há ferramentas auto hospedados, mas há também aquelas que são contratadas como PaaS (Plataform As A Service – Plataforma como Serviço); Temos ferramentas gratuitas, comerciais; de código fechado, opensource etc.
Poderíamos ficar aqui listando vários serviços de gestão de contêineres e certamente passaríamos da ordem das dezenas ou talvez até centenas de ferramentas com este propósito.
Embora elas possuam interfaces diferentes, todas elas farão as mesmas tarefas essenciais e eventualmente alguns serviços adicionais que serão facilitados em detrimento de outros, conforme o andamento de cada projeto.
E o que muda dentre todas estas opções, listadas ou não, é o mesmo que você encontra quando compara um modelo de carro com outro; ou quando compara uma casa com outra; um smartphone IOS com outro Android etc.
Se você está começando com contêineres agora, minha recomendação é a mesma da maioria dos profissionais que estão na área a mais tempo. Comece com o Docker. E por que?
Porque ele é relativamente simples, prático, tem tudo o que você precisa para começar sem criar muitos traumas, pode ser usado em produção para serviços que não sejam muito complexos e será a base para você usar outras ferramentas depois.