 Nesse vídeo, eu vou te ensinar os fundamentos de Contenders e como você pode iniciar nesse mundo em apenas alguns minutos, que vai ser a duração desse vídeo, e a gente vai começar agora. Olá, meu nome é Elder Morais e se você quer aprender mais sobre Java, sobre Contenders, que é o assunto desse vídeo sobre microserviços e assuntos relacionados a Cloud Native, não se esqueça de se inscrever aqui no canal e ativar as notificações para que você não perca nenhum conteúdo. Esse vídeo é feito especialmente para você que está iniciando ou quer iniciar no mundo de Contenders. Se você já tem alguma experiência, quem sabe você não aprende alguma coisa também, né? Se esse for o caso, deixe um comentário aqui e hashtag Aprendi Alguma Coisa, tá bom? E não se engane, esse vídeo será muito prático, eu vou mostrar código, vou mostrar coisa acontecendo, mas antes eu vou situar você em alguns conceitos que vão te ajudar muito ao longo dessa jornada. E eu vou começar logo com a pergunta mais importante desse vídeo, e ela é a pergunta de um milhão de dólares, o que é um Contender? E olha, não se engane, eu já soube de um evento grande aqui no Brasil, que as pessoas ficaram numa sala um dia inteiro conversando sobre Contenders, vendo um monte de palestras legais sobre Contenders e na última palestra, uma das perguntas, um dos participantes levantou a mão e perguntou o que é um Contender, tá bom? Então, essa, embora muitos digam que é uma pergunta óbvia, para muitos não é. Então vamos lá, Contender, ele é, prepare-se, segura aí na sua mesa, no seu sofá, onde que você esteja, um Contender ele é um processo, um Contender ele é um processo dentro do seu host, dentro do host que está rodando o seu Engine de Contenders, tá? Então pensa em Docker, né? Eu acho que grande maioria das pessoas conhece o Docker aí como referência de Contenders, então o Contender é um processo, ele é derivado de um processo do Linux chamado de C Groups, tá bom? Que é o Control Groups. E o que é isso? Ele é um processo que ele tem recursos dedicados e isolados para ele, ele tem cota de recursos, tá bom? Então assim, quando você cria dentro de um Linux um C Group, você vai lá que é um processo que é um C Group, você tem uma quantidade de memória, uma quantidade de CPU, uma quantidade de história de D decada para aquele processo, ok? Maravilha, show de bola, então o Docker nasceu disso, né? Ele é seu baseado no conceito de C Groups, mas o importante de entender nesse ponto aqui é o seguinte, todos os recursos que o C Group tem são recursos, na verdade, que ele está compartilhando no seu host. Então esses recursos que estão dedicados para um processo, para um C Group, eles são recursos que pertencem ao host, né? Então no fundo quando você olha para o host, do ponto de vista do host, ele tem uma mesma quantidade de recursos e você está aumentando a densidade de utilização desses recursos. Então você tem mais processos, você tem mais usuários desses recursos. Então o que você está fazendo é aumentando a densidade de utilização desses recursos de CPU, de memória, de história, etc. O meu grande amigo Bruno Souza, conhecido por muitos como Javamen, ele uma vez usou uma figura que eu nunca esqueci, que o container nada mais é que um tapoeira, né? Não sei se você tem tapoeira aí na sua casa, mas o que tem a ver isso, né? Com o container. Então o que é o tapoeira, se você nunca viu no que eu vou falar, é um potinho de plástico que você põe na geladeira, lá para guardar comida, para guardar qualquer coisa. Pensa na geladeira, a geladeira já é um container para o si só, né? Se você vai guardar comidas na sua geladeira, você poderia até, mas normalmente a gente pega um prato, né? Sem tampa nenhuma e com comida e vai lá e joga na geladeira, né? Normalmente você tampa, você põe um pot, aí você tampa e aí você pode empilhar os potes, você pode pôr mais potes numa mesma, numa mesma prateleira, né? Porque imagina se você coloca um prato e não vai por nada em cima, toda aquele espaço em cima do prato você já perdeu, né? Tudo aquele recurso que está em cima você perdeu. Ao passo que se você tem uma ambiente que está isolado ali, você consegue empilhar melhor, você consegue organizar melhor. Então assim, você primeiro separa uma comida da outra, você evita que uma comida pegue cheiro da outra, você protege melhor aquela comida, se de repente você tem alguma coisa na prateleira de cima que começa a vazar, não vai cair naquela comida que está embaixo. Então você está isolando, você está protegendo, você está isolando aquele recurso e aumentando a densidade de utilização do seu grande container que é a geladeira. Com os containers é a mesma coisa, então você está pegando aquele seu host, você está aumentando a densidade de utilização de recursos daquele seu host, mas em processos que são sim muito isolados. Se você for dentro de um container, você tem uma visão de que aquele container realmente é praticamente uma máquina, não é? E eu vou até explicar algumas coisas sobre isso aqui, mas o ponto é esse, container é um processo isolado com recursos, com memória, com processador, com histórias de isolados para ele, para que ele possa usar os recursos do host. Segunda pergunta, para que serve um container? Por que eu deveria utilizar containers? Por que as pessoas fazem containers? Por que o mundo instalou com a trás de fazer aplicação em container hoje em dia? Eu coloquei três coisas que são para mim as mais importantes, tem outros que eu poderia citar, mas essas três para hoje já vão fazer mais sentido. A primeira é a questão do tapoeque é isolamento. Antigamente, quando a gente não tinha container, imagina que você tem lá, você subiu um servidor de aplicação, os meus exemplos são sempre relacionados à Java, porque eu sou um programador Java, então você vai lá, subiu lá um Tomcat, subiu sua aplicação. Ah, eu quero subir uma outra aplicação. Normalmente das duas uma, ou você subia um outro servidor de aplicação numa outra máquina, você tinha que comprar outra máquina, memória, processador, disco, não sei o que, e subiu um outro servidor, ou você pegava essa outra aplicação e jogava no mesmo servidor de aplicação que já estava rodando a outra. Então assim, se por um lado você gastava menos dinheiro com outro servidor para comprar, etc., por outro lado, você, as duas aplicações estavam utilizando exatamente os mesmos recursos, tinha o mesmo ciclo de vida até, porque se você precisasse fazer um start-stop no servidor por causa de uma das aplicações, você já tinha que parar outra também, você não tinha como fugir, não tinha como isolar o ciclo de vida das duas aplicações. Então quando você separou isso em containers, você passou a poder sentir esse isolamento. Então eu administro uma na hora que eu quero, eu subo uma na hora que eu quero, eu subo a outra na hora que eu quero, eu paro, eu mato container, eu subo container, faço o que eu quiser, porque elas estão totalmente isoladas. E a gestão desse recurso é muito melhor também, porque se você pega um container e ele fala, olha, esse container vai usar 300 MB de memória, um quarto de CPU e 200 MB de disco, esses são os recursos dele. Você não vai ter que alocar, você pode, né, mas sim. A princípio você não vai alocar uma quantidade, que é num disco de 50 GB, porque eu tenho que instalar todo o sistema operacional, não, são só aqueles recursos para rodar aquela aplicação, por isso que você consegue aproveitar melhor os recursos do Roche quando você usa containers. Então esse foi a primeira, o primeiro motivo de você usar containers que é isolamento. O segundo motivo para você usar containers é estabilidade de ambiente. Então quem nunca falou, nunca viu alguém falando, o famoso funciona na minha máquina. Então containers ajuda você a evitar ter que lidar com essa questão do trabalho da minha máquina. Por quê? Porque agora você é um distribuiu mais a aplicação que vai ser instalada num servidor, não. A sua aplicação agora está num container, você entrega o container. O container passa a ser sua aplicação. E pelo fato de ser o container, você pode usar o mesmo container quando você está desenvolvendo, quando você está testando e quando você vai para a produção. Você tem uma estabilidade de ambiente muito maior. Eu desenvolvi no mesmo ambiente que vai ser testado e que é no mesmo ambiente que vai ser lançado para depois. Já vou mostrar isso para você, se você não faz ideia do que eu estou falando, fica calmo, já vou mostrar isso acontecendo. Mas segundo motivo para você usar containers é estabilidade de ambiente. E o terceiro motivo para você usar containers é a transparência no quesito de operações, de operacionalizar, a gestão da sua aplicação. Então pensa, vamos pensar em containers num porto, por exemplo, você chega lá no porto, você vê aquele monte de gindaste que tira um container de um lado, põe no outro, tira do navio, põe no porto, tira do porto, põe no navio, fica lá fazendo toda aquela gestão. E aqueles gindastes não importam o que tem dentro do container. O jeito dele pegar, o jeito dele mover, o jeito dele trabalhar é o mesmo, porque existe um padrão. Então quando a gente fala de containers é a mesma coisa. Antigamente, se você tinha aplicações de linguagens diferentes, o seu pessoal de operações tinha que saber os processos para fazer deploy, para fazer gestão, para fazer backup das tecnologias diferentes. Quando você colocou todas essas tecnologias dentro de um container, o jeito de gerenciar qualquer tecnologia dentro de containers é o mesmo, porque é tudo container. Então não há diferença nenhuma. Então é por isso que quando você trabalha com containers, a questão de transparência no quesito operações, ela é muito aumentada, então três motivos para os seus containers são isolamento, estabilidade de ambiente e transparência para operações. Agora vamos lá para a tela e vocês vão ver isso tudo acontecendo. E quando você vai, você quer construir um container, então a primeira coisa que você precisa fazer é construir o que é em cima de uma imagem de container. O que é a imagem? Vai ser a base para você criar um container. Então você cria uma imagem e a parte da imagem você pode criar um ou mais containers que refletam aquela imagem. A imagem vai ser a estrutura do seu container. Se você já trabalhou com gestão ou máquina virtual, por exemplo, você já precisou, sei lá, baixou o maíso ou um arquivo da virtualização que você usa ali, o que tem naquela imagem? Tem lá o sistema operacional, o jeito que você instalou, qual a estrutura base e você pode pegar aquela imagem e replicar e criar outras estrutuais. É parecido quando você faz com o container. Então você cria uma estrutura, uma imagem e ela vai refletir os containers que você cria a partir dela. Tudo bem? Para você criar uma imagem, existem várias formas, vou usar a inicial, aquela que a maioria começa com ela, que é através de um Dockerfile. E é importante, Dockerfile, de onde surgiu aqui, caiu do canal Dockerfile. O que é isso? Eu vou usar aqui, para mostrar para vocês hoje, o Docker. Eu estou usando aqui na minha marca, eu tenho um Docker instalado. E aí você vai me falar, mas não é única distribuição de container, realmente não é única distribuição de container, se você conhece um pouco mais. Mas o mais famoso, o mais conhecido, por que o Docker é o mais famoso, o mais conhecido? Costumo dizer que o Docker fez o que ninguém fez antes, que foi estabelecer o container. Então a partir do momento que vem um padrão, fica muito mais fácil para os usuários adotarem para as empresas. Enfim, o mercado absorve muito melhor quando você tem padrão. O Docker fez isso. Obviamente ele teve muito dinheiro injetado também ali, então eles conseguiram escalar muito rápido. Mas enfim, isso são outros assuntos. O fato é, estou usando aqui Docker, então estou com o cliente do Docker aqui, o cliente, o CLI do Docker na minha máquina. Ou seja, eu já estou com o instalado, não vou cobrir instalação aqui do Docker hoje. Até porque assim, a instalação, ela varia de sistema operacional para o outro, de Windows, para Mac, para Linux e distribuições de Linux, então eu não vou cobrir isso. Se você achar que vale a pena fazer um vídeo sobre instalação, deixa o comentário aqui. E aí se tiver demanda para isso, eu posso também gravar um vídeo sobre isso. Então vamos lá, eu vou limpar aqui e como eu falei, estou usando o Docker e vou gravar um Docker file. Então deixa eu criar o arquivo aqui. Nessa pasta onde eu estou, eu tenho uma aplicação Java. Então eu tenho um monte de arquivo aí, tem pasta com library, enfim. Eu estou criando aqui porque vai ser mais fácil de eu mostrar pra vocês o que está acontecendo. Estou aqui com o meu Docker file. Então eu tenho três áreas, três sessões principais do meu Docker file. Eu tenho o from, eu tenho o mail ali que normalmente é onde você vai adicionar os arquivos e eu tenho o final dele, que é o cmd, que é o comando que você vai usar para start a sua aplicação. O que que é o from? Vamos lá, eu vou escrever aqui, from. Aqui é o seguinte, aqui é onde você, lembra que eu falei que você precisa criar uma imagem? Mas o bom é que você não precisa começar do zero, você não precisa ir lá, você pode fazer, mas você não precisa pegar esse Docker file e baixar, por exemplo, um Linux e aí fazer toda essa tape dele, aí instalar todos os patches, as dependências que você precisa e aí ficar um Docker file gigantesco. Não precisa fazer isso, você pode construir o seu container a partir de uma imagem que já exista. E o bom é como tem um monte de projeto, um monte de tecnologia, um monte de empresas usando Docker containers hoje em dia. Então normalmente, via de regga, a imagem que você precisa construir já existe uma imagem base pronta. Então, no meu caso aqui, como eu estou trabalhando com uma aplicação Java, eu vou usar uma imagem pronta, que já foi feita por alguém, que eu possa rodar Java, tá bom? Se eu for aqui no meu terminal de novo, tem uns comandos do Docker que é o Docker images. Então as imagens que eu já baixei na minha máquina, essas são imagens que estavam públicas no Docker Hub, Docker Hub é o repositório oficial do Docker, a empresa Docker foi lá e criou um repositório público que todo mundo pode usar esse repositório para armazenar imagens. O OpenJDK, que é o que eu vou usar hoje, ele tem imagens lá no Docker Hub. Então eu já baixei uma imagem que é uma imagem, assim, que tem nela lá? O OpenJDK 11 com os patches que precisa lá, o mínimo essencial é pegar a Slink, é uma das menores, pensa aí, né, se você nunca trabalhou com isso, pensa que você tem uma máquina Linux com o JDK instalado e agora você vai lá da sua aplicação. Até mais ou menos isso que eu tenho nessa imagem aqui. Então legal, então vou falar o seguinte, eu não vou começar do zero, vou começar do OpenJDK, né, eu tenho OpenJDK que é a imagem base e eu tenho OpenJDK, né, que é a versão que eu vou utilizar. Então tem a 11, tem a 11JRE, tem a 11JRE Slink, tá bom? Os preocupa com isso agora, o importante é tudo isso aqui, tá? Então assim, a minha, meu container que eu vou criar agora é a partir dessa imagem aqui. O que que eu vou fazer agora? Eu vou, eu preciso pegar e colocar a minha aplicação dentro desse meu container, né? Então aqui eu tô definindo a estrutura que vai funcionar esse meu container. Se eu olhar a minha pasta, eu tô vendo que a minha aplicação é esse arquivo aqui. Eu não vou construir a aplicação, tá? Não é o foco aqui do arquivo hoje, a aplicação tá pronta, não importa como que essa aplicação, como não é, tô usando o Quarkus nela, mas é só pra realmente servir de exemplo. Então eu vou pegar essa nossa aplicação e vou jogar dentro do meu container. Então eu vou dar aqui um Edge, que é o comando pra eu pegar um arquivo que tá aqui na minha pasta e jogar ele pra dentro do container. E aí eu vou falar o seguinte, olha, você vai pegar esse arquivo aqui e jogar dentro da pasta deployment, tá? Então lá dentro, dentro do nosso container, existe uma patinha chamada deployment e eu quero jogar ele com um nome mais simples, né? Em vez de pegar esse nome inteiro aqui, vai ser o app.jr. Agora lembra o seguinte, essa aplicação, ela tem que rodar com tudo que ela precisa. Então assim, a aplicação, no caso, eu sei que ela não é só esse jar, ela tem dependências. Então eu vou fazer o seguinte, antes de jogar a aplicação, eu vou dar um Edge de novo e aqui eu tenho uma pasta que é a Libre. Então o que eu vou fazer? Vou pegar a pasta Libre, tudo que está dentro dela e vou jogar ela dentro de deployment, tá bom? Então ele vai pegar todos os arquivos que estão dentro da pasta Libre e vai jogar dentro de deployment Libre. Eu já tenho a imagem base, já tenho a minha aplicação que estou copiando pra dentro do container. Agora aqui falta, falta eu rodar essa aplicação usando o meu container. Como é que eu faço isso? Bom, primeira coisa, como é que eu faria pra rodar aqui na minha máquina? Quer esse aqui, certo? Vou até copiar ele, que ele vai ser útil. Então deixa eu só testar aqui. Beleza, aplicação subiu, está rodando. Então se eu rodar assim dentro do container vai funcionar. O que eu vou fazer aqui? Vou copiar esse comando, vou dar um cmd e aí eu vou fechar essa estrutura aqui, né, entre coxetes e eu vou fazer o seguinte, olha, esse aqui é uma parte do comando, essa aqui é outra parte do comando, aqui é outra parte, só que lembra que está em deployment app.jar, não é mais o nome que eu tinha dado antes, é esse aqui o nome. Então está feito o meu, a minha primeira, o meu Docker, então está feito o meu Dockerfile da minha, do meu primeiro container. Então eu tenho uma imagem base, tenho a minha aplicação e tenho como rodar essa aplicação. O que eu preciso fazer agora? Através desse arquivo eu construo uma imagem, ok, então vamos lá. O que eu vou fazer? Eu vou usar um comando do Docker, que é o Docker build, é a build de construir, ele vai construir uma imagem. Vou usar um minus t, que até é de tag, eu vou dar um nome pra essa imagem, então eu vou chamar essa imagem de primeiro container. Então a minha imagem chama primeiro container e vou dar aqui um pontinho. O que é esse pontinho? Eu estou falando pro Docker assim, ó, existe um Dockerfile, ele está nessa pasta que você está trabalhando e tudo que precisa, na verdade, está nessa pasta também, tá bom? Então ele vai usar essa pasta pra copiar o meu jar pra dentro do arquivo, pra copiar as libraries, etc. Então vamos lá. Primeira linha aqui, ele puxou, né, eu já tinha essa imagem localmente, então eu não preciso baixar. Ele copiou as libraries pra dentro do meu container, ele copiou o meu jar pra dentro do container também e ele falou, olha, quando for rodar, o comando vai ser esse. Aí foi lá, fez com sucesso, criou a tag, então eu tenho se eu for lá de novo em Docker images. Agora eu tenho uma imagem aqui que é primeiro container. Show de bola, tenho minha primeira imagem de container pronto. Já tem um container? Não, não tem um container. Isso aqui serve pra eu começar a criar containers, eu tenho a imagem do container. Agora a gente pode criar containers. Como é que a gente cria containers? Tem basicamente duas formas, a primeira é. A nossa imagem chama container, eu vou falar o seguinte, Docker create, e aí ele vai, deu o nome da imagem, né, Docker create, passei o nome da imagem. Criou um container, deu até um nome aqui, uma hash pra esse meu container. Onde que eu vejo esse meu container? Ele está pronto, está funcionando, está rodando? Não, ele não está rodando, não está funcionando ainda, porque eu só criei ele. Como é que eu vejo esse container? Pra você listar containers, é Docker PS, só que esse meu container, ele não está rodando ainda, tá? Então, Docker PS só mostra os containers que estão rodando. Pra eu ver todos, além dos que estão rodando, eu tenho que dar um menos lá, tá bom? Que ele vai mostrar todo mundo mesmo. E aqui está o meu container, cuja imagem é o primeiro container, aqui está o comando. Beleza, meu primeiro container fica meio bagunçadinho aqui, mas é importante você ver que ele foi criado, tá bom? Legal, como que eu rodo esse container? Eu sei que ele está criado, mas ele não está rodando. Como é que eu faço, então, pra rodar esse container? Se você olhar aqui, que está bagunçado, mas a primeira coluna tem um ID do container. Então, o que eu vou fazer? Docker, start, e posso acer o ID. Legal, nosso container está rodando. Se eu olhar agora o Docker PS sem o menos, beleza, o container está rodando, está no ar, está funcionando. Legal, o que eu faço com esse container agora? Ele está aí no ar, eu posso acessar ele? Bom, por enquanto não, porque por exemplo, eu vou mostrar um comando aqui que eu não tinha planejado, mas pra vocês entenderem é melhor. Que é o Docker Logs. Docker Logs, eu posso ver o log de um container, tá bom? Então, quero ver aqui o log desse container. Se eu olhar aqui, eu estou vendo uma coisa esse container está ouvindo na porta 8080, a IP 0000 que é o localhost. Legal, quer dizer então que se eu chamar a porta 8080 nesse localhost, esse container vai responder? Vamos ver? Então, vamos lá, vou dar um call, localhost, 8080, eu sei que essa aplicação responde no endpoint model hello. E aí, falhou. Por que falhou? Porque existe uma coisa, o container quando você cria ele inicialmente, se você não falar nada pra ele como que ele tem que subir, não dá nenhum tipo de informação, ele sobe com todas as portas fechadas, tá bom? Ele é um processo totalmente isolado e se você não disser pra ele que ele tem que abrir nada, ele não abre nada. Mesmo que internamente ele esteja ouvindo a porta 8080, ele não expôs essa porta, essa porta não está aberta pra ninguém. Então, a gente precisa pra que a gente possa usar esse container, a gente precisa criar ele com uma porta aberta. É isso que a gente vai fazer agora. Então, pra gente fazer isso, eu vou apagar esse container, porque a gente possa criar do zero. Como é que eu apago um container, doc-rm e o edge do container? Ah, não pode apagar. Por que não pode apagar? Porque esse container está rodando, ele está funcionando. Então, eu tenho duas formas de apagar, eu vou te mostrar uma agora e outra. A forma mais segura, a ortodoxa é você parar o container, então, docker-stop, aí ele parou o container, aí sim, docker-rm apagueu o container. Na próxima eu vou apagar de outro jeito. Então, o que eu vou fazer agora? Eu tenho lá a nossa imagem, que é a primeira container. Então, eu falei pra você que eu não consegui usar esse container porque a porta dele não estava exposta. Então, eu vou criar esse container novamente com a porta exposta. Só que agora, ao invés de só criar esse container, eu vou usar um outro comando, que ele faz o seguinte, ele cria e já roda esse container. Então, você ganha um tempo aí, pelo menos no seu dia a dia, que é o docker-run. O docker-run, ele vai criar e já vai startar o container. O que eu vou fazer? Eu vou falar o seguinte, olha, minus p, que é a porta. E você vai falar o seguinte, olha, exponha como 80, 80, a porta, 80, 80. Se eu quiser, você poderia vir aqui, falar o seguinte, 80, 81, 89, a porta, o jeito que eu quiser expor essa porta eu exponho. Eu vou expor como 80, 80, tá bom? Então, rode esse container, expondo a porta, 80, 80, e a partir da imagem, primeiro container. Então, vamos lá, ele vai rodar. Bom, a imagem aqui não mudou nada, né? Então, continua aqui, exposto 80, 80, e eu pedi para ele expor na hora que eu rodei. Então, vamos ver agora e reparem que é o seguinte, como eu não usei o create, eu usei o run, quando você usa o run, você consegue ficar usando aqui o terminal para ver o que está acontecendo. Tem um jeito de não fazer isso, mas eu não vou mostrar agora. Então, eu vou abrir aqui um outro terminal e vou ver se essa aplicação agora está funcionando, se meu container está respondendo. Então, vou dar um 80, 80, barra, hello. Legal, agora sim, respondeu, estou vendo o container está funcionando e ele tem uma porta aberta, que é onde está aquela minha aplicação. Então, agora eu consigo usar ele de verdade. Lembra que eu falei que existia um jeito de apagar um container mesmo que ele está rodando? Vamos pegar o idilicecontainer aqui e aí vamos dar um docker rm e aí a gente faz um minus f, que ele vai forçar. Então, mesmo se o container estiver rodando, ele vai parar o container e vai apagar. E é isso que aconteceu e reparem que aqui em cima veio uma mensagem de kill. Então, o que você aprendeu aqui? Você aprendeu a como construir um dockerfile, você aprendeu a ir a alguns conceitos relacionados a isso, a imagem base, adicionar arquivo, o comando que você vai usar para rodar, você aprendeu a criar imagem, você aprendeu a criar um container, a parar esse container, a rodar o container já criando e iniciando e aprendeu também a forçar o delete de um container. Então, com isso você consegue começar aí. Eu não sei que projeto que você está trabalhando, eu não sei qual a sua tecnologia, eu usei aqui com a abordagem de Java, do jeito que você inicia uma aplicação Java com a dependência de Java, mas o container está sendo usado hoje em qualquer tecnologia, em qualquer linguagem. Faça essas adaptações para a tecnologia que você prefere que vai funcionar também. Então, agora você já sabe o que é um container para quem serve e como criar um. Então, manda a obra e bora codar, bora scovabit, como a gente tem aqui a nossa playlist aqui do bora scovabit. Eu gostaria muito que esse vídeo fosse o início de uma série de vídeos sobre containers, mas para isso eu preciso muito saber o que você precisa saber sobre containers. Eu fiz esse vídeo bem introduitório para quem estiver começando aqui, mas eu preciso saber qual outro vídeo sobre containers que eu posso gravar. Deixa nos comentários aqui que você vai começar a criar o próximo vídeo sobre containers que vai entrar aqui nessa playlist. Se você gostou desse vídeo, não se esqueça de curtir para que mais pessoas possam ter acesso. Quando você curte um vídeo aqui no YouTube, você aumenta a relevância dele e mais pessoas recebem o vídeo como sugestão, então você vai ajudar mais pessoas a ter acesso a esse conteúdo. E claro, se você não curtiu o vídeo, deixa nos comentários também o que a gente pode fazer para melhorar nos próximos, tá bom? E não se esquece também de se inscrever e ativar as opções para você não perder os próximos vídeos. Um abraço e até a próxima. Tchau, tchau.