Salve, beleza? Continua nossa saga aqui no nosso módulo de Docker. Agora nós vamos brincar com volumes pela primeira vez. Então bora aqui já para o VS Code, para a gente já poder meter a mão na massa. A primeira coisa que a gente vai fazer aqui para poder ver um volume é usar o comando docker volume, que vai gerenciar os volumes. Então eu posso fazer um create passando o nome docker volume, que vai gerenciar os volumes. Então, eu posso fazer um create passando o nome do meu volume. Eu não sei se eu vou tentar colocar um my volume aqui, acho que eu não tenho, né? Então, eu criei o meu volume e sempre, qualquer estrutura aqui do Docker, a gente acaba conseguindo listar as coisas. Então, o meu volume pior que eu tenho 500 coisas aqui, aí a gente faz aquele graph. Então, esse aqui que eu criei, tem outro aqui que não sei para que eu criei, de Nginx, a gente pode apagar isso também e é um volume local. Na hora de criar aqui o volume, eu posso passar várias opções. Inclusive, se eu tiver um plugin que vai gerenciar esse volume de uma forma diferente, a gente consegue passar aqui. Então, o que a gente precisa entender é que o volume vai ficar na nossa máquina e vai ser montado no container. Onde que ficam esses volumes? A gente pode fazer um sudo ls, porque senão a gente não vai ter permissão, barra var, lib, docker, volumes. Aí vai exigir aqui a senha. Aqui é até mais fácil para poder achar o volume porque ele vai colocar o nome do seu volume com a pastinha. Então, nós vamos ter a pastinha data e se eu fizer um ls eu já tenho aqui algumas coisas isso aqui é banco de dados vamos fazer aqui um volume rm bom que a gente vai aprendendo eu quero um volume zerado aqui a volume está sendo usado ah não com menos", não vai rolar. Então, espera aí, ele está me dando esse container daqui, então a gente exclui esse container, exclui o volume, aí eu vou criar de novo o volume e vamos fazer lá o ls. Pronto, Então, a ideia é essa, eu não tenho nada dentro desse volume. Então, na hora que ele for montado lá dentro do... Às vezes eu posso criar um volume já com dados, posso incluir dados e tudo mais, mas a gente está criando um volume zerado. Então, a gente viu que ele está aqui. Como que eu faço para poder usar esse volume, por exemplo, eu quero ou não quero perder os dados do meu banco de dados. Então, vamos rodar aqui um docker run menos menos rm menos menos name vou colocar aqui mais sql porta não preciso, aí eu vou usar aqui uma SQL 2.8030 pra Sudébia, e aqui vai faltar, vamos colocar aquela variávelzinha do root password, senão ele vai chiar, na hora de criar, vou colocar o terminal aqui em tela cheia, beleza, isso aqui rodaria o MySQL, mas aí todos os dados estariam lá dentro do container. Aí a gente vai passar aqui a opção, menos v, my volume, que é o nome do meu volume dois pontos para onde que ele vai ser montado dentro do container vai ser barra var barra lib barra mysql esse caminho aqui é o caminho afixo que o mysql vai fazer o armazenamento de dados, então vamos rodar isso aqui ele vai levantar o MySQL, deixa ele levantar tudo. Inclusive, a gente até consegue fazer um sudo ls. Ele deve ter criado alguma coisa, né? Tá vendo? Esse volume eu já tinha usado pra alguma outra aula, justamente de MySQL. Então, ele está criando ali e ele já está disponível para que a gente possa se conectar e tudo mais. Então, olha só. Aqui, ele vai... O Ctrl-C, ele poderia ter iniciado com o "-init", mas se eu fizer um PS pegando aqui o container 3 a 0, se eu matar o container, os meus dados do meu volume continuam lá. Então, se eu criar um outro container aqui, apontando para esse volume, aí a diferença é que na hora que o container iniciar, vai ver que o banco já existe e não vai recriar. Então, eu nunca mais perco. Tem como fazer backup também dos volumes. Isso não é complicado também, não. Vamos fazer um outro comando aqui também, que é o docker volume inspect myvolume, que é um inspect que a gente já sabe que ele vai gerar ali um JSON com os metadados. Então, a gente tem a data de criação, qual é o driver que vai ser o local armazenado e diretamente no disco, aonde que ele está criado, o nome dele, e algumas opções que a gente poderia passar. Então é isso. É assim que a gente usa os nossos volumes. Se eu quisesse utilizar com o Docker Compose. Vamos criar um Docker Compose aqui. Docker Compose YAML. Então, vamos colocar lá um version 3 com services db, imagem mais que l8030-deb. Aí eu vou colocar aqui o environment mais que L, 8, 0, 30, traço, Debian. Aí eu vou colocar aqui o environment com aquela mesma variávelzinha, o Compilate já vai me dar ela aqui. Então, na hora de definir o volume, a gente vai definir aqui volumes, e aqui eu vou colocar mais, ou melhor, myVolume, dois pontos para onde que ele vai, que é o var lib mySQL mas se eu rodar isso aqui vamos ver se ele vai dar certo aqui em cima tem o 3 tem que ser como string deixa eu entrar aqui no cap 6 aula 2 então Então, docker-compose-up. Ele vai falar que o service DB se refere a um volume indefinido. Ele não conhece esse volume. Não é porque eu coloquei no docker-run, ele já consegue fazer a identificação. Aqui no Docker Compose, não. Eu preciso informar... Espera aí. De onde está vindo esse volume? Então, aqui embaixo ou em cima, tanto faz. Normalmente eu gosto de colocar embaixo. Nós vamos declarar myVolume, que vai ser um externo guatru. Então, essa informação aqui diz ao Docker Compose, olha, esse volume está vindo lá de uma configuração externa. Então, agora, ele vai conseguir fazer a criação. E, obviamente, vai ser bem rápido aqui, porque ele já está ready for connection, porque o volume já existe. Então, o volume também serve... A gente vai aprender depois a sincronizar informações. Seria bem útil para um NGINX da vida, vamos pensar o seguinte, que a parte ali da gente fazer a criação de um site poderia ficar dentro do nosso de um volume. Então, vamos fazer aqui um Ctrl C, só para a gente poder fazer mais um exemplo de volume. Fazer aqui um Ctrl C só para a gente poder fazer mais um exemplo de volume. Vamos fazer aqui um Docker. RM, eu tenho um volume de Nginx. Deixa eu matar ele. Ele está sendo usado por dois... Olha só, dois containers. Que safadinho. Vem esse primeiro aqui. Aí vem esse outro. Pronto. Então, RM no volume, aí volume create my volume Nginx. Pronto. Aí, a gente vai colocar também aqui o My Volume and Next, porque o volume está sendo gerenciado externamente. Então vamos colocar aqui um And Next da vida, que vai usar uma imagem And Next. É 19 alpine, eu sempre esqueço. 19 alpine eu sempre esqueço vou pegar aqui 19 alpine então aqui nós vamos colocar volumes então vou ter o my volume em dinex apontando lá para aquele caminho apontando para aquele caminho apontando lá para aquele caminho. Apontando para aquele caminho. Agora, vamos subir. E aqui a gente já entendeu que esse volume inicialmente vai ser criado vazio. Então, vamos subir. Estou no outro terminal. Deixa eu voltar para cá, excluir esse... Então vamos fazer um docker-compose up, ele vai subir também o nginx aqui. Agora vamos... ficou tão zoadinho aqui que não deixou nem eu abrir o novo terminal. Vamos entrar lá também na pasta novamente. E... Eu vou fazer um exec nginx sh, fazendo um ls, um sr share, nginx html. fazendo um ls, um sr, share, nginx, html. Então a gente vê que tem a pasta, nem parece que ela é um volume, nós temos o armazenamento aqui dos arquivos. Ao fazer o comando sudo ls myvolume n enginexData nós temos esses dados lá. Então a gente sabe que aqui agora eu não perco mais. Mas a questão aqui, pessoal, olha só. Aqui eu tenho um alpine. Então eu vou fazer um apkUpdate e um apk add vim certo? então vamos pegar aqui, vou fazer um vim no index.html então se eu chegar aqui e editar esse arquivo fazendo uma modificação nele, o que eu estou fazendo, na verdade? Estou modificando o volume. O volume tem essa sincronização bidirecional. Se eu editar alguma coisa diretamente no volume, ela vem para cá. E se eu editar no container, vai lá para dentro do volume. Olha só, se a gente vier aqui e ao invés de fazer com sudo, vamos fazer um catch em index.html, a gente vai ver que a edição está aqui. Então, existe um sincronismo entre volume e container. Na verdade, o Docker também tem vários modos que a gente pode trabalhar. Tem o cached, tem o delegated, a gente vai falar sobre isso depois nas próximas aulas. E o modo padrão é o consistente. Então, eu escrevo algo lá no volume e já está disponível no container, eu escrevo algo no container e está disponível no volume. Então, existe esse sincronismo aí e ele vai às vezes garantir que você tenha mais performance porque muitas vezes você não precisa de ter o dado lá no volume na sua máquina na hora, então pode escrever ali no container e depois vai se sincronizando enfim, a coisa funciona dessa forma. Pessoal, então vamos seguir nossa saga, é isso aí, e até a próxima.