Salve, Deus, beleza? Continuamos a nossa saga aqui no nosso módulo de Docker. Nós viramos a chave agora para volumes e um assunto muito importante. A gente vai brincar com o volume daqui a pouco, conectado ali com os containers, mas eu lembro da lição que eu já falei agora, eu vou enfatizar ela muito bem. Container é efêmero. Eu lembro quando eu estava começando a trabalhar com container Não entendia muito bem Ficava com dó ali Não, peraí, eu tenho que manter o container Se eu perder, eu estou perdendo as minhas coisas A gente não tem que ter esse medo Se você está com esse medo É porque você está trabalhando com container de forma errada Porque, na verdade, vamos colocar assim, se você colocar dados persistentes dentro de container, vai aparecer a polícia na sua casa? Não. Mas isso vai acabar te limitando, porque container é algo que corre um sério risco de ser destruído por qualquer motivo, e você vai perder aquele dado ali. Então, isso vai complicar a sua vida, você vai ter que ficar gerenciando aquele dado que está ali dentro, vai dificultar você escalonar a sua aplicação, enfim. Então, o container tem que ser algo que a gente destrói sem dó nem piedade. Se você tem dados persistentes, é o payload, é alguma coisa que você tenha que gravar, coloque no armazenamento externo que isso pode ser um volume no final das contas. Então, o volume nada mais é do que o local que nós vamos ter dados persistentes, que ele vai ser montado dentro do container, mas que se esse container for destruído, o meu volume continua lá bonitinho e continua com a vida dele. O container não interessa, ele é apenas um agente que vai escrever e que vai ler desse container também. Então, eu preparei um material que faz um resumo para a gente poder entender sobre essa questão de containers. É isso que eu já falei. Se o container for removido, os dados são perdidos. Um outro detalhe também é que, no caso do Docker, ele vai acabar utilizando o Union File System como aquele sistema que é o overlay, que é usado lá nas camadas, também se é usado para os containers, então acaba que ele tem uma camada de escrita com o Unify System, isso não é performático. Então, provavelmente a gente sempre tem alguma coisa ali que vai ter muita escrita. Se você está escrevendo nessa camada, você está perdendo performance também. Então, lembrando aqui sempre da regra que contém ação efêmeros. Então, como que a gente trabalha com esses volumes? No caso do Docker, nós temos esses quatro tipos para poder trabalhar. Os volumes mesmo, que são o que a gente vai trabalhar aqui nesse capítulo, que vão ser pastas, que a gente vai delimitar ali regras para poder escrever, para poder ler, tem como fazer várias coisas nesse sentido. Mas a questão justamente é o quanto... O volume pode ser compartilhado entre múltiplos containers, não importa quantos containers vão ler e vão escrever. A gente consegue, inclusive, usar plugins e drivers para poder fazer essa organização do volume. E o interessante em reenlastar uma performance é porque o volume vai ficar ali em relação a performance é porque o volume ele vai ficar ali exatamente na sua máquina, na máquina host, ao contrário aqui da camada de escrita do container que aí eu tenho outro driver gerenciando isso e eu acabo perdendo performance então a gente vai ver depois ali que o volume vai ficar na pasta aí da sua máquina então isso agiliza aí a escrita e também a leitura. Tem o bind mount, que é um tipo de volume, mas ele é um pouco limitado. Ele é utilizado ainda com o Docker, mas eu nem vou me concentrar nele aqui. Se você quiser dar mais uma olhadinha, pode ir lá na documentação do Docker. Nós conseguimos também fazer, isso que é um recurso que eu utilizo muito, falo muito nas aulas, inclusive, sobre o Temporary File System. Eu consigo montar volumes totalmente em memória, sistema de arquivo, um userland, se a gente quiser, totalmente em memória. Então, isso acelera tanto escrita quanto leitura, principalmente escrita, porque quando a gente está falando de escrita em disco, mesmo que seja em SSD, a memória RAM ainda ganha. E se a gente monta totalmente na memória, e se a gente monta totalmente na memória, e aí nós conseguimos trabalhar com o I.O. bem mais rápido. Isso aqui é muito utilizado, por exemplo, para testes com banco de dados. Você coloca o seu banco de dados, a parte que ele escreve totalmente em memória, aí fica muito mais rápido para você poder rodar os seus testes de integração, end-to-end, etc. E tem também o Named Pipes, que é um outro tipo de montagem. Vamos supor que você tem alguma ferramenta que vai rodar dentro do container e ela precisa de acesso ali à API do Docker Engine, então você pode montar com esse carinha também. Na hora da gente criar volumes, o Docker Engine, então você pode montar com esse carinha também. Na hora da gente criar volumes, o Docker dá muitas possibilidades para você poder gerenciar e trabalhar com esses volumes. A gente pode trabalhar criando um volume usando o Docker Volume Create, que é o comando que você cria o volume de forma manual e depois se usa o Docker run para poder passar esse volume, a gente vai ver isso aqui ainda. É possível definir volume dentro de docker file com a instrução volume. Não é muito comum, mas é possível também. E claro, nós conseguimos criar volumes usando o docker compose. Então a instrução a volume e tal, nós conseguimos criar volumes usando o Docker Compose. Tem a instrução lá, volumes e tal, e a gente delimita mais algumas coisas. Aí tem aqui a fonte que eu fiz a organização desse conteúdo. Então, essa aqui é a introdução. A gente já entendeu que volume é para poder separar a coisa do container e a gente vai vendo isso na prática aqui durante o nosso capítulo, pessoal. Então, é isso aí e até a próxima.