O que são containeres?
Os containers são ambientes isolados que empacotam a aplicação junto com suas dependências (bibliotecas, runtime, configurações) para garantir que ela rode de forma idêntica em qualquer lugar, seja no seu PC, em um servidor ou na nuvem. Tecnicamente, os containers são camadas de imagem base do Linux.
As principais tecnologias são:
Docker
Kubernates
Docker Compose
Os containers vivem em repositórios de container. Várias empresas possuem seus repositórios privados onde armazenam e hospedam seus containers.
Existem também repositórios gratuítos como o Docker por exemplo, que há centenas de imagens de container e aplicações hospedadas pelo pelo próprio Repositório do Docker.
Como os containers melhoram o processo de desenvolvimento?
Vamos supor que você faz parte de em uma equipe de vários desenvolvedores que trabalham na mesma aplicação. Normalmente você tem que instalar a maioria dos serviços diretamente em nossos sistema operacional. O projeto é Javascript e Redis. Para poder rodar o projeto, você todos os demais desenvolvedores precisam instalar os binários em suas próprias máquinas locais e dependendo do sistema operacional, o processo de instalação pode ser diferente.
- Além disso, as chances de dar problemas durante a instalação das ferramentes é alta pelos números de passos de instalação de cada serviço. Essa abordagem pode ser tediosa dependendo da complexidade da sua aplicação.
Como você já viu, com os containers você não precisará instalar os serviços diretamente na sua máquina, já que o container é um ambiente isolado com todas as ferramentas já empacotadas. Então o desenvolvedor só precisa checar qual o repositório do container e baixar em sua máquina local. Onde o download será simples, com apenas com comandos docker.
Quando utilizar Container?
Essa decisão varia de vários fatores, incluindo a complexidade do sistema, necessidade, escalabilidade e portabilidade.
✅ Quando usar
-
A aplicação precisa de isolamento e portabilidade, então a aplicação deve rodar exatamente igual em diferentes ambientes (desenvolvimento, homologação e produção).
Se quiser evitar o clássico *“funciona na minha máquina, mas não no servidor”* Sistema precisa escalar rapidamente, os containers permitem escalabilidade horizontal (subir mais instâncias sob demanda)
Quando a aplicação usa múltiplos serviços (arquitertura distribuida), por exemplo, múltiplas APIs que precisam se comunicar
Quando você precisa de um CI/CD mais eficientes
Se você quer rodar a aplicação em nuvens diferentes. Os containers garantem que o sistema rode igual no AWS, Azure e Google Cloud, evitando ficar preso em um provedor específico
❌ Quando não usar
- Sua aplicação é monolítica e roda bem num servidor. Então, se o sistema é pequeno e não precisa escalar, rodar direto em uma VM pode ser suficiente. Por exemplo, rodar um simples ASP.NET MVC em um IIS no Azure
- Você não quer gerenciar infraestrutura como docker ou manutenção de contêiners.
- Seu banco de dados precisa de alta persistência e perfomance
- O time não tem experiência em containers. Devido a alta curva de aprendizado, pode mais complicar o projeto do que ajudar.
- Custo e complexidade podem ser maiores que os benefícios. Então, pode ser mais caro e complexo do que rodar diretamente em uma VM ou PasS
📊 Decisão Final: Quando Escolher?
Critério | Containers? |
---|---|
Precisa de escalabilidade dinâmica? | ✅ Sim |
Vai rodar múltiplos serviços/API’s? | ✅ Sim |
Precisa de um ambiente 100% replicável? | ✅ Sim |
O time tem experiência com Docker/Kubernetes? | ✅ Sim |
Sua aplicação é monolítica e pequena? | ❌ Não |
Prefere simplicidade em vez de flexibilidade? | ❌ Não |
Container port vs Host port
Um container é um ambiente isolado que roda dentro do host, que pode ser seu computador ou servidor. Para que o host e os containers se comuniquem, é necessário mapear portas do host para portas dentro do container.
Os sistemas operacionais possuem diversas portas que podem ser utilizadas para comunicação entre processos. No Docker, cada container pode expor suas portas para que o host possa acessá-las.
É possível rodar múltiplos containers na mesma porta dentro do container, desde que a porta no host seja diferente.
Na imagem ao lado temos o seguinte cenário:
- O primeiro container roda na porta 5000 no host 5000
- O segundo container roda na porta 3000 no host 3000
- O terceiro container roda na porta 3001 no host 3000
Analisando com cautela, só teremos conflitos caso exista uma porta de host para o mesmo container.
Prática
Vamos praticar o que acabamos de ler? Vamos rodar todas as portas e containers e além disso vamos rodar uma quarta, e esta será o conflito. Onde a porta do host ja terá sido usada
Precisamos rodar um container na porta 5000 do host mapear para a porta 5000 do container.
docker run -d -p 5000:5000 redis
Outro container roda na porta 3000 do host e está mapeado para a porta 3000 do container.
docker run -d -p 3000:3000 redis
Um terceiro container roda na porta 3001 do host, mas está mapeado para a porta 3000 do container.
docker run -d -p 3001:3000 redis
Se tentarmos iniciar um novo container na mesma porta do host já utilizada por outro container, ocorrerá um erro de conflito de portas.
Se já existe um container rodando na porta 3000 do host e tentarmos iniciar outro container na mesma porta:
docker run -d -p 3000:3000 redis
O Docker retornará um erro informando que a porta já está em uso.
Top comments (0)