Don’t Do That – Forçar IP’s nos Containers Docker
Publicado em: domingo, 24 de fev de 2019
Tags: Docker

Então você resolveu ou intuiu que deveria configurar os IP’s de seus containers? Pois bem, please, don’t do that!

O que está errado?

Diferente de um servidor, ou uma máquina virtual, todo container nasceu para morrer. Isso quer dizer que por ser imutável e assim efêmero, inúmeras circunstâncias fazem com que seu container seja deletado, removido, extirpado, eliminado, dizimado da existência para todo o sempre. Vejamos:

Quando você quer atualizar a versão do runtime:

  1. Cria nova imagem com o novo runtime
  2. Sobe a imagem para um docker registry onde seu cluster docker tenha acesso.
  3. Dropa o container na versão antiga
  4. Recria o container com a nova imagem

Quando você quer fazer um update no container:

  1. Dropa o container na versão antiga
  2. Recria o container com a nova versão dos parâmetros

Quando você quer fazer update da aplicação que está no container:

Aqui só tem uma exceção, quando você usa seu container como um server, servindo uma aplicação que está no disco, fora do container. Isso é comum com aplicações baseadas em linguagens interpretadas, como PHP. Mas em deploys PHP de larga escala, essa ideia de usar docker como server não performa. Portanto falando exclusivamente de aplicações de grande porte ao atualizar uma versão da aplicação você:

  1. Cria nova imagem com a nova versão da aplicação
  2. Sobe a imagem para um docker registry onde seu cluster docker tenha acesso.
  3. Dropa o container na versão antiga
  4. Recria o container com a nova imagem

 

Você pode dizer:

– Ah, mas docker tem docker update! 

– É?

Negativo, olha o que você consegue alterar com docker update:

Docker update NÃO

  • não altera binding para file system
  • não adiciona volume
  • não altera portas

Enfim, serve para essas opções que estão aí, e só.

Explicação

Naturalmente não é para virar um caos, embora possa entregar um IP externo para seu container, ou ainda usar a rede host, na prática na maioria das vezes você só precisa expor a porta que quer enxergar fora do cluster. Isso nos deploys mais amadores.

Quando você começa a trabalhar com docker no dia-a-dia, vai chegar à conclusão naturalmente que precisará de um proxy reverso (pois na prática, você vai acabar querendo expor a mesma porta de diversos containers, como a porta 80 e 443).

Então em um deploy em um ambiente real, somente o proxy reverso será exposto, e nenhum container exposto via proxy reverso terá suas portas com binding.

Sim, quase todos os containers da sua infra não terão nenhuma porta exposta.

Só terão aqueles que você quer acessar fora do fluxo HOST -> Container Proxy Reverso -> Container de Aplicação, seja para troubleshooting ou por outro motivo específico, como ser uma porta exclusiva.

Mas qual é a mágica?

Redes, como a rede bridge, que detalho no vídeo Docker – de A a Z – 13 – Bridge Network, possuem resolução de nomes nativa, isso quer dizer que na mesma rede o containerA acessa a porta 100 do containerB usando containerB:100 como se houvesse uma entrada no DNS. Simples assim.

Você vai ver o mesmo comportamento quando falo de Nginx no Canal .NET ou no projeto Enterprise Application Log em que falo de um stack inteirro com ElasticSearch, LogStash, Kibana e RabbitMQ cooperando para criar uma infraestrutura de log.

E não me venha com churumelas achando que vai ficar lento, não vai.

Disclaimer

É possível que teu cenário de fato seja uma exceção, mas a probabilidade tende a dizer que NÃO, é mais provável que você só esteja pulando uma etapa no aprendizado e tentando fazer algo da forma que conhece. Essa série tem como objetivo apresentar erros comuns. E não há problema nenhum se não concordar, meu papel aqui é recomendar e te ajudar na tomada de decisão.

Conclusão

Essa é uma pergunta super comum e estou produzindo esse texto pois já vi essa pergunta uma pá de vezes. Espero ter esclarecido algo, mas caso não tenha ajudado em nada, por favor, não deixe de deixar seu recado mal criado nos comentários! Brincadeira, caso falte alguma coisa, comente, eu preciso saber se esse texto foi ou não relevante para você!

Luiz Carlos Faria

Mensagem do Autor

Espero que goste desse post. Não deixe de comentar e falar o que achou. 

Se acha que esse post pode ajudar alguém que você conheça, compartilhe!

 

Eventos passados

setembro 2020
agosto 2020
julho 2020
Nenhum evento encontrado!
Carregar Mais

Publicidade

Assine

0 comentários

Trackbacks/Pingbacks

  1. RabbitMQ & AMQP – #5 – Management UI, Filas e Exchanges | | gaGO.io - […] Há diversas formas de subir uma instância do RabbitMQ, uma delas é com Docker, e está aqui um exemplo…

Enviar um comentário

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

Esse site utiliza o Akismet para reduzir spam. Aprenda como seus dados de comentários são processados.

Lives

Fique de olho nas lives

Fique de olho nas lives no meu canal do Youtube, no Canal .NET e nos Grupos do Facebook e Instagram.

Aceleradores

Existem diversas formas de viabilizar o suporte ao teu projeto. Seja com os treinamentos, consultoria, mentorias em grupo.

Agenda & Eventos

agosto

setembro 2020

outubro
DOM
SEG
TER
QUA
QUI
SEX
SAB
30
31
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
1
2
3
Events for 1st setembro
Sem Eventos
Events for 2nd setembro
Sem Eventos
Events for 3rd setembro
Sem Eventos
Events for 4th setembro
Sem Eventos
Events for 5th setembro
Sem Eventos
Events for 6th setembro
Sem Eventos
Events for 7th setembro
Sem Eventos
Events for 8th setembro
Sem Eventos
Events for 9th setembro
Sem Eventos
Events for 10th setembro
Sem Eventos
Events for 11th setembro
Sem Eventos
Events for 12th setembro
Sem Eventos
Events for 13th setembro
Sem Eventos
Events for 14th setembro
Sem Eventos
Events for 15th setembro
Sem Eventos
Events for 16th setembro
Sem Eventos
Events for 17th setembro
Sem Eventos
Events for 18th setembro
Sem Eventos
Events for 19th setembro
Sem Eventos
Events for 20th setembro
Sem Eventos
Events for 21st setembro
Sem Eventos
Events for 22nd setembro
Sem Eventos
Events for 23rd setembro
Sem Eventos
Events for 24th setembro
Sem Eventos
Events for 25th setembro
Events for 26th setembro
Sem Eventos
Events for 27th setembro
Sem Eventos
Events for 28th setembro
Sem Eventos
Events for 29th setembro
Sem Eventos
Events for 30th setembro
Sem Eventos
Share This