Unknown

0 views15885 WordsCopy TextShare
Unknown
Video Transcript:
Muito boa noite. Muito boa noite, meu povo querido. Todo mundo consegue me escutar aí? Tudo em riba, galera? Deixa-me ouvir falar para saber que tá tudo em ordem e todo mundo tá ouvindo essa minha voz maravilhosa aqui de locutor de rádio. Para falar em locutor de rádio, ah, uma época eu trabalhei com um cara, eh, eu acho que é o Guilherme, o nome dele, ele dava aula com a gente, um cara super gente boa. E a grande sacada é que ele foi locutor de rádio, cara. Então, a gente já teve um professor locutor de rádio
aqui com a gente. Show de bola. Bom, galera, hoje a gente tem aqui umas coisas bem bacanas que eu quero trazer para vocês sobre Docker. É isso mesmo, galera. Eu vi que tem pessoas aqui que, pelo jeito, estão iniciando com Docker. Já tem pessoas aqui que falaram que Docker é vida, então provavelmente já entendem um pouco da tecnologia. Mas de uma forma geral, eu tenho que dizer que Docker ela é aquele tipo de tecnologia que é que nem Git, tá? Não tem mais como você não utilizar, não tem como você não saber. Um desenvolvedor hoje
que não sabe Docker, ele está fora do mercado, tá? Então me desculpe, não mate o mensageiro, tá? Mas a verdade é essa, galera. E eu não vou ficar, como se diz, pondo panos quentes nesse tipo de situação, tá? Então, às vezes tem pessoas que acabam ah sentindo levemente pressionados, porque eu falei que quem não souber Docker talvez fique fora da profissão, mas a realidade é essa mesmo, galera. No mundo onde o mercado tá mais competitivo, no mundo onde a gente tem IA para facilitar a nossa vida, saber Docker é o mínimo que um desenvolvedor pode
saber hoje aqui, tá? E uma das coisas interessantes em relação a isso é que hoje você vai ter a oportunidade de iniciar com Docker. E eu quero trazer algumas coisinhas a mais em relação à parte de IA com Docker também, cara, né? Então, acho que isso é um ponto interessante e eu gostaria, inclusive de saber aqui com vocês, tá? Quem aqui já trabalhou com Docker utilizando MCPs? Quem aqui já ouviu falar em MCP servers, tá? Então deixa-me saber, quero ouvir falar aí para vocês, beleza? Bom, galera, parada o seguinte, tá? Ah, tá entrando gente ainda
aqui na live, né? Acho que tem 400 e poucas pessoas, daqui a pouco chegam mais pessoas. Ah, e antes da gente ir para qualquer conteúdo técnico e coisas desse tipo, eu queria muito, muito saber, tá, se você já acompanha a gente o canal já faz um tempo ou se é o primeiro contato que você tá tendo aqui com a Full Cycle, tá? Então, se é o seu primeiro contato com a Full Cycle, não esquece, escreve aí no chat #novato ou novata. E se você aí já segue a gente o canal já faz um tempo, né?
É nosso aluno, já faz nossos cursos, já participa das nossas imersões, coloca aí #veterano e veterana, beleza? Então isso aí é bem interessante aí para eu saber, inclusive dosar a live aqui com vocês, beleza? Como tem muitos novatos e novatas, tá galera, eu gostaria de contextualizar um pouco essa live para vocês, inclusive contextualizar um pouquinho mais essa semana, que é uma semana muito especial que a gente tá vivendo e que, sem dúvidas vai ser ah um mover muito bacana na vida de pessoas que estão, né, a na área de tecnologia, mas precisam dar um plus,
um próximo passo, ainda mais da forma como o mercado está hoje aqui para vocês, tá? Então, a grande pegada aqui é o seguinte, tá? Ah, eu vou me apresentar rapidinho aqui para vocês. Uma das coisas que eu acho estranha, eu não digo estranha de se apresentar, é que toda vez que eu me apresento, parece que eu tô fazendo algo muito repetitivo, porque eu sei que já tem gente que me acompanha, mas sempre tem as pessoas novas, então eu faço questão de eu me apresentar para você poder conhecer, me conhecer um pouco melhor, entender um pouco
mais meu background e entender como que eu vou poder te ajudar aí durante essa semana junto com Luiz Carlos e toda a nossa equipe aqui da Full Cycle. Beleza? Bom, galera, o negócio é o seguinte, tá? Ah, e tem gente aqui, ó, o Nobar ele tá bravo, tá? Ele colocou assim, ó: "Por favor, sejam mais diretos. Começa apenas dia 7 ou começa hoje? O que tem essa semana?" Legal, galera. Então, vamos lá. Eu vou me apresentar e vou explicar como é que toda essa parada fica pro Noby ficar mais tranquilo aí. Beleza, Nob? Vou responder
todas suas perguntas hoje, cara. Então, vamos lá, galera. O negócio é o seguinte, meu nome é Wesley, eu trabalho aí nessa área já faz um bom tempo, tá? Quando eu digo um bom tempo, mais de 20 anos, indo para 25 anos, esses cabelos grandes que eu tenho que cortar, mas brancos, não são à toas. Então eu tive o prazer de conseguir ver muita coisa mudando. Eu não acho que ter uma super experiência, anos e anos de experiência, é algo que vai me dar autoridade sobre você de dizer que eu sei mais que você. Não, eu
conheço muita gente com muito menos experiência e que aprende muito rápido. Na época que eu comecei, as coisas eram muito mais lentas para você para aprender. Mas uma coisa que eu acho que eu posso te ajudar é em relação à experiência que eu tive passada, em relação ao mercado e vendo inclusive as tecnologias indo, voltando, morrendo, ressuscitando e momentos, né, de altos e baixos no mercado. Então, pela observação, eu consegui acompanhar desde a bolha de 2000, onde todas as startups na época falharam, fala a faliram até, né, a gente chegar momento pós pandemia que a
gente tá agora e o momento durante a IA que nós estamos aqui nesse momento, tá? Então acho que isso eu vou conseguir contribuir bastante com vocês, além obviamente da parte técnica, né? Eu trabalho bastante nessa área técnica faz um bom tempo. Programo em diversas linguagens de programação. Tenho bastante experiência aí com arquitetura, desenvolvimento de software, DevOps, SRE, né? Sou Microsoft MVP, sou Google Developer Expert na linguagem GO, sou Docker Captain, inclusive Docker é o nosso tema de hoje. Então, consigo te ajudar bastante com Docker. Também tenho bastante material que a própria Docker Ink fornece para
quem é Doctor Docker Captain. e eu consigo passar muitos desses conhecimentos aí para vocês hoje, beleza? Então, acho que essa que é a grande pegada, tá? Agora, entendendo um pouquinho mais de mim, tá, galera? É importante vocês entenderem o por vocês estão aqui hoje, tá? O negócio é o seguinte, nós temos, tá, ah, a cada dois tr meses mais ou menos, um evento chamado de imersão full stack, full cycle, tá? E a ideia dessa imersão é que durante uma semana a gente consiga desenvolver um projeto, tá? E esse projeto ele vai partir desde a parte
de arquitetura, o desenvolvimento, entender as nuances, as integrações entre sistemas, desenvolvimento de microsserviços, utilização de sistemas de mensageria e tudo mais. Então, a nossa ideia é conseguir fazer com que você veja a conexão dos pontos entre aplicações distribuídas, tá? Uma das coisas que a gente tem que perceber, principalmente nos dias de hoje, é que simplesmente se você for um desenvolvedor ou desenvolvedor aí fazedora de crude, você vai ficar sem emprego, tá? E quando eu digo que você vai ficar sem emprego, é porque empresas não precisam mais de profissionais que façam essas coisas. Simples. Simplesmente hoje
a IA faz isso. Qualquer desenvolvedor sior com um mínimo de saber pilotar uma IA consegue ter uma produtividade que hoje quatro desenvolvedores teriam, entende? Então não é que a inteligência artificial substitui os desenvolvedores. Não significa que o seu chefe vai chegar e vai falar: "Olha, Sérgio, olha Pedro Henrique, olha, Ari, o negócio é o seguinte, eu tô te mandando embora hoje porque eu contratei uma IA. Não é nada disso. O que vai perceber é que a empresa do seu chefe, né, da sua bigtec, não importa onde você trabalhar, ela vai ficar muito mais produtiva por
conta da inteligência artificial. E, obviamente, tarefas repetitivas, coisas que não precisem de tanta senioridade, vão ser facilmente substituídas por desenvolvedores que consigam pilotar IA. Então, com uma eficiência muito maior, a gente tende a ver menos vagas no mercado de TI, tá? Não mate o mensageiro, que sou eu nesse momento. Isso é um fato, tá, galera? Eu converso, eu tenho contato com tudo quanto a empresa que vocês imaginam, desde empresas pequenas até grandes e grandes bigtechs. Eu tenho contatos de pessoas da Google, da Microsoft, pessoas que estão na meta. Então, assim, é muito claro que o
mundo nesse momento tá sofrendo uma transformação e a maior transformação que eu acredito desde quando eu comecei trabalhar na área, tá? Então, o jogo tá mudando e hoje é o momento que você tem de ter alguns fundamentos para que você consiga continuar aí nesse jogo. Legal. Então, o que que acontece é o seguinte, já que a gente tem essa imersão full stack full cycle, que é um evento aí de uma semana, o que a gente percebe é o seguinte, é que esse evento ele acaba utilizando diversas tecnologias. Eu vou eu vou desenhar aqui rapidinho, só
para vocês entenderem um pouco. Eu vou compartilhar a minha tela aqui. Esa um pouquinho. Eu vou fazer o seguinte, eu vou jogar esse meu cara para cá, o meu chat, para eu conseguir ver melhor, tá? Ah, e eu vou compartilhar aqui a minha tela para que vocês consigam entender do que eu tô tô falando. Então, deixa eu tirar essa minha garrafa aqui que tá atrapalhando eu ver a minha tela. Então, eu vou compartilhar minha tela aqui. Vamos lá. Vou compartilhar minha tela inteira. Então, se aparecer aí os os meus nudes, me perdoem, tá? Mas eu
tô confiando aqui no meu programa. Então o o negócio é o seguinte, galera. Acho que todo mundo tá vendo aqui meu scol draw. Eu vou desenhar um pouco somente para vocês entenderem um pouco aqui para vocês ah se ligarem, tá? Então o que acontece é o seguinte, pessoal. Antes da gente falar do tema central hoje de Docker, eu quero explicar rapidamente para vocês o que que é imersão. Imersão full stack e full cycle, tá? Full cycle é o nome da nossa empresa, tá? Ah, e a gente na realidade, nós somos uma empresa de treinamento, tá?
Onde a gente tem um curso chamado Full Cycle 4.0, mas também nós temos uma faculdade de tecnologia chamada FCTEC, faculdade full cycle de tecnologia, tá? ah, reconhecida obviamente pelo MEC, onde nós temos cursos como um MBA em arquitetura cycle, nós temos formações de liderança técnica, nós temos também a pós-graduação. Eu preciso conceituar isso aqui vocês, galera, só para vocês entenderem do que eu tô falando aqui. E a gente tem uma pós graduação chamada GO Expert para quem quer se tornar um expert na linguagem GO, tá? Então hoje isso aqui é a full cycle, tá? E
aqui são os nossos cursos que a gente tem, inclusive na nossa faculdade. O grande ponto é que a Full Cycle, né, a empresa Full Cycle, ela tem um evento, tá, chamado de imersão full stack, full cycle, que é exatamente esse esse evento que vocês estão aqui, ó, que é a nossa imersão full stack e full cycle, tá? O grande ponto é que nessa imersão nós vamos desenvolver um projeto, tá? E esse projeto ele vai ser um gateway de pagamento. Como é que vai funcionar? Tô passando por cima, só para você ter uma ideia do projeto
que eu tô colocando aqui para vocês, tá? Basicamente a gente vai ter um gateway aqui, tá? Uma aplicação que simula um gateway de pagamento, tá? Essa aplicação aqui, ela vai ser desenvolvida na linguagem GO, tá? Inclusive, fiquem tranquilos que a gente vai ter um dia que a gente vai falar só de GO. A gente também no gator de pagamento, nós vamos ter um front end usando o next JS, que não é na realidade a parte mais importante do nosso sistema. Nós temos também uma outra parte que a gente vai utilizar, a, a gente vai fazer
um sistema anti fraude, tá? A simulação, né? Tudo é uma simulação do sistema antifraude que a gente vai fazer. E esse cara aqui, ele vai ser feito em Nests aqui pra gente. Maravilha. Então, basicamente o que a gente vai ter vai ser o seguinte. Nós vamos ter um front end acessando um end point do nosso gateway de pagamento. Cadê o meu a minha setinha aqui tá é errada. Aceitando o nosso gateway de pagamento. O nosso gateway de pagamento, quando ele achar uma transação suspeita, o que que vai acontecer? Ele vai ter uma fila, um tópico
aqui, certo? Vou chamar um de tópico, certo? E esse tópico vai ser enviado aqui nesse cara. E esse cara vai verificar se existe uma transação suspeita aqui pra gente. É basicamente isso que a gente vai desenvolver numa semana. Legal. Agora aqui tem alguns pontos importantes. Esse cara aqui ele vai ser na realidade o Apache CFCA, tá? Que é um sistema de ah string de dados e mensageria, né? Então o front end vai conseguir listar as transações, mas eu também tenho um usuário aqui que é um client que ele vai poder aqui processar, né, transações aqui
pra gente, né? Então ele vai ter criar invoices para fazer pagamentos aqui pra gente, tá? Então essa vai ser mais ou menos a dinâmica do que a gente vai desenvolver durante essa semana, tá? Ah, muitas perguntas quando a gente define uma imersão a começam a aparecer. Por exemplo, por que o front ends? Por que o gateway tá usando o go? Por que que tá usando o Kafka? Por que tá usando o Nests? Por que que tá fazendo isso? Galera, o seguinte, a gente poderia estar usando milhares de linguagens de programação. Eu poderia estar fazendo com
Java, com Python, com Rabbit MQ, eu poderia estar fazendo com GRPC, eu poderia estar fazendo com muita coisa. O ponto é que cada imersão que a gente faz, a gente tenta variar um pouco as tecnologias para que cada vez que vocês assistam fique um pouquinho diferente e que vocês possam ter contato com tecnologias um pouco mais diferenças, tá? Então, a pegada é o seguinte, não tem o porqu uma tecnologia é melhor que a outra, tudo tem contexto e eu não quero muito entrar nessa história. Agora, se vocês perceberem, existem alguns pontos que vocês têm que
entender no meio dessa história. O que são todos esses sistemas aqui? Eles vão depender de uma coisa extremamente importante, tá? Esses caras eles vão ter que ter uma base aqui embaixo. E essa base aqui eu vou chamar ela de Docker, tá? Por que que eu tô dizendo isso? Porque o Docker vai cuidar de que eu tenha todos esses sistemas funcionando. Ou seja, cada sistema desse vai ser independente um dos outros. Cada sistema desse vai ter o seu próprio banco de dados, por exemplo, tá? Então, esse sistema aqui, ó, do gateway, ele vai ter um banco
de dados próprio dele, OK? Esse sistema aqui do do Nests, ele vai ter o seu próprio banco de dados. Então, se você perceber, a gente vai começar a precisar de ter algo que nos ajude a trabalhar e organizar esse projeto para que, independente do ambiente que você esteja desenvolvendo no Linux, no Windows, ah, em qualquer coisa, você consiga ter esse ambiente de desenvolvimento funcionando aí pra gente, tá? Então, a grande sacada aqui é que durante essa imersão você vai ter contato com tudo isso aqui. Beleza? Agora o ponto aqui tá como que se eu chegar
já no dia da imersão já usando um monte de comando Docker e se você nunca ouviu falar em Docker ou nunca teve contato com Docker, você vai boiar mais facilmente na imersão. Se você cair na imersão e eu já saí desenvolvendo códigos em GO, talvez você boie um pouco quem nunca programou em Gol, tá? Quem aqui nunca ouviu falar ou nunca usou o Cafca, pode boiar um pouco em Cafca. Quem nunca viu mexer no Nests, mesma coisa. Então o que que acontece? A gente faz com que uma semana antes, tá? Uma semana antes, a gente
tem o quê? O esquenta da imersão, que é exatamente isso que nós estamos fazendo hoje, tá? Então, durante essa semana, o que eu quero fazer aqui para vocês é trazer os pré-requisitos para que na semana que vem, onde começa a nossa imersão, você esteja mais nivelado. Eu não espero que você entenda detalhe por detalhe da imersão, código por código da imersão. Eu não espero isso, mas quanto mais você tiver, vai ser muito melhor para você pegar os conceitos, tá? Então esse essa semana aqui é a semana do esquenta, tá? Por isso que a gente chama
de esquenta, imersão, full stack, full cycle, exatamente para te ajudar a a nivelar esse seu conhecimento. Uma das coisas, ah, aqui é o seguinte. O Docker é a tecnologia base que a gente precisa de tudo. Porque para eu rodar minha aplicação em GO, eu preciso de Docker. Para eu ter meu banco de dados, eu preciso de Docker. Para rodar o CAFCA, eu preciso de Docker. Para rodar o front end docker, tudo aqui eu vou precisar de docker. Então eu preciso que vocês entendam mais sobre Docker. Mas além de você entender mais sobre Docker, tá? Então
vamos agora aqui voltar na esfera Docker em si, tá? Então vamos colocar aqui o nosso Docker bonitão aqui. Vou pintar ele de azul. Vou aumentar mais a fonte dele agora que vocês entenderam a ideia. A gente precisa entender um pouco mais sobre o que é o Docker, tá? E depois eu vou ainda, tá? Trazer algo um pouquinho diferente, que é como que a gente utiliza Docker em conjunto com IA. legal, atrelado a algo chamado de MCP, que é message context protocol, tá? Então a gente vai ver isso hoje aqui também de uma forma simples, mas
vocês vão poder explorar mais isso durante toda essa semana, tá? E a minha pergunta que fica aqui é: quem já ouviu falar em MCP? Quem está trabalhando com MCP nos dias de hoje? E quem nunca ouviu falar em MCP, digam aí no chat para eu conseguir saber, galera, tá? Então isso aí é um ponto importante aí para eu saber, beleza? Então o seguinte, galera, antes de eu sair programando e digitando um monte de código com Docker, eu quero dar uma base rápida, simples aqui para vocês de qual que é a ideia do Docker, tá? O
grande ponto aqui é o seguinte, eu vou até entrar no no site da Docker, porque ela tem uma explicação básica aqui sobre o que é um contêiner e daí vai ficar um pouquinho mais claro aqui para vocês, tá? Se você olhar aqui essa imagem, tá? O que que essa imagem nos diz aqui? Ela tá mostrando pra gente uma imagem. Deixa eu copiar isso aqui pro meu scal draw, vai ficar um pouco mais fácil pra gente ver aqui, tá? Que que acontece aqui? Isso aqui é o arroz com feijão que todo mundo faz e fazia há
muito tempo atrás. Eu tenho o quê? A minha máquina principal que eu tenho toda a minha infraestrutura. Ele tem uma camada de virtualização que normalmente é chamada de hypervisor. E daí a gente tem as máquinas virtuais. Quem aqui já instalou uma máquina virtual no seu computador? Alguém aqui já ouviu falar numa máquina a virtual, numa virtual machine? Quem aqui já instalou usando Vemware? A ah meu Deus do céu, o Paralels, VMware, o mais Virtual Box, quem já usou? Todo mundo já usou uma máquina virtual. Na nuvem, por padrão, é muito comum a gente já fazer
isso, né? Então o que que a gente faz? A gente sobre uma máquina virtual. Essa máquina virtual, ela tem algo bem interessante aqui, né? Que ela tem o sistema operacional que você tem que instalar dentro dela. Tanto que toda vez que você sobe uma máquina virtual, o que que você tem que fazer? Você tem que esperar ela botar. Aí você instala a camada da sua aplicação e você tá rodando a sua aplicação. Se você precisar de uma outra aplicação, você instala outra máquina virtual, outra máquina virtual e etc. Qual que é o problema que a
gente acaba tendo nesse tipo de coisa? A, o advento que a gente teve da máquina virtual mudou completamente a forma de como a gente trabalha com computação. Mas o que que acontece? Ela tem um problema, entre aspas, tá? E o principal problema que ela acaba tendo aqui no final das contas é o seguinte, galera. Para cada aplicação que você tem, você tem que subir um sistema operacional. Esse sistema operacional ocupa bastante disco. Ele precisa de memória para rodar esse sistema operacional. Ele precisa de muita coisa. Então, às vezes, para você rodar uma aplicação em GO,
que tem 5 m de tamanho e vai usar 100 M de memória, eu tenho que subir uma máquina inteira para esse cara. E toda vez que eu duplicar essas máquinas e escalar essas máquinas, eu tenho que fazer o boot dessas máquinas e tudo mais. E isso aí acaba sendo muito custoso, né? Muito mais lento e tudo mais. Então, o que que acontece aqui? Quando a gente ouve falar nesse caso no Docker, mas eu digo isso no conceito de conttainers, porque o Docker ele é um contêiner one time, mas existem outros conttainers one times, inclusive. Inclusive
o Docker, ele é um contêiner one time criado em cima de um outro contêiner one time. Se um dia você fizer o meu curso chamado Full Cycle 4.0, eu tenho um curso completo de Docker, mas eu tenho um curso onde eu falo sobre contêiners desde quando o Docker fori criado e a gente cria um docker por baixo dos panos para você ter uma ideia, para você sentir como que é realmente trabalhar com contêiner. A gente sempre foca em muita profundidade, mas quando a gente tá trabalhando com Docker, olha só que interessante, você tem normalmente a
sua infraestrutura, o seu sistema operacional, mas você tem aqui o Docker, tá? O Docker ou um contêiner one time. O que que esse cara faz aqui de mágica? Na realidade, essa camada aqui do Docker, ela é uma camada de transferência entre o sistema operacional, tá? E as nossas aplicações. Por quê? Cada aplicação dessa aqui é um contêiner. O que que é um contêiner, galera? Contêiner é um processo que está rodando no seu computador. Ponto. Sabe quando você abre o seu browser? Seu browser é um processo. Sabe quando você executa um programa? É um processo. Um
contêiner ele é um processo. Mas quando esse conêiner é um processo e ele sobe, ele pensa que ele é um sistema operacional completo. E tudo que você precisa desse sistema operacional completo, você executa aqui dentro. O grande ponto é que esse contêiner ele tá sendo enganado. Ele pensa que ele é um sistema operacional, mas ele não é. Ele é só um processo. E toda vez que a gente executa comandos e que precisa fazer IO, leitura de disco, rede, esse contêiner, ele tem um um sistema de arquivos montado meio que fake e quando ele acessa, ele
cai numa camada de tradução aqui do docker e o Docker aqui chama o sistema operacional, faz as chamadas de rede e retorna para esse cara. Então, todo tudo que o contêiner precisa, ele usa as próprias bibliotecas do sistema operacional. Ele usa o canel do sistema operacional, um pouco diferente das máquinas virtuais, onde eu uso o canel da própria máquina virtual. Então, o Docker ele emula o sistema operacional e faz com que os contêiners eles rodem. Agora, a grande diferença é que quando eu rodo um contêiner, eu não preciso ter um sistema operacional inteiro. Eu tenho
apenas um processo rodando. E um processo funciona assim: Eu mato o processo, ele desaparece, eu crio o processo, ele sobe. É simples assim. Eu não preciso esperar uma máquina fazer o boot, por exemplo. Simplesmente eu crio um contêiner e ele já está rodando. Então isso aí funciona muito bem, tá? O Docker, ele é uma solução que ele começou a ser desenvolvido em 2013, 2015 ele foi se popularizando. Hoje em dia ele é a solução mais padrão que existem. Existem outras soluções de contêiner one times a similares ao Docker. Tem contêiners one times focados em Kubernets,
por exemplo, que é um outro papo para um outro momento. Mas a grande pegada que eu quero trazer aqui, independente do Docker, é que vocês entendam essa diferença aqui. Se vocês entenderem essa diferença nesse momento, eu já tô feliz aqui com vocês. O grande ponto é que para que esse contêiner ele possa rodar, a gente precisa de algo chamado de imagem, tá? Então o Docker, ele tem uma imagem como se fossem uma receita de bolo, como se fosse um snapshot. Então, toda vez que eu quero criar um contêiner, vamos imaginar aqui que eu quero criar
o meu contêiner, deixa eu mudar o fundo aqui, ó. Esse cara é o meu contêiner. Para esse contêiner subir, ele precisa de um template, vamos dizer assim. Então, o que que acontece? Esse item com esse contêiner funciona mais ou menos dessa forma. Existe aqui, tá, uma espécie de um repositório, tá? Onde eu guardo todas as minhas imagens aqui dentro, tá? Então eu tenho repositórios com diversas imagens aqui, imagens do imagens do do banco de dados, imagens da sua aplicação, imagem do sistema de Linux, imagem do Cafka, imagem do Rabbit MQ, imagens de tudo quant coisa.
Então o que que acontece? Quando eu vou subir a minha imagem, um novo contêiner, eu vou dar um run aqui, né? Quando eu dou um docker run aqui para mim, eu vou ter que passar o que aqui para mim? Eu vou ter que passar um o nome da minha imagem. E quando eu passar um nome da minha imagem aqui, adivinha o que vai acontecer? O Docker, ele vai consultar um repositório de imagens, vai ver se essa imagem existe. Se essa imagem existe, ela vai ser baixada aqui dentro. Aí a gente vai ter uma espécie de
um cash aqui, ó. A gente vai ter uma espécie de um cash aqui e vai guardar todas as imagens que a gente já baixou para ele não ter que ficar fazendo download toda hora. E daí esse contêiner ele vai subir baseado nessa imagem, ou seja, baseado em tudo que está gravado nessa imagem. E aí eu tenho o meu contêiner funcionando. Fez sentido? Mais ou menos, galera? É mais ou menos como se a imagem ela fosse uma classe e o contêiner fosse a instância da classe, né? Eu posso criar várias instâncias de uma classe baseado sempre
na mesma classe, ok? Então essa que é a ideia principal quando a gente tá falando de como que o Docker funciona. Fechou? Agora, para que a gente não fique no desenhinho o tempo todo aqui, eu quero trazer aqui para vocês como que nós podemos começar aqui com Doca. Dica de ouro aqui para vocês, tá? E entendam uma coisa, existe a Docker Inc., tá, que ela é uma empresa, tá? que hoje em dia o foco dela é ter soluções para deixar o nosso processo de desenvolvimento mais rápido, mais simples, utilizando contêiners, tá? Então é a Docker
Inc, que é a principal mantenedora do Docker. E essa empresa lá atrás chamava Dot Cloud, foi renomeada para Docker Inc. Tá? Agora, entenda uma coisa, o Docker em si, ele é um projeto open source. Qualquer pessoa pode baixar e utilizar o Docker sem nenhum custo. Beleza? Por outro lado, a Docker Inc. Ela tem diversas soluções, mas uma das soluções é um cara chamado de Docker Desktop. O Docker Desktop, ele é uma ferramenta que meio que instala o Docker no seu computador e faz todo setup que você precisa e traz ainda diversos recursos que vão facilitar
a sua vida para caramba na hora que você tá utilizando o Docker no seu computador, tá? Então, a dica que eu dou para todo mundo, se você estiver utilizando o Mac, instale o Docker Desktop. Se você estiver utilizando o Windows, instale o Docker Desktop utilizando o WSL2, tá? Que é Windows for Linux for Subsystem, Windows for Subsystem for Linux, porque você consegue ter o Linux dentro do seu Windows para rodar de uma forma muito mais performática e o Docker Desktop consegue fazer essa integração, tá? Ah, obviamente, tá? Se você tem um computador muito ruim, muito
lento, com baixa memória, às vezes vai valer a pena você instalar o WSL no seu Windows. A gente tem um tutorial que o Luiz Carlos fez, o Luiz Carlos também é um dos nossos tutores aqui na Full Cycle e mostra passo a passo dessa instalação. Quando você instala o Docker Desktop, você tem um produto que não é open source da Docker, mas que traz uma série de facilidades. Se você instalar o Docker versão Open Source, que é o Docker Community Edition, essa versão tem menos recursos, mas ela funciona super bem e vai conseguir fazer tudo
que você precisa no dia a dia aí com o Docker, apesar de ter menos recursos ali para você. Então vai depender muito mesmo do que ah você quer. Se você tem uma máquina ah, um pouco mais decente, que tem memória e etc, eu recomendo de cara vai pro Docker Desktop. Ele é muito bom, tem muitos recursos interessantes, facilita muito debugging, log, você ficar no terminal o tempo inteiro, às vezes é um pouco cansativo. O Docker Desktop, ele te dá uma visão muito boa. A parte de segurança com o Docker Scout, você tem uma visibilidade muito
maior. Então eu recomendo muito forte você usar o Docker Desktop no Windows e no Linux. Não estou falando isso porque eu sou um Docker Captain a pela Docker Ink. Mas é que realmente o produto deles é muito bom. é o que eu utilizo no meu mundo do desenvolvimento, mas façam os seus testes aí. Muita gente prefere usar o Windows com WSL usando o Docker Community Edition sem o Docker Desktop. O Luiz Carlos, que é um cara que manja para caramba de Windows e configurações focadas em Docker, hoje em dia ele utiliza o Docker Desktop. Então
se o Luiz Carlos tá falando, eu tô confiando nele porque eu uso o Mac no dia a dia. Beleza? Então a grande sacada é, independente de qualquer coisa, use o WSL2 no seu Windows de qualquer forma, independente se vai usar o Docker Desktop ou não. Esqueça PowerSell e esses outras soluções, porque o Docker foi feito para Linux, tá? Docker é uma ferramenta que funciona no Linux, logo você precisa do Linux para rodar o Docker, beleza? Então esse aí é um ponto importante aqui para vocês. Beleza? Dito isso, galera, ah, o que que eu quero fazer
agora aqui com vocês é começar a brincar um pouco aqui com o Docker no meu no meu terminal. A gente vai fazer alguns projetinhos, algumas coisas bem simples para vocês começarem a entender como é que tudo isso funciona, tá? Em alguns pontos eu vou usar um pouco de a para me ajudar a desenvolver um pouco de código, mas o fato aqui mesmo é a gente trabalhar com doc, beleza? Então vamos lá, galera. Ah, galera, e antes de eu ir pro Docker aqui, eu tenho um outro recado que é importante, que eu acabei esquecendo de falar,
tá? A imersão full stack, full cycle, ela parte do princípio que você já é um desenvolvedor, não é uma pessoa que ainda não sabe programar, tá? Então, se você ainda não programa, nunca desenvolveu um programa, tá ainda no começo do seu mundo da programação, essa imersão, ela não tem o foco nesse perfil, tá? Eu super recomendo que você continue acompanhando tudo mais, mas saiba que a imersão ela tem um foco aí para desenvolvedores que já t nível de experiência e que a gente vai trabalhar com alguns pontos mais complexos durante o projeto que a gente
vai desenvolver, tá? Então, a gente sempre tenta divulgar o máximo ali com o tempo mínimo de experiência que a gente recomenda que você participe aí na imersão, beleza? Então, se você já desenvolve, você vai aprender Docker, não vai ter problema. Se você tá aprendendo a programar ainda essa imersão, o problema não vai ser só o Docker, vai ser tudo que a gente vai desenvolver. você tá mais do que ah convidado, convidada aí, mas saiba que o foco dessa imersão é para quem aí já tem aí perto de uns dois anos de experiência aí pelo menos.
Beleza? Então tá aí, galera, tentando ser o mais transparente possível aí para todos vocês. Beleza? Então galera, o negócio é o seguinte aqui para vocês. Vou abrir aqui o meu editor, tá? Nesse momento eu estou utilizando o cursor, tá? O cursor ele é uma solução baseada no Visual Studio Code, mas ele é um editor que ele tem um foco muito grande em IA e nesse momento é o é o é o editor, né, a ideia que eu mais tenho utilizado nos últimos tempos, principalmente por conta da parte de IA, tá bom? Então, somente para você
saber, mas você pode acompanhar normalmente utilizando aí o VS Code. Com o cursor a gente vai ter algumas vantagens aqui, principalmente quando a gente falar em ACP aí pra gente. Beleza? E galera, tem um pessoal aqui perguntando sobre qual é o preço do curso Full Cycle, tá? Eu vou colocar aqui para vocês, vou dar um um copy and paste e vou colar aqui no chat, porque se vocês tiverem interesse e entender mais sobre o curso Full Cycle, vocês conseguem clicar em solicitar contato e entrar numa lista, tá? Onde a gente entende o seu momento profissional
e daí se fizer sentido você pode vir e estudar com a gente, tá? Então tá o link aí caso vocês queiram, beleza? Então o seguinte, galera, parada é o seguinte, Docker, eu vou aqui, tá? Ah, abrir o meu shell, tá? Então eu vou abrir aqui o meu meu shell, tudo bonitinho e eu vou trabalhar aqui em cima para eu mexer. Então a gente tem algumas coisas interessantes assim que você instala o Docker, tá? Eu vou digitar docker e você vai ver que eu tenho uma pancada de comando que a gente vai precisar entender. Existem dois
comandos que são importantíssimos para você se ligar como é que o Docker funciona, tá? Ah, o primeiro comando, ah, ele é chamado de Docker run, tá? Então, toda vez que eu der um docker run, significa que eu quero criar um novo contêiner, ou seja, eu quero executar um novo contêiner. Entenda que eu vou criar sempre um novo cara. Então, se eu digitar um docker run, hello, traço word, você vai perceber que ele vai executar algo aqui, mas esse Hello World aqui é o nome da nossa imagem. que eu passei aqui para vocês, tá vendo? Então,
se eu der um Docker Run, Hello Word, o que que ele vai fazer? Ele vai falar para mim, ó, que ele não achou essa imagem localmente. Então, o que que ele fez? Ele foi baixar essa imagem no repositório do Docker, tá? E daí ele conseguiu baixar uma imagem chamada de Hello Word 2. latest. Latest é a versão, tá? Então aqui é o nome da tag, só para vocês saberem. E o que que essa imagem faz? Ela dá um hello from docker e imprime esse texto aqui pra gente. Então, basicamente o que a gente fez aqui
foi executar um contêiner. Um contêiner foi criado. Quando esse contêiner executou, ele deu um print, ele imprimiu essas mensagens que a gente acabou colocando. E depois disso, esse contêiner provavelmente ele saiu, ele parou a execução dele, tá? É basicamente isso. Eu vou fazer uma parada aqui só pra gente não ter um problema com a parada do MCP aqui. Só, só fazer uma paradinha aqui, galera. Ah, ignorem por momento esse cara aqui que eu vou dar um disable nesse cara aqui e eu vou limpar todos os meus contêiners aqui. Deixa eu só fazer um negócio. Docker
RM aqui para mim. E eu vou dar novamente, eu vou dar um docker run agora aqui pra gente, tá? Então vamos lá. Docker run. Hello word. E ele executou esse cara aqui para mim. Agora o grande ponto aqui que é importante você se ligar é que se eu quiser ver os meus contêiners eu vou digitar Docker PS. E o Docker PS aqui vai mostrar todos os contêiners que eu tenho. Então o que que acontece aqui para mim? Vocês estão vendo algum contêiner aqui? Provavelmente não, mas eu falei para vocês que eu criei um contêiner usando
docker run. Correto? Correto. Esse contêiner ainda existe, mas esse comando aqui, Docker PS, ele significa que ele vai mostrar todos os contêiners que estão em execução. Então, olha só, se eu der um docker PS - A aqui, ele vai trazer para mim todos os contêiners que eu tenho. Ó, deixa eu executar de novo, ó. Então ele tá falando que eu tenho um contêiner com esse ID. A imagem que foi utilizada nesse contêiner Hello Word. O comando que foi executado nesse com nesse contêiner quando ele subiu foi esse comando barraho, que deve ter sido um arquivo
binário. Ele foi criado 50 segundos atrás e ele saiu. Por que saiu? Quando esse comando executou, ele executou e não segurou o processo rodando, tá? Basicamente isso aqui é se existe alguma porta atribuída a esse contêiner e o nome desse contêiner aqui, ele cria um nome bizarrão mesmo, aleatório para cada contêiner quando você não especifica esse cara aqui. Beleza? Então esse aí é um ponto. Agora existem algumas coisas interessantes aqui. Se a gente perceber quem aqui já ouviu falar alguma vez na vida nox? Quem aqui já ouviu falar no innex? Eu acho que em algum
momento todo mundo já ouviu falar no Enginex, né? Se você nunca ouviu, provavelmente você nunca trabalhou com servidor web. Você deve est começando ainda na área. Mas o Enginex, ele é o principal servidor web que a gente tem hoje, né? Um sistema de proxy reverso que quando a gente bate nele, ele aponta para algum sistema nosso interno. Então o que que acontece aqui pra gente? Se eu fizer o seguinte, olha, Docker run, olha só o que vai acontecer. Ele não está achando a imagem do Indinex. Agora ele achou, ele baixou a imagem e agora aqui,
ó, ele inicializou. Não sei se você percebeu, mas oNEX ainda está em execução, diferente daquele Hello Word, né? E o Endnex aqui criou vários workers aqui para ele fazer o processamento das chamadas com servidor web. Então o que que acontece aqui pra gente? Esse contêiner ele está em execução. Então se eu criar um novo terminal aqui para mim, tá? E eu der um docker PS, você vai ver agora aqui que eu vejo o meu next. Olha só, imagem de Next, o comando que foi executado, Docker entry point, tempo foi criado, upe exportando uma porta 80
porque é um servidor web e ele tá deixando por padrão a porta 80 documentada, dizendo que esse servidor ele pode apontar para essa porta, tá? Então isso aí é algo importante para vocês saberem. Agora eu estou rodando o Endnex e tá falando que eu estou na porta 80. Significa que se eu der um local hostar o endnex agora que eu tenho ele rodando. Deixa me saber galera, o que que vocês acham? Que que acontece? O endnex tem a porta 80 disponível, tá? Mas se eu der um curl aqui, por exemplo, ó, local host 2.80, ele
vai falar que não conseguiu conectar em nenhum servidor. Por que que ele não conseguiu conectar com nenhum servidor? Porque o innex na porta 80 ele está funcionando dentro do contêiner. Aqui eu não estou no contêiner, estou fora do contêiner. O contêiner é esse cara aqui dentro. Então, se eu der um local host aqui, esse meu local host ver com o local host do contêiner. É como se o contêiner fosse uma outra máquina aqui para mim. Então, se eu quiser verificar, né, esse meu innex funcionando, eu posso acessar esse contêiner. Como que eu acesso? Eu posso
dar um docker exec. Perceba que é diferente de dar docker run. Se eu der um docker run, significa que eu estou criando um novo contêiner. Se eu tô dando um docker exec, significa que eu estou executando um contêiner, um comando no contêiner do docker, tá? E qual contêiner aqui que eu vou querer executar? Eu vou querer executar o meu contêiner do Endn, que tem esse nome esquisito ou tem esse ID. Eu vou copiar esse ID e aqui eu vou colocar o comando que eu quiser executar, por exemplo, tá? Então eu vou colocar um comando ls
para ele listar as páginas, listar os arquivos aqui para mim desse contêiner. Vamos fazer. Olha só, ele listou todos os arquivos que tem dentro desse contêiner. Se você perceber agora eu vou fazer algo um pouco diferente. Eu vou fazer o seguinte, eu vou dar um docesec. IT significa modo interativo e com ttiy ativado para que eu possa digitar dentro do contêiner. E aqui eu vou digitar, não sei se ele tem bash, ele tem Bash instalado. Então, nesse momento aqui, pessoal, agora perceba que eu estou no root @ o ID do meu contêiner. Isso significa que
agora sim eu estou dentro do contêiner doinex, tá? Essa é a parte legal aqui, ó. Então, se eu der um LS, olha só, eu não tô mais no meu computador, eu estou dentro do contêiner, tá? E aqui, vamos ver se eu tenho um curl aqui. Será que eu tenho cur? Tenho. Se eu der um curl local host agora aqui para mim, você vai ver que eu já consigo acessar o conteúdo do servidor web do Endinex, tá? Então isso aí é um ponto importante aqui para mim. Eu vou mais longe aqui ainda. Se eu chegar, deixa
eu dar um aptate, aptall - y vin. A aptall vin. E se eu acessar a pasta, a qual que é a pasta? barra barra qual que é a pasta barra users share html se eu entrar no index.html do innex eu posso mudar esse cara aqui, ó, para welcome to full cycle aqui pra gente e vou salvar. Se eu der um cur local host agora aqui, ó, olha só. Welcome to full cycle. Então aqui, se vocês perceberem, eu tenho um servidor web rodando dentro de um contêiner, tá? Então isso aqui é um ponto assim muito importante
aqui pra gente, mas perceba que se eu tiver no meu browser, eu não consigo acessar esse servidor, tá? Por que que eu não consigo acessar esse servidor? Porque minha máquina não está conectada diretamente com o contêiner, mas nem tudo está perdido, meu querido, porque a gente consegue fazer sim algumas coisas. Deixa eu remover esse contêiner aqui por enquanto. Vou remover, ó, docker RM- F. Vou remover esse contêiner. Se eu der um docker PS, você vai ver que eu não tenho mais nada aqui. Então agora eu vou fazer algo parecido. Eu vou fazer o seguinte, ó.
Vou dar um docker runx, mas aqui eu vou dar um P, tá? E o - P aqui para mim, o que que ele vai fazer aqui? Ele vai publicar a porta do meu computador na porta do meu contêiner. Então eu vou dizer para ele o seguinte: toda vez que eu digitar 8080 no meu computador, eu quero que você redirezione esse cara pra porta 80 do meu indirex, tá? Vamos ver se funciona. Está rodando aqui, ó. Rodou a mesma coisa aqui no meu computador, do jeito como estava. Mas olha agora aqui, galera. Eu vou dar um
curl local host 2.880. E eu estou agora podendo acessar o endnex que está dentro do meu contêiner através do meu computador pela porta 8080. Se eu chegar agora aqui na minha máquina e dar um local host 2.8080, o que que vai acontecer? Você vai ver aqui que eu tenho welcome to enginex, tá? E aqui tem gente que pode estar se perguntando por que que eu não tenho aqui um welcome to full cycle. Alguém consegue me responder, galera? Alguém consegue me responder? O importante que a gente tem que entender, pessoal, é que toda vez que a
gente usa uma imagem, essa imagem ela não muda nunca, tá? Eu posso criar outra imagem, mas ela nunca muda. Então, toda vez que eu crio um novo contêiner, ele vai pegar a imagem inicial. Aquela vez que a gente alterou para to cycle, o que que aconteceu no final das contas? significou que quando eu apaguei o contêiner, todas as modificações que eu fiz nele acabaram. Foi basicamente isso que acabou de acontecer. E eu estou criando um novo contêiner baseado numa imagem onde welcome to full cycle não existe, existe welcome to enginex. Legal? Então isso aí é
um ponto importante para vocês entenderem aqui também. Beleza? Mas como a gente fala que a gente tem muito docker em ambiente de desenvolvimento, pode parecer um pouco contrainttuitivo eu programar dentro do meu contêiner, mas, né, toda vez que eu matar o meu contêiner, eu perder tudo que eu fiz. Legal. E como que eu consigo evitar esse tipo de situação? Tá? Eu acho que esse aí é o grande ponto aqui pra gente. Então, o que a gente pode fazer em relação ao Docker? A gente pode fazer algo que a gente chama de bind, tá? O que
que é um bind no final das contas, galera? É uma forma de eu montar uma pasta do meu computador para uma pasta que está lá dentro do contêiner. Tá? É basicamente isso que a gente consegue fazer, tá? Vamos ver inclusive se eu consigo pedir pra nossa querida Iá fazer isso aqui para mim. Vamos ver se ela consegue me ajudar. Eu vou colocar o seguinte: execute um Docker Runnex. Beleza? publicando a porta 8080 para a porta 80 do contêiner e faça um bindm do meu computador para a pasta barrausr/share/indinex/html do container. Será que ele vai fazer
alguma coisa aqui pra gente, galera, né? Deixa eu até mudar o modelo aqui que eu tô usando o Cloud Sonets. Vamos ver o que que ele vai acontecer. Ele vai fazer alguma coisa aqui. Olha só o que ele gerou aqui em cima para mim, galera. As coisas vão ficando mais fáceis na nossa vida conforme a gente vai trabalhando, né? Olha só o que que ele mostrou aqui para mim. Olha só. Ele vai dar um docker run men- P 8080 que a gente já prendeu pra porta 80. Menos V significa a gente vai configurar um volume.
Tecnicamente nesse momento isso não é um volume, tá? É um bind mount. Volume é diferente. Mas o que eu tô dizendo aqui é o seguinte. A partir da pasta do meu computador, esse dólar PWD, ele vai pegar a o caminho absoluto da minha aplicação, tá? Ou seja, barrauser/wesleay/projetos barraimersão bardocker até chegar na pasta que a gente tá barra hhtml e ele vai mapear essa pasta HTML paraa pasta HTML lá do endnex e vai executar o endnex aqui para mim. Então eu vou dar um enter agora aqui. O meuNEX tá rodando normalmente. Agora o que que
vai acontecer aqui comigo? Se eu olhar agora aqui, eu tenho uma pasta HTML. Se eu acessar a minha aplicação da forma como a gente tinha feito, vai tá forbid porque nessa minha pasta HTML eu não tenho nada aqui dentro. Concordam comigo? Então o que que eu vou fazer agora aqui? Eu vou colocar assim, ó. Crie um arquivo HTML dentro da pasta. A HTML. Opa, dentro da pasta, cadê minhas pastas? Dentro da minhas folders HTML. Ele não tá identificando meu folder HTML. Dentro da pasta HTML. Cria um arquivo index.html HTML dentro da pá da da página
HTML dando boas-vindas à imersão, o stack e full cycle. E vamos ver se ele gera esse cara aqui para mim. Achou a HTML aqui para mim. Ele vai gerar esse carmarada aqui para mim. Gerou meu arquivo. Nem vou revisar porque aqui não tem problema. Ele gerou. E agora eu vou acessar esse cara aqui e a gente tem o bem-vindo à imersão Fack full cycle. Prepare-se para uma jornada incrível de aprendizagem e desenvolvimento. Show de bola. Então galera, agora a gente mudou um pouco de figura. Vocês concordam comigo? Tá? Por quê? Porque a partir de agora
tudo que eu mudar no meu computador simplesmente vai ser alterado automaticamente dentro do contêiner. E se o meu contêiner morrer, eu não vou perder o meu arquivo, tá? Então esse aí é o grande ponto da questão. Isso permite que nós desenvolvedores consigamos desenvolver dentro dos contêiners tranquilamente, sem nenhum tipo de problema, tá? É basicamente essa é a ideia básica de como que a gente começa a trabalhar com Docker. Dúvidas, galera? Fez sentido isso que eu acabei de mostrar aqui para vocês? Deixe-me saber, meu povo. Fez sentido que eu mostrei aqui? Todo mundo conseguiu entender? Tá?
Então isso aqui simplesmente muda o jogo para mim, porque agora eu consigo programar dentro de um contêiner e se eu perder e se eu matar o meu contêiner, ó, vou matar o meu contêiner, ó. Meu contêiner saiu. Se eu chegar agora aqui, ó, vai dar em branco. Se eu remover o meu contêiner, ó, Docker PS- A, ó, eu vou rodar um comando aqui, ó. Docker RM men f, onde eu mato todos os contêiners. Perceba que eu não tenho mais contêiner nenhum aqui rodando. Se vocês quiserem ver, olha só, aqui é o Docker Desktop. Aqui o
Docker Desktop, ele mostra para mim todos os contêiners que eu tenho rodando aqui nesse momento. Então o que acontece aqui, tá, significa o seguinte, se eu der um docker run, né, e subi o next de novo, olha só o que que vai acontecer. Minha aplicação volta a funcionar. Isso simplesmente acontece. Por quê? porque o meu contêiner subiu normalmente, mas eu fiz aquele mount, né, que simplesmente fez com que eu pudesse compartilhar com o contêiner uma pasta do meu computador. Fechou? Então essa que é a ideia principal. Se eu olhar agora aqui, ó, eu consigo ver
no Docker Desktop, né, o meu contêiner rodando. Se eu clicar nele, eu consigo ver todo o log desse cara. Se eu quiser ver um Bind Mounts, eu consigo ver, ó, que ele tá pegando a partir dessa pasta do meu computador. Se ele quiser ver os arquivos, executar coisas do contêiner, eu consigo fazer isso aqui dentro. Por isso que eu digo que o Docker Desktop ele é bem bacana, porque eu consigo ter muito recurso aqui para mim, que acaba sendo muito simples. Eu consigo inspecionar, eu consigo ver os logs, eu consigo ver a parte de segurança,
tem muita coisa que eu consigo fazer aqui no Docker Desktop. Legal? Então essa é uma ideia básica de como que a gente pode trabalhar com o Docker, tá? Agora vamos fazer algo um pouquinho mais complexo. Vocês topam, galera? Fazer algo um pouquinho mais complexo aqui comigo. A gente vai ter um objetivo agora aqui comigo. Nós vamos criar, tá, a uma aplicação utilizando a linguagem GO, tá? Porque assim vocês já vão acostumando com a linguagem Go. Quem aqui já programou em Go alguma vez na vida, galera? Alguém aqui já programou em Go alguma vez na vida?
Bom, se vocês nunca programaram em Go, eu vou te dar uma dica bem simples aqui, tá? Se você entrar no site go.dev, você vai baixar a o download da imagem, instalar no seu computador. Quando você for no seu VS Code, tá? Você vai dar um command shift p, você digita go, tá? Ou go leng a go, basicamente. E daí quando você digitar o GO, você vai ter update, installate tools. Tá vendo? Quando você clicar aqui, você vai selecionar todas essas opções, vai dar um enter e pronto, tudo que você precisa para rodar o Gol no
seu VS Code ou no seu cursor, já vai tá tudo bonitinho aí. Beleza? Então agora a gente vai fazer algo um pouquinho diferente. Eu vou matar esse nosso servidor aqui do Endnex. A gente não precisa mais. Já tivemos um exemplo aqui, tudo bonitinho. Vou apagar esse cara. Mas agora a gente vai iniciar um projeto simples em GO, tá? O que que esse nosso projeto vai fazer? Eu vou criar um arquivo chamado de main.goo, que é o arquivo principal do nosso projeto. Esse arquivo main.goo, ele tem que ter um pacote que é chamado de main e
ele tem uma função que é chamada de main aqui também, tá? Essa função main é bem parecida com o main do o método main do Java, tá? É um entry point basicamente que todo mundo que chamar esse cara vai executar alguma coisa. Vou dar um exemplo aqui para vocês, tá? Eu vou dar um hello word aqui para vocês no go. Vou dar um doc, é um go run.gow word. Simples assim para você trabalhar com go. Beleza? O go ele tem algumas facilidades também. Olha só que interessante. Se eu der um htp. listen and serve e
colocar aqui e eu executar. Acredite, galera, opa, pera um pouquinho. E eu executar esse cara, acredite que eu já tenho um servidor funcionando. Vocês acreditam nisso? Olha só. Curlal host 2.8080. Olha cá, ó. 404 not found. Ou seja, o meu GO já está funcionando com o servidor web. E se eu quiser, eu posso até, opa, pedir para ele aqui fazer um Hello Word aqui pra gente, ó. Tá? Ele pode fazer um hello word aqui pra gente. Isso aqui eu tô dizendo na pasta home, né? tenha uma função que tem um request, um response e imprima
esse valor aqui, tá? Existem formas mais simples de imprimir, tá? W. E dá um hello. Tem várias formas aqui de você fazer, mas o fato que eu tô querendo trazer aqui para vocês, galera, é que o Gol ele permite de uma forma muito mais simples você criar APIs, sistemas extremamente performáticos aqui pra gente, ó. meu Hello World com meu servidor em Go aqui tá funcionando. Beleza. Uma outra coisa que muita gente pergunta com go é: "Mas como que isso funciona para rodar em outros sistemas?" Né? Cara, é muito simples. Você dá um build, olha só,
go build main.g, tá? E eu vou dar um enter. Quando eu der um enter, você vai ver que ele gerou um main aqui, tá vendo? Esse main é um arquivo binário. Então, se eu der um ponto bar/ main, ó, ponto barra main, adivinha? Tô com o meu servidor web já funcionando. Eu faço deploy em um único arquivo e já tá tudo funcionando. Basta executar um programa e já tá funcionando. Ah, Wesle, mas eu estou no Windows, então eu vou dar um goos igual ao Windows, uma variável de ambiente. Go build main.g. E olha só o
que que vai acontecer. ele vai compilar e vai gerar o main. Sacou? Então, o go de forma geral é uma linguagem main simples e vocês vão utilizá-la a durante a imersão. Por isso que eu já tô dando um exemplo aqui em go bem simples aqui para vocês. Agora, o grande ponto aqui da minha aplicação em goin: Eventualmente eu vou querer acessar um banco de dados, tá? Eu vou querer acessar um banco de dados e eu vou também querer utilizar a minha aplicação em Go. Então, o que que eu quero fazer aqui? Eu vou fazer algo
bem interessante para facilitar um pouco a nossa vida. Eu vou criar um arquivinho aqui chamado de Docker File. Olha só, Docker File. O Docker File é um arquivo especial do Docker que ele ajuda a gente criar aquelas imagens, entendeu? Então essa que é a ideia. principal aqui do nosso Docker file. Então, olha só que interessante, eu vou colocar from porque eu vou partir de alguma imagem que já existe. Eu vou usar a partir da Goleng 1.24, que é a última versão, Alpine, que é a versão mais pequenininha, vamos dizer. Aqui eu vou falar que o
work dear que ele vai utilizar, ou seja, qual que vai ser a pasta onde o nosso projeto vai ficar, vai ser a pasta barraapp. Eu vou copiar todos os arquivos que tem do meu projeto dentro do meu contêiner, mas no comando eu vou executar o seguinte, tá? Eu vou colocar tail - f/dv/n. Alguém tem alguma ideia o por que eu tô fazendo isso aqui? Alguém tem alguma ideia porque eu tô fazendo isso? O que eu tô dizendo aqui é o seguinte, ó. Eu vou criar uma imagem Docker. Essa imagem Docker, ela vai, né, vai ter
os arquivos do projeto dentro da pasta app. Todos os arquivos de projeto eu vou copiar dentro dessa imagem. Mas quando a gente for executar essa imagem, eu quero que você dê esse comando. Por que que ele vai dar esse comando? para manter o meu contêiner funcionando, porque se eu não colocar nenhum comando, o meu contêiner executar e vai cair igual que aconteceu com o Hello Word, tá? É basicamente isso que acaba funcionando. Ou seja, isso aqui é uma gambiarra, vamos dizer assim, não é uma gambiarra, todo mundo usa para manter o processo funcionando. É simplesmente
isso que eu quero fazer. Beleza? Agora, olha só que interessante, eu vou entrar com mais um conceito agora aqui, que vai ser o seguinte. Eu vou criar um arquivo chamado de dockercompose. Esse arquivo aqui, ele já é um arquivo um pouquinho diferente. Esse arquivo permite eu gerenciar um monte de contêiner ao mesmo tempo. Vamos imaginar que eu tenho uma aplicação que vai ter o Go e vai ter o PG como banco de dados. Que que eu posso fazer? Eu posso definir os meus serviços, onde eu vou falar que um serviço meu vai ser app, que
eu vou dar um build. O que que é o build? Ele vai dar um build nessa imagem do meu Docker file. Então ele tá falando ponto para dizer que o Docker File está na raiz desse arquivo. A porta que ele vai trabalhar vai ser 80 808 8080 que vai exportar do meu computador. Beleza? E aqui eu vou também fazer aquele meu bind mount, ou seja, eu vou falar aqui a pasta ponto, ou seja, todas os arquivos do meu computador vão estar montados na pasta barraapp, que é a pasta onde a gente vai trabalhar dentro da
nossa aplicação. Fez sentido? Maravilha, galera. Tem gente perguntando aqui, mas o Docker Compose não é recomendado em produção. Magno, a gente não está trabalhando em produção. A gente tá criando um ambiente de desenvolvimento, tá? E dá sim para trabalhar com Docker Compos em produção, desde que você coloque check, eh, mecanismos de restart, etc., Dá, mas nos dias de hoje é mais recomendado você utilizar um Kubernets, um ECS, um Google Cloud Run ou qualquer outro sistema para gerenciamento de contêiners, mas dá sim para trabalhar com Docker Compos em produção, tá bom? Então isso aí é um
ponto importante somente para deixar claro aí para vocês. Então agora que eu tenho, tá, o nome do meu serviço app, que vai usar, né, o nosso Docker File e vai expor a porta 8080 e vai compartilhar esse volume, eu vou ter um outro cara aqui que eu vou chamar de Postgress, certo? E o Postgres aqui para mim ele vai ser o seguinte, tá? Ele vai ser um serviço do Postgers, onde ele vai usar uma imagem que já existe do Postgers 16. Inclusive nem sei se é a se é a mais recomendada aqui nesse momento. Eu
precisava de mais variáveis de ambiente aqui também para ele trabalhar. Deixa eu pedir aqui pro meu querido cara, eu vou falar o seguinte, ó. No dockercompose. Né? Ah, reajuste o serviço do Postgress, colocando banco de dados padrão como imersão e as variáveis de ambiente necessárias. Coloque também que precisaremos de um volume e a dependência a da app para o postress. Vamos ver o que que ele vai fazer aqui pra gente para nos ajudar a fazer essas modificações. Maravilha. Deixa eu dar um accept. Vamos ver se essa parada aqui vai funcionar aqui pra gente. Então, o
que acontece é o seguinte. Ah, ele tem o PG 16, o password é Postress, o nome do banco de dados é imersão, o user é Pugress, o PG data tá apontando para cá e o Postgreis tá apontando pro PG data aqui. Eu acho que eu nem preciso desse PG data aqui na realidade. Se tiver algo errado vocês me falam aí, galera. E a nossa aplicação depende do Postgress aqui pra gente. Beleza? Então, o que que eu vou fazer agora aqui pra gente, pessoal? Eu vou executar um comando, tá? Chamado de Docker Compose app- D. O
que que esse cara aqui para mim vai fazer nesse momento? Ele vai ler esse meu arquivo do Docker Compose, tá? e vai subir tanto essa minha aplicação app quanto o meu Postgress aqui também, tá? Então essa que é a ideia aqui para mim. Eu poderia ter usado um post menor aqui para mim, mas maravilha. Então olha aqui, tá rodando. Vamos ver se está funcionando aqui esse cara. Dea dar um docker composto de PS. Então, nesse momento, eu consigo ver os contêiners rodando. Vamos ver aqui no Docker Desktop para ficar melhor aqui para vocês verem, tá?
Então, ó, aqui dentro da nossa pasta Docker, eu tenho o Postgris e a nossa app. Esse cara usando o Postg 16, esse aqui usando a nossa aplicação que a gente usou o nosso Docker File e esses caras estão de pé. Maravilha. Então, a partir de agora, eu já tenho, tá, o meu Docker Compose, que vai gerenciar tanto a minha aplicação quanto o meu banco de dados. E tudo que eu gravar no meu banco de dados, o que que acontece? Vai funcionar, né? Vai guardar num volume aqui para que quando eu matar esse contêiner, eu não
perca os dados que foram gravados no banco de dados aqui para mim. Beleza? Então, o grande ponto é o que a gente tem agora. Quando eu dei um docker compose app- D, ele buscou, né, o meu Docker file aqui nessa pasta aqui dentro, ele tem meu main.g. E agora em tese, tá? Se eu chegar agora aqui, ó, e dar um Docker Compose EC app, tá? SH. Vamos lá. Em tese, eu consigo ver os arquivos. Eu estou dentro do contêiner agora, mas estou vendo os arquivos do meu computador. Tudo que eu fizer aqui altera aqui. E
tudo que eu alterar aqui vai alterar aqui, porque a gente tem um espelho dentro do meu contêiner agora aqui pra gente. Legal. O que que isso significa, galera? Significa agora que se eu der um go run to go, tá? e eu acessar aqui o meu computador aqui dentro, olha só o que eu vou ter. Eu vou ter o Hello Word da minha aplicação com Go. Beleza? Agora que eu tenho isso, eu quero fazer algo um pouquinho interessante, tá? E eu vou pedir para ele fazer o seguinte, eu vou pedir aqui pro meu cursor, vou abrir,
eu vou colocar o seguinte, baseado no @main.goo, tá? Ah, crie uma struct de produtos com nome, descrição e preço, que é um float 64. OK. Vou querer que crie um arquivo SQL, criando uma tabela de produtos. Crie uma função para listar esses produtos com SQL puro usando o PGR baseado no serviço do @ dockercompose. Faça isso de forma simples, apenas para exemplificarmos o código. Vamos ver se ele gera alguma coisa aqui pra gente, tá? Se ele não gerar, não tem problema aqui para mim. Então, ele tá gerando um arquivo, uma pasta SQL, criando aqui para
mim. E agora ele vai modificar o meu arquivo main.g P go pra gente conseguir trabalhar com essas mudanças aqui que ele fez. E aqui eu vou explicar para vocês como é que a parada funciona aqui para mim. Vamos lá. Em tese ele fez. Eu vou aceitar e daí qualquer coisa eu ajusto essas últimas mudanças aqui dele, tá? Vou dar um accept. Qualquer coisa a gente muda. Então vamos ver o que que esse cara fez aqui, tá? Bom, se você não sabe o gol, não fique preocupado no momento, tá? Uma struct é uma estrutura de dados.
É como se fosse um tipo, como se fosse uma espécie de uma classe, onde eu tenho o ID, o nome, a descrição e o preço. O ID é um inteiro, o string e o nome é uma o nome e descrição é um string. E aqui no arquivo main, o que que ele fez? Ele criou uma string de conexão com Postgress. Legal. Ele está abrindo a conexão com o Postgress aqui para mim. E agora aqui no barraprutos que ele criou, ele fez um produtos listar produtos, passando a conexão com o banco de dados e trazendo o
resultado de produtos para Jon. E aqui ele fez uma função para listar os produtos do banco de dados aqui para mim. Basicamente foi isso que ele acabou de fazer. E eu não sei se vai funcionar. Eu vou precisar fazer algumas coisas aqui. Primeira coisa, se você perceber, ele tá dando um main.g, tá vermelhinho. Por quê? Porque isso aqui é uma dependência externa. Então eu vou dar um go mod e tide somente para ele baixar essa dependência aqui pra gente e aí a gente sabe que ele tá trabalhando aqui para mim. Beleza? Então, em tese, a
gente tem um programa, obviamente ele tá meio desestruturado, mas somente para ver se a gente consegue estabelecer a conexão com o banco de dados. Então, vou dar um go run.goo, servidor rodando na porta 80. E agora eu vou simplesmente vou dar um curl local host 2.8080/ products. Foi isso que ele criou, o end pointutos. produtos aqui para mim e ele tá falando a erro listar produtos relação produtos não existe, né? E ele não existe, provavelmente porque a gente não criou esse arquivo no banco de dados, né? Então eu vou colocar usando o Docker Compose, execute
o arquivo SQL. dentro do Postgress. Vamos lá. E ele tá botando esse cara aqui como um init para aplicar esse comando. Então, quando esse contêiner subir a primeira vez, ele vai executar esse SKL. É isso que ele tá colocando aqui para ver se vai funcionar essa parada aqui também, tá? E depois, galera, se vocês quiserem, a gente pode falar um pouquinho sobre gol, mas a minha ideia aqui, tá, pessoal, não é nem necessariamente ficar mudando qualquer coisa ah e focando em go, tá? O nosso foco aqui é Docker. O que eu quero mostrar na realidade
aqui pra gente é um contêiner, tá? Usando no final das contas a esse meu Docker file, ele deu build, ele mudou o meu Docker file, né? Esse que é o grande ponto. Deixa eu parar esse cara aqui, ó. Isso aqui é para ser o T-US F. Tio meno. Deixa eu dar um cancelar em tudo. Stop. Eu vou colocar. Você mexeu no @dockerfile, eu quero que o comando dele seja o te f barra dev/nul para manter o processo. E galera, um dia eu vou dar umas aulas de a para vocês, principalmente para quem tá no curso
Full Cycle e outros cursos nossos que a gente tá preparando, onde esse tipos de coisa não acontece pelo fato de a gente usar todo um framework, uma metodologia para isso, que é o que eu não tô fazendo nesse momento, tá? Eh, só para vocês saberem, só ver para ele mudar aqui para mim. Beleza, então. OK. Blá blá blá blá blá blá. Roda o comando. Eu não precisava nem tá dando o build no main aqui que eu não precisava. Mas beleza. O grande ponto aqui, eu quero ver o nosso postes, né, no final das contas. E
ele mudou a minha imagem. Mudou a minha imagem, cara. Goleng 1.24 Alpine. Deixa eu rodar aqui de novo um docker compos app men d para ver se ele sobe. Deixa eu ver se ele fez alguma alteração no meu post figur 16. E ele passou aquele meu init aqui, né? E ele botou init.Ssql com esse cara agora aqui rodando. Então, aparentemente essa parada vai funcionar. Vamos ver esse cara. Executando agora aqui dockerrunmain. Docker não, gorrunmain. Tá baixando a libha. rodando na porta. E vamos ver se aquele erro vai mudar da listagem dos meus produtos. Aqui, relação
dos produtos não existe e as tabelas estão aqui. Na realidade, a relação dos produtos não existe por um único motivo aqui, na realidade, né? Encode. Não, é postis. Galera, uma outra coisa aqui para vocês, tá? É um ponto importante, tá? Foi até bom ter acontecido isso, galera. Foi até muito bom. Pessoal, existe uma coisa, tá? Que isso é independente de linguagem de programação, tá? Olha só que interessante. Você concorda que aqui dentro eu estou dentro do meu contêiner? Tá? Eu estou dentro do meu contêiner aqui, se vocês perceberem. Concorda? Dentro do meu contêiner, dentro do
meu Docker Compose, eu estou dentro da mesma rede, ou seja, essa minha aplicação consegue enxergar o meu banco de dados. O que que isso significa? Significa que nesse main.g aqui, tá vendo? Host. Esse host tem que ser um nome do serviço que tá no Docker Compose. Não pode ser local host, por exemplo, entendeu? Porque vai dar ruim. Porque esse meu programa Main tem que falar com o host do Postgris que está dentro da mesma rede. Fez sentido isso que eu falei para vocês, galera? Isso aí é super, mas super importante mesmo vocês conseguirem se ligar,
tá? Então levem isso, porque aqui é onde a maioria das pessoas que estão começando com Docker acabam perdendo assim muito, mas muito tempo mesmo em relação a isso, tá? Ah, em relação ao posts aqui, tá? Eu posso chegar e falar assim, eh, deixa eu ver se isso funciona. Baseada na to de Postgress, na realidade nem é a Tu, né? Eh, é que eu ia mostrar um MCP aqui para vocês, mas eu não quero mostrar ele agora. Eu vou colocar execute um docker compose exec no postgrace para listar as tabelas do banco. Vamos ver se ele
vai trazer aqui pra gente. Ele não achou nenhuma relation. Então quer dizer que ele acabou não criando aquela tabela na hora que a gente acabou subindo aquele nich, tá? Então se ele não criou, aquele nich não existiu porque aquele contêiner devia ter a aquele contêiner deve ter inicializado. Uma outra coisa que eu posso fazer na realidade é executar esse cara diretamente aqui. Vamos ver se ele vai encontrar para ver se ele vai rodar novamente para ver se ele encontra essa tabela agora criada. Vamos ver. Ele botou um slip de 5 segundos para dar tempo do
post iniciar. Vamos ver se ele vai achar. Se ele não achar nenhuma relations, eu vou mandar ele executar o init diretamente a ali dentro do post, que é o que eu acho que ele não vai colocar. Eu vou fazer o seguinte, eu vou fazer o seguinte. Stop. Execute o @init. Postgress com o Docker Compose Exec. Bom, galera, o grande ponto que a gente tem que se ligar, tá? Vamos ver se esse cara aqui ele consegue rodar, vai. O grande ponto que a gente tem que a gente tem que se ligar, na realidade não era nem
isso que eu tava pedindo para ele. O grande ponto aqui que a gente tem que se ligar, galera, é que a partir de agora eu tenho uma ferramenta na mão que vai me ajudar a fazer múltiplas coisas. Uma coisa, por exemplo, é eu ter o gol e eu podendo trabalhar na minha aplicação. Uma outra coisa é eu ter o post. Uma outra coisa é, por exemplo, eu chegar aqui no meu docker compose e falar o seguinte, tá? Eu quero ter o Reds aqui para mim. Beleza? Simples assim. E agora se eu dou um run service
aqui, deixa eu até dar um um docker compose app- D. Pera aí. Um Docker Compose app- D. Ele tá apontando reds para um outro volume que não existe aqui ainda. Deixa eu tirar o volume. Não vou armazenar nada no meu reds. Vai assim mesmo. O que que ele vai fazer nesse momento? Ele vai subir um Reds aqui para mim. Então eu não sei se vocês perceberam aonde a gente tá querendo chegar. O que eu tô querendo dizer, galera, é que sabe quando você tem um monte de aplicação com banco de dados, com reds, com fila,
com tudo isso e você tem que ficar subindo cada um. Quem aqui fica formatando a máquina constantemente, galera? Fala para mim. Hã, quem formata a máquina constantemente? Normalmente é porque você fica instalando um monte de tranqueira. Quando você tá trabalhando com Docker, isso não acontece. Não acontece por um único motivo no final das contas, porque todos os serviços eles sobem, tá? E depois disso todos os serviços eles são simplesmente exterminados, tá? Isso aí é um ponto importante. Então, você sobe um ambiente com um comando, você desce o seu ambiente com um comando e o mais
importante, né? Se você tem esse ambiente no seu GitHub e você passa pro seu colega de trabalho, o seu colega vai dar um docker compos AP men e vai rodar normalmente aí na sua máquina, tá? Então isso aí é o principal ponto que você consegue trabalhar. Beleza? O rei da costa falou: "Não, eu não porque uso o Docker, eu não entendi o que que a galera tá falando. Eu vivia sofrendo até conhecer o Dock. Aí eu uso esse formato. Legal. Então, galera, essa aqui que é a que é a grande sacada no meio de toda
essa história. Ah, aqui, né? Ele, o meu, o meu, o meu cursor aqui, ele está totalmente maluco. E ele só fica maluco por um único momento, galera. por único momento, não, por um único motivo. Falta de contexto e falta de dados para ele conseguir fazer a pilotagem do sistema. O que que isso significa, galera? Todas as vezes que você for trabalhar com IA, ou você vai passar raiva ou você vai fazendo, fazendo, fazendo e tá dando tudo certo até o momento que você perde o controle do seu software. E isso só acontece por um motivo,
porque você não tem uma metodologia clara para trabalhar com IA. Perceba que da forma como eu tô fazendo aqui, ó, ele fica delirando das formas como a gente tá trabalhando, tá? ele começou a mudar e colocar o init aqui compartilhando o volume no postis. Ele começou a fazer um monte de coisa que no final das contas ele nem precisaria, tá? Com um pouco mais de contexto, eu poderia falar algo um pouco melhor que talvez iria ajudar. Eu poderia falar: "Ah, use docker composec para executar um arquivo psql. direto no banco de dados de uma única
vez, sem mexer no docker composi ponto em simplesmente execute o @init.sskl SQL com o Docker, Compose, EAC, Postgress e etc. Vamos ver se ele funciona com um pouquinho mais de contexto, galera. O ponto aqui, ó, aqui ele já melhorou um pouco, acredito, né? Aqui ele já deve ter melhorado um pouco mais. Ele não achou o apps, né? Ele achou o comando, ele vai executar direto lá. Aqui é minha tabela. Produto já existe, beleza? Tudo mais, blá blá blá blá blá blá. Então em tese aqui, se eu rodar o meu arquivo do meu Docker file, meu
Docker não, go run.go, já devo ter algum programa rodando em outro terminal aqui, né? Minha porta deve estar em uso em alguma em algum outro lugar, por isso que ele está morrendo aqui no meu terminal. O lance é o seguinte, galera. Tenho o meu banco de dados, eu consegui gravar arquivos, né, executar e criar uma tabela dentro do meu banco de dados. O meu contêiner está rodando, mas muitas vezes para eu fazer o gerenciamento desses contêiners, existem algumas coisas que são interessantes nos dias de hoje quando a gente tá trabalhando com o IA, tá? E
eu quero dar um exemplo agora aqui para vocês. Quem aqui já ouviu falar em MCP? Alguém já ouviu falar em MCP, galera? Deixem-me saber aí, ó. Felipe genuíno. O cara é tão genuíno que ele tá falando a verdade pra gente, tá? Pessoal, o lance é o seguinte, tá pessoal? Deu para vocês entenderem a ideia básica do Docker? Quando a gente tiver na imersão, basicamente a gente vai ter um arquivo Docker Compose, que você vai dar um Docker Compose app menos dele, vai subir toda a aplicação. Arquivos SQL a gente vai importar quando a gente precisar,
tá? A gente vai ter Docker File para configurar, né, os nossos projetos quando a gente precisar, tá? E os arquivos do nosso sistema, tá? Então, a ideia básica para você conseguir acompanhar a imersão é essa que eu queria te passar com o Docker. Legal. Esse aí é um ponto. Porém, o que que acontece? Se vocês perceberem, eu tô brincando e tô pedindo para ele fazer várias coisinhas aqui. Ah, com o Iá, eu peço para ele abrir uma janela, ele escreve umas paradas. Muitas dessas coisas às vezes não são tão acuradas. E normalmente grande parte de
todas as coisas que você sofre hoje em dia com IA é porque você não tem uma metodologia para gerenciar o seu projeto trabalhando com IA e você não tem ferramentas necessárias para te ajudar fazer com que a IA pegue as informações relevantes da sua aplicação, tá? Então, o que que acontece quando a gente tá trabalhando com IA nos dias de hoje? Existe um conceito aqui que é chamado de model context protocol, tá? Esse cara, tá? É uma é algo criado pela Antropic, que é a que mantém o cloud, né? A openi tá fazendo algo parecido,
mas basicamente a ideia desse cara é o seguinte. Vamos imaginar que a gente tem a nossa IAC, tá? Tem a a IAC. Beleza? Toda vez que a gente faz uma requisição paraa nossa IA, o que que vai acontecer? Ela vai buscar essa parada em toda a base de treinamento que ela tem aqui, ó. Ela tem toda a base de treinamento aqui. Mas às vezes, e se eu pudesse de alguma forma fazer algo um pouco diferente? Quando eu pedisse algo para mim, ao invés de ela consultar só na base dela, ela fizesse o seguinte: "Olha, Wesley,
eu tenho algo aqui que eu chamo de MCP server. Nesse MCP server você tem três coisas importantes. Você tem algo que a gente chama de tools, você tem algo que a gente chama de resources e você tem algo que a gente chama de prompts. Para que que a gente precisa disso no final das contas? seguinte forma, é o seguinte, vamos imaginar que eu tenho a minha aplicação, mas eu tenho toda uma documentação da minha aplicação. Então, na hora que eu tô desenvolvendo a minha aplicação aqui, ó, eu tô criando o meu código da minha aplicação,
eu vou chegar nela e eu preciso ter uma regra de negócio. E essa regra de negócio, ela tem uma especificação. E essa especificação tá, por exemplo, num Google Drive. Poderia ser num banco de dados, tá? Tá num Google Drive aqui, ó. Legal. Então, o que que acontece? Eu poderia falar o seguinte, eu vou bater aqui no cloud, vou falar o seguinte: "Olha, eu quero implementar a regra de negócio X, regra X. Para isso eu preciso de mais informações. O cloud ele vai bater num MCP Server, no meu MCP server, e ele vai falar: "Poxa, ele
tá precisando das regras de negócio. Aonde que eu consigo isso?" Opa, eu tenho resources e eu tenho umas resources de documentação. Quando ele acessar esse resource aqui nesse server, esse server vai bater e vai ler esse meu documento, mandar esse cara de volta pro cloud ou pra minha IA e vai retornar aqui para mim em linguagem natural para que eu consiga trabalhar. Sacou como é que isso funciona? Sacou? Agora, olha só que interessante também. Vamos imaginar que além disso, eu queira fazer algo um pouco diferente. Eu queira toda vez saber quais os meus contêiners que
estão ativos. Então, eu posso chegar aqui e falar: "Olha, eu quero saber os meus contêiners". E daí o Cloud vai falar: "Opa, eu tenho aqui no servidor MCP, né, um cara que só mexe com Docker e ele tem uma ferramenta que consegue executar um comando, tá? E essa ferramenta aqui, ela tem, tá, uma parada que consegue executar comandos Docker aqui para mim. Então, o que que acontece nesse caso? Toda vez que eu falar aqui paraa minha IA que eu quero executar um comando docker, ele vai olhar, vai ver se eu tenho um MCP server. Se
ele tem, ele vai achar um MCP server docker, vai ver as ferramentas que existe, existe uma ferramenta de listar os contêiner, existe. Aí ele vai pegar o comando e vai executar esse comando pra gente ter essa listagem. Fez sentido isso aqui para vocês? Galera, então o que acontece aqui nesses nossos casos são que agora a IA ela consegue acessar os dados que a gente quiser que elas acessem. A gente consegue criar end points que a IA consegue consultar a nossa aplicação e retornar dados e a gente consegue criar end points onde a a IA executa
o nosso end point. Sacou qual que é o lance? Então, vamos imaginar que toda vez que eu quero fazer algo no meu projeto, eu quero que verifique se aquele projeto está no ar. Aí ele vai bater no end point, vai executar um comando, vai ver se tá no ar e vai trazer ali para mim. O lance é que você hoje em dia tem diversos servidores MCPs disponíveis, tá? Isso aí pra gente é bem interessante. E se você olhar, existe um servidor MCP de Docker pra gente gerenciar contêiners. Então o que que você pode fazer? Você
pode ir na instalação installation guide aqui e você pode instalar esse cara e vai ter esses recursos. Tá vendo que ele tem aqui tools, certo? Ele tem tools que são esses contêiners, tá vendo? O sources ele consegue pegar logs, dados de memória e fazer tails de alguns logs dos nossos conttainers. Então, lembra quando eu falei aqui que eu tenho tools, resources e prompts? Esse cara aqui, esse MCP, cadê? Ele tem tools e tem esses resources. E para botar ele para rodar, você pode utilizar o seu cloud, porque esse é um recurso feito pela Antropic. Então,
se você, por exemplo, ter um cloud aqui, se você olhar, ó, eu tenho 45 tools disponíveis para eu trabalhar, porque eu registrei um MCP. Se você tá usando o cursor, o cursor tem também essa opção onde eu posso chegar aqui no cursor, vou em settings, cursor settings e eu vou aqui em mcps. Quando eu vou aqui em mps, eu tenho um mcp de postg, que depois eu posso mostrar para vocês, mas eu tenho também um MCP de Docker, tá vendo? Ele tá desabilitado. Eu vou habilitar ele agora aqui. Vamos ver se ele vai subir. Se
ele não subir, eu vou ter que ah, matar e subir ele de novo, porque ele tá usando o próprio Docker para subir esse cara aqui. Mas basicamente, ah, deixa eu matar esse cara e subir ele de novo só para ele não dar ruim, porque ele deve estar usando algum socket. que eu provavelmente eu eu desabilitei ele para matar os contêiners Docker que a gente tava querendo para não dar ruim, pra gente começar o desenvolvimento com Docker sem esse contêiner tá aparecendo. E daí eu matei o contêiner, provavelmente o MCP tá dando pau. Esa um pouquinho,
deixa eu parar meu screen para eu reiniciar esse cara aqui, galera. Deixa eu voltar inteira pra tela. Não sei porque que ele tá me deixando aqui presenter. Somente eu como presenter aqui. Show de bola. Deixa eu organizar aqui. Vamos lá. Deixa eu fechar esse cara. Deixa eu tentar reabrir esse cara aqui. Só um segundo, meu povo. Cursor Docker que tem a nossa aplicação MCPs. Vamos ver se ele vai ficar verdinho aqui para mim. ficou verdinho. Eu só reiniciei o cursor aqui só para vocês saberem, tá galera? Então vamos lá. Vou compartilhar minha tela novamente. E
a tela que eu quero compartilhar é essa tela aqui. Aí. E aqui, ó, voltamos no cursor. Tá vendo que tá aqui, ó, MCP Server Docker? Eu registrei esse MCP server aqui para mim. Então, o que que acontece agora aqui, galera? Se eu chegar aqui no meu cursor, abrir um novo chat, por exemplo, e eu posso falar o seguinte: ah, usando a tool Docker, traga os contêiners em execução. Que que vai acontecer nesse momento aqui, galera? Vocês estão vendo que ele agora abriu uma opção aqui para mim? Se eu quiser eu consigo executar essa tool, tá
vendo? E o que que acontece então nesse momento? Quando eu dar um run tool, olha o que vai acontecer. Ele vai provavelmente pegar essas opções e vai trazer aqui os contêiners que estão sendo executados no momento aqui para mim, tá? Então, esses são os contêiners que a gente tem. A gente tem o contêiner do Postgres, a gente tem o contêiner da nossa aplicação, o do Reds, esse contêiner do próprio MCP que ele tá utilizando e ele tem o do Buildex aqui, que é para ele conseguir fazer o build das nossas aplicações. Mas eu não sei
se vocês conseguem perceber o nível de coisas que a gente consegue fazer. E se você clicar aqui, ó, você consegue ver quais os parâmetros que ele passou, tá? para trazer a listagem aqui para mim, entendeu? Se eu chegar aqui, eu posso falar o seguinte: "Olha, usando a to do Docker, remova contêiner do Reds. Vamos ver se ele consegue entender de qual contêiner eu tô falando aqui para mim, ó. Aí ele já tem, ó, uma tool de remover contêiner. Se eu olhar aqui, ó, ele já identificou qual contêiner que ele quer remover. e o force é
igual a true. Então, se eu der um run agora aqui para mim, ele vai realmente remover o contêiner do meu docker, tá? Então, se você começar a perceber, galera, cada vez mais vai começar a ficar mais fácil você gerenciar as suas aplicações de forma geral, seja no Docker, seja no Kubernets, seja utilizando a aplicação que você quiser fazer, tá? Por quê? Porque você pode criar o seu próprio servidor MCP customizado paraa sua empresa, pro seu trabalho. Imagina que toda vez que você quer falar pro pra sua IA falando, olha, geregoritmo básico aqui para mim, somente
para eu ter uma ideia, de acordo com a regra de negócio que tá documentada na minha aplicação X, ele vai acessar o seu servidor MCP, vai acessar a documentação que você disponibilizou, ele vai ler essa informação e baseada nessa informação, ele vai construir o algoritmo para você. Sacou? Então vocês conseguem perceber, galera, que a gente está num momento muito diferente. A IA ela não só dominou, né, a nossa criação de código, mas ela vai dominar a interface que a gente tem com recursos da nossa empresa, com ferramentas que você pode criar para ajudar o tempo
todo, né? Eu não sei se ele consegue ter logs, tá? Eh, quais são os logs do Post Gris baseado no nos resources do Docker? Vamos ver se ele vai conseguir pegar resource. Não tenho certeza. Aqui ele tá tentando ir buscar os logs do Postgre aqui, ó. Fet container logs. E ele achou um MCP. E aqui ele trouxe as informações aqui do meu postress, ah, com os status e as paradas aqui do meu post. Galera, é muito louco, né? É muito louco isso que a gente tá vendo e essa transformação tá acontecendo agora. Agora você consegue
perceber que se algum dia você achava que a tava evoluindo muito rápido, produzindo código muito rápido, mas a gente tinha muito problemas de contexto ou execuções, tarefas que a gente tinha que fazer toda hora. Agora a gente tem tools onde executam coisas pra gente. A gente tem resources onde a gente consegue pegar recursos, documentações, acessos às APIs, fazer coisa que a gente quiser e trazer essa informação para ajudar no desenvolvimento do software. Você tem prompts prontos? Eu posso ter um prompt que vai gerar toda uma base de conhecimento e uma contextualização sobre o projeto que
eu não vou precisar ficar digitando mais simplesmente porque isso eu vou ter um servidor MCP para isso. Ou seja, pessoal, se você é um desenvolvedor que ainda não tá trabalhando com IA, não tá trabalhando com Docker, não tá trabalhando com Docker e IA, você vai ficar fora do mercado, você vai ser substituído. Você não vai ser substituído pela IA, você vai ser substituído por um desenvolvedor que usa IA e que esse desenvolvedor que usa IA, ele vai ser tão bom, mas tão mais performático, ele vai ser tão mais produtivo que muitos outros envolvedores não vão
ser mais necessários. Isso é um fato, galera. Eu acho que o mercado de tecnologia ele está num momento de negação. A gente não quer acreditar que essas coisas estão acontecendo, mas é verdade. Eu não tô aqui para gerar um balde de água fria. Para mim seria muito melhor falar nesse momento: "O mercado tá bombando, vamos todo mundo pra tecnologia e comprar meu curso." É, seria muito melhor, tá? Mas o grande ponto que você tem que se ligar agora aqui é, você tem duas opções. Uma opção é continuar do jeito que você tá. A outra opção
é você ter conhecimentos sólidos nas tecnologias e também aprender IA de verdade. E não é só MCP, é ter metodologias guiadas a IA para desenvolvimento, um tipo de um AI driven development, tá? Você precisa desses conhecimentos. Não adianta também ficar na IA pedindo para listar contêiner com Docker. Você tem que entender a fundo o Docker para você conseguir navegar nesses ambientes. O nosso objetivo com a imersão full stack full cycle é te dar esse nivelamento. Obviamente a gente não consegue passar tudo em uma semana, mas a ideia aqui é que hoje nesse esquenta eu consegui
pelo menos dar uma palhinha para você de para você entender o que que é um docker file, como é que você executa um contêiner, como que você vê os contêiners em execução, como que eu consigo mapear um arquivo, né, para dentro do contêiner, como que eu consigo expor uma porta, como que eu consigo ter o docker composed para eu subir vários contêiners. de uma vez e também como você consegue usar MCPs para você ter um gerenciamento mais simples e mais rápido de contêiner linguagem natural falando com uma IA. Legal? Então pessoal, hoje era isso que
eu queria passar. Docker, tá? Docker você tem que saber, tá? Não tem essa, não tem outra opção. Agora, amanhã a gente continua, vai ser uma live por dia até sexta-feira para que você consiga aprender mais sobre Nests, sobre GO, porque a gente vai ter uma live só falando sobre Gol, uma live só falando sobre Cafka e uma live só falando sobre NextJS para front end, tá? Então, amanhã, tá, às 7 horas da noite, você vai ter uma aula com Luiz Carlos sobre Nests. Vai ser super importante para você entender como é que esse framework funciona,
porque ele vai ser utilizado na imersão, beleza? Então, dica de hoje de ouro para vocês. Deem uma olhada, tentem refazer os exemplos que eu acabei trazendo aqui para vocês. Espero que vocês tenham curtido, galera. Espero que eu tenha dado essa base. Mesmo que você já soubesse Docker, às vezes a gente aprende a pegar alguma coisinha ou outra. O MCP às vezes alguma galera pode nunca ter ouvido falar e acaba vendo essa parada rolando. Beleza? Então por hoje é só, galera. Espero que vocês tenham curtido, espero que vocês tenham uma semana abençoada, que vocês durmam bem,
que vocês tenham uma semana extremamente produtiva, que vocês consigam chegar e conseguir atingir os objetivos que vocês estão buscando. E eu espero que a Full Psychico durante todo esse caminho consiga te ajudar ainda mais na sua vida profissional. E novamente, tá pessoal, se você gostou, tá, da abordagem, da forma como a gente ensina e tudo mais, deem uma olhada no nosso curso Full Cycle. Esse nosso curso Full Cycle, ele serve exatamente para isso. Ele dá uma base extremamente sólida de todas as tecnologias que você precisa saber no mercado. A gente tá adicionando de uma forma
muito forte todo esse desenvolvimento orientado a IA. E eu tenho, não tenho dúvidas que vai ajudar bastante aí na sua carreira. Então, se você tiver interesse, dá um solicitar contato aqui, a gente bate um papo e você vai conseguir ter uma ideia melhor de como que a gente vai poder te ajudar nessa nova era aí. Beleza, pessoal? Um grande abraço, fiquem com Deus, tudo de bom e até amanhã com Luiz Carlos pra gente falar mais sobre Nests. Um abração para vocês.
Related Videos
Arquitetura de Software e Live Coding
3:24:09
Arquitetura de Software e Live Coding
Full Cycle
8,573 views
Docker do zero em uma hora
1:25:54
Docker do zero em uma hora
Full Cycle
7,659 views
Como usar corretamente Docker Volumes | Nunca mais perca seus dados em containers
56:44
Como usar corretamente Docker Volumes | Nu...
Fabricio Veronez
11,251 views
Complete Kubernetes Course - From BEGINNER to PRO
6:14:41
Complete Kubernetes Course - From BEGINNER...
DevOps Directive
250,991 views
Como CRIAR seu servidor MCP (Fácil)
22:46
Como CRIAR seu servidor MCP (Fácil)
Ronnald Hawk
14,648 views
Kafka Streams: Processando eventos em tempo real
1:58:29
Kafka Streams: Processando eventos em temp...
Full Cycle
5,011 views
Complete Docker Course - From BEGINNER to PRO! (Learn Containers)
4:44:21
Complete Docker Course - From BEGINNER to ...
DevOps Directive
522,300 views
Nest.js e API REST: Autenticação e Autorização na Prática
3:12:43
Nest.js e API REST: Autenticação e Autoriz...
Full Cycle
8,742 views
Veritasium: What Everyone Gets Wrong About AI and Learning – Derek Muller Explains
1:15:11
Veritasium: What Everyone Gets Wrong About...
Perimeter Institute for Theoretical Physics
1,283,945 views
Desenhando um sistema escalável do zero 2.0
3:15:02
Desenhando um sistema escalável do zero 2.0
Full Cycle
35,670 views
Eu não sabia o que era Docker até agora...
25:12
Eu não sabia o que era Docker até agora...
Augusto Galego
111,749 views
Introdução ao Docker: Tudo que você precisa saber para começar
2:34:16
Introdução ao Docker: Tudo que você precis...
Fabricio Veronez
10,865 views
O passo a passo para usar Docker
2:06:23
O passo a passo para usar Docker
Fabricio Veronez
4,415 views
Docker Containers and Kubernetes Fundamentals – Full Hands-On Course
5:56:37
Docker Containers and Kubernetes Fundament...
freeCodeCamp.org
934,872 views
Entendendo Funcionamento de Containers
51:54
Entendendo Funcionamento de Containers
Fabio Akita
118,525 views
Engenharia de software acabou de mudar pra SEMPRE.
33:41
Engenharia de software acabou de mudar pra...
Augusto Galego
94,127 views
Docker SUPER AULA com TUDO que você precisa saber HOJE!
1:32:00
Docker SUPER AULA com TUDO que você precis...
Ayrton Teshima - Programador a Bordo
32,605 views
Docker do zero: dockerizando uma aplicação Python e Django | py_live #007
1:43:25
Docker do zero: dockerizando uma aplicação...
PycodeBR
13,194 views
Docker do Zero: o mínimo que você precisa saber
2:37:29
Docker do Zero: o mínimo que você precisa ...
Fabricio Veronez
13,282 views
Next.js: IA e Server-Side Rendering na Prática
2:21:11
Next.js: IA e Server-Side Rendering na Prá...
Full Cycle
4,742 views
Copyright © 2025. Made with ♥ in London by YTScribe.com