Fala galera, beleza? Primeiro, parabéns por a gente ter chegado até aqui. A gente passou de um monte de coisa já, já falamos de uma porrada de assuntos. E o último, na minha opinião, era um dos mais complexos, que era falar sobre rede. Acho que a gente foi super bem, vocês estão aqui até agora. Então, parabéns por terem chegado até aqui. Aquela igole de café deu certo. Vocês conseguiram aguentar eu falando um tempão e depois o Aminadab falando, então meus parabéns. Espero que vocês tenham gostado tanto da minha aula quanto da aula do Aminadab. E estamos juntos, vamos em frente agora a falar dos próximos assuntos, a gente ainda tem bastante coisa para aprender e a gente vai ficar junto mais um tempinho aqui. Agora a gente vai começar a falar um pouquinho sobre container. A gente vai falar, na verdade, o nosso objeto de estudo vai ser o ECS e o EKS. Então a gente vai falar bastante sobre essas duas ferramentas. Mas para falar delas a gente precisa saber de container. E como a gente precisa estar todo mundo na mesma página, eu vou dar uma passada sobre o conceito de container para quem ainda não conhece. Se você já conhece, vamos relembrar. A gente vai junto aqui falar um pouquinho de como isso funciona e entrar um pouquinho no detalhe de como os containers vão trabalhar depois junto com o ECS e com o ECS. Quando a gente está falando dos containers, como é que eles funcionam em linhas gerais? Eu não vou chegar no detalhe total de como um container trabalha assim por diante, mas eu queria entrar com vocês pelo menos em como um container funciona em linhas gerais, como é que esse cara vai trabalhar com a gente no dia a dia. Então vamos lá. Um container, no final das contas, ele é uma unidade padrão de software que empacota os códigos e todas as suas dependências para que a aplicação execute de forma rápida e confiável. O que isso significa? Significa o seguinte. Imagina que você tem uma aplicação para subir. significa o seguinte, imagina que você tem uma aplicação para subir, essa aplicação tem suas dependências, tem ali todas as suas arquivas de configuração, biblioteca, uma porrada de variável de ambiente, uma porrada de coisa ali que a aplicação precisa para existir, beleza? Quando a gente sobe ela no sistema operacional, aquele vulgo roda na minha máquina, sabe? Eu instalei aqui no meu sistema operacional, funcionou, instalei no sistema operacional do meu amiguinho, nem sempre funciona. Então, o que acontece? Quando a gente instala as aplicações, elas têm todas essas dependências que elas vêm junto. Vocês sabem muito bem disso. Essas dependências, quando a gente está falando de um container, elas já são uma imagem dentro do container, ou seja, tudo que aquilo precisa para executar vai estar ali dentro desse container, fazendo com que essa imagem encapsulada do seu sistema esteja pronta para rodar. Quando a gente está falando, por exemplo, de uma aplicação instalada em um servidor on-premises sem utilização de container, por exemplo, a gente só instala isso naquele equipamento e depois se a gente precisar subir mais equipamento, aumentar alguma coisa ou mudar de equipamento, a gente tem que reinstalar tudo de novo, testar, ver se as dependências funcionarem e assim por diante. O conceito do container vem para ajudar um pouco a gente nisso. Ele começa a diminuir essa dependência de você estar sempre analisando todas essas variáveis, porque ele já traz essa imagem preparada, essa imagem pronta. Tudo que você precisa para rodar sua aplicação vai estar estar ali dentro funcionando, dentro daquele sistema operacional que está sendo compartilhado com todo mundo, todos os outros containers que estão rodando ali. Entendeu? Isso vai fazer com que a sua aplicação rode mais rápido e que seja mais confiável. Porque vamos lá, se a gente tiver que fazer isso toda vez, diversas vezes, olhando as dependências e assim por diante, a gente pode falhar, o que vai gerar erro. E vamos lá, para quem já está há mais tempo aí, com certeza a gente já cometeu alguma falha de biblioteca, de variável de ambiente raro e assim por diante, que acabou capotando a nossa implantação. Então, o container veio para ajudar bastante a gente nisso, tá bom? E como é que ele funciona? Vamos dar uma passada rapidinho em como que um container funciona para tirar nossas dúvidas a primeira coisa que a gente tem que ter na cabeça que um container ele vai executar de forma isolada um container não interfere no outro os containers eles rodam sem interferir na casinha do amiguinho então meu container está executando ali no seu ambiente com as suas variáveis assim por diante sem impactar na imagem no container que está ali do lado tá mas ainda assim compartilhando mesmo sistema operacional e host. Ele não vai mudar o host, ele não vai mudar o sistema operacional, ele só executa dentro daquele pedaço que é o nosso container, como um container de um navio, tá? Acho que aqui está uma grande ideia, um container de um navio dentro de um navio, ele não muda o casco do navio, ele coexiste com outros containers, ele também não muda o casco do navio, ele coexiste com outros containers, ele também não muda o conteúdo de outro container, mas ele está ali coexistindo dentro daquele navio, beleza? Isso faz com que o container seja rápido, porque você consegue subir ele dentro de um SEO que já está preparado, etc. Você não precisa implantar, instalar um SEO e tudo de novo, então você vai conseguir fazer com que ele seja mais rápido do que uma máquina virtual tá bom e ele tem ali os seus próprios espaços tanto lógicos quanto físicos dentro da do do container então ele vai usar o seu espaço de memória o espaço de hd e assim por diante sem consumir os demais beleza outra coisa também é imutável ele tem um conceito de imutabilidade. Uma vez que você criou essa imagem do container, ela não muda, você não vai conseguir fazer essa imagem mudar. Para mudar, você vai ter que reconstruir uma nova imagem e daí sim executar essa nova imagem para que ela seja a imagem mais nova que está ali. Então isso faz com que a consistência entre os ambientes de desenvolvimento e de produção funcione porque você não vai conseguir mudar. Essa imagem é a que vai ser car consistência entre os ambientes de desenvolvimento e de produção funcione, porque você não vai conseguir mudar. Essa imagem é a que vai ser carregada entre os ambientes para ser aplicada em um ambiente assim por diante. Com isso você, de novo, garante que o que você testou, que você construiu assim por diante é o que está sendo executado depois nos próximos ambientes, quando a gente está falando de deploy. Outra coisa também é a portabilidade. depois nos próximos ambientes quando está falando de deploy tá outra coisa também a portabilidade contêineres eles podem ser executado em qualquer ambiente que suporte a tecnologia de contêinerização a gente tem por exemplo docker o kubernetes independentemente é das configurações do ambiente você consegue fazer alguma coisa que é de portabilidade entre eles beleza tem algumas coisas que a gente tem que se ajeitar, mas você consegue fazer isso. Bom, vamos lá. Qual é uma abstração aqui diferente da do navio para a gente pensar um pouco sobre como é que funciona? Imagina você que você tem que construir uma vila para colocar lá 10 pessoas. Dentro dessa vila você tem 10 casas, 10 famílias, por exemplo, com 10 casas. Cada casa você vai construir a sua rede de luz, a sua rede de água, uma churrasqueira para cada casa, uma piscina e assim por diante. Cada casa vai estar completinha, certo? Só que para construir cada casa, você vai ter que replicar isso. Então, você vai fazer isso 10 vezes, você vai ter isso replicado 10 vezes. E não te garanto que todas as piscinas serão iguais, que todas as churrasqueiras serão iguais, que todo o cabeamento será igual. Então, com isso, você tem algumas mudanças, assim, de uma para a outra, tá? E com isso, você acaba tendo diferenças. Quando a gente está falando de código, a gente não quer diferenças. Então, imagina que em uma máquina virtual é isso que você está fazendo. O seu sistema operacional completo está sendo instalado em cada VM. Então cada vez que você sobe uma VM, você está tendo todo esse conjunto de coisas indo junto. O que acaba ficando um pouco mais lento de fazer e pode gerar algum tipo de divergência de uma para a outra. Então basicamente é isso que acontece. Tá bom, e quando a gente está falando de container, o que muda? Imagina que é a mesma coisa, só que a diferença é que em vez de eu colocar várias casas, a gente está falando agora de um condomínio, de um prédio. Dentro desse prédio, você também tem a piscina, você também tem água, você também tem a luz, a churrasqueira e assim por diante. Tudo que é comum do prédio, está lá existir ali, coexistir dentro deste prédio. Tá bom? Então, pensa que este prédio inteiro, com todas essas coisas, são o seu sistema operacional, completão ali dentro para você. Então, cada apartamento não vai ter o seu sistema operacional, ele coexiste naquele sistema operacional. Cada container está coexistindo. Só que, você sabe que aquele container, por exemplo, no meu apartamento, eu coexisto com o meu vizinho, mas, por exemplo, o meu vizinho não consegue colocar o banheiro dele dentro da minha sala. Ele não consegue extrapolar o espaço dele e vir para o meu espaço. A gente está separado em espaços físicos ali, que não vão deixar que um fique no outro. Outra coisa também é que o meu vizinho tem acesso ao apartamento dele, não tem acesso ao meu, ou seja, os containers são autocontidos, cada um tem acesso ao seu, ali a gente não sai entrando num container do outro. Então, vocês não vão ter o problema de um invadir o espaço do outro, pensa assim, e assim por diante. Ou, por exemplo, o meu vizinho vai lá no apartamento dele e muda tudo o apartamento dele, o meu continua igual, cada um tem as suas características, cada um tem o seu jeito ali de trabalho e assim por diante, e tudo bem, imagina que um container é isso, você consegue ter a mesma diferença que você tem para dentro de uma casa, cada um com a sua imagem e assim por diante, mas em compensação você consegue ter todo um arcabouço de coisas ali que são compartilhadas com o sistema operacional, que faz a gente ser mais rápido e faz a gente ser mais confiável também, beleza?