‫Tudo bem. Os volumes parecem bastante simples na frente, mas realmente há muito para isso.
‫A primeira maneira que você pode dizer a um recipiente que precisa se preocupar com um volume está em um Dockerfile.
‫Vamos verificar alguns desses.
‫Eu apenas vou fazer o que eu faço muito.
‫Vou procurar o MySQL.
‫É assim que eu aprendi muito sobre o Dockerfiles, e como usá-los corretamente, é que os
‫repositórios oficiais realmente som padrões e melhores práticas incorporados neles.
‫Quando vou aqui para o MySQL, vou clicar no último Dockerfile aqui. obteve um comando de volume nele.
‫Eu aponto você porque é um banco de dados, provavelmente
‫Aqui vamos nós.
‫Esta é a localização padrão dos bancos de dados MySQL. Esta imagem está programada de forma a dizer
‫ao Docker que, quando iniciarmos um novo contêiner, crie um novo local de volume
‫e atribua-o a este diretório no recipiente. O que significa que qualquer arquivo que colocamos lá, no recipiente,
‫irá sobreviver ao contêiner até que possamos excluir manualmente o volume.
‫E é algo que devemos salientar aqui é que os volumes precisam de exclusão manual.
‫Você não pode limpá-los apenas removendo um recipiente.
‫Eles são um passo extra. Isso é apenas para o seguro, porque o ponto inteiro
‫de um comando de volume é dizer que esses dados são particularmente importantes, pelo menos, muito mais importante que o próprio contêiner.
‫Se fizermos um docker puxar no MySQL e,
‫em seguida, eu faço uma imagem docker inspecionar no MySQL, não conseguimos ver o Dockerfile porque o arquivo Docker
‫não é realmente parte dos metadados da imagem, o que você notará neste config area, que
‫especificou esse volume lá.
‫Eu sempre posso dizer que a configuração, que veio do Dockerfile quando foi construída, atribuiu um volume
‫a esse caminho.
‫Vamos executar um container a partir dele.
‫Então o contêiner docker é executado -d -name mysql.
‫Se você se lembrar de mais cedo, o MySQL é um pouco especial.
‫Agora ele requer uma variável
‫de ambiente antes de funcionar.
‫É MYSQL_ALLOW_EMPTY_PASSWORD.
‫ESTÁ BEM.
‫O que você vê é que o MySQL está funcionando. na configuração que existe um volume.
‫Se fizermos um contêiner docker inspecionar mysql, devemos ver o mesmo em que nos diz
‫Aqui.
‫Nós também podemos vê-lo aqui em montagens. O que é isso, é que este é o contêiner em execução
‫que obtém sua própria localização única no host, para armazenar esses dados e, em segundo plano, é mapeado ou montado, nesse local no recipiente, para
‫que a localização no recipiente na verdade, apenas pensa que está escrevendo
‫para / var / lib / mysql.
‫Neste caso, podemos ver que os dados realmente estão vivendo nesse local no host. docker ls, e podemos ver que
‫temos agora um volume.
‫Então, vamos fazer um volume Agora percebemos que isso tem essa identidade única que nunca saberemos
‫o que diabos é isso,
‫certo?
‫Então, vamos fazer uma inspeção sobre isso.
‫Você não precisa digitar tudo.
‫Você pode apenas digitar o primeiro par de caracteres e clicar em Tab para completá-lo. Você obterá informações semelhantes
‫sobre o próprio volume.
‫em uma máquina Linux, você pode navegar até essa localização em seu disco rígido e ver os dados.
‫Se você realmente estiver fazendo isso
‫Na verdade, haverá alguns bancos de dados lá.
‫Se você estiver em um Mac ou Windows, lembre-se de que o Docker para Windows e Docker para
‫Mac está realmente fazendo um pouco no fundo que está escondido de nós, onde realmente está criando uma VM Linux.
‫Então, esses dados estão tecnicamente dentro da VM Linux. Você não poderá acessar esse caminho na sua máquina
‫Windows ou Mac e ver os dados. Na verdade, está dentro dessa VM.
‫Veremos um pouco, com volumes montados, como podemos superar essa limitação também.
‫muito amigável em termos de nos dizer o que está nele ou o que este volume está atribuído.
‫Ao olhar para isso, você percebe que não é
‫Podemos ver do ponto de vista do recipiente o volume que está usando, mas não podemos ver do ponto de vista
‫do volume ao que está conectado.
‫Certo?
‫Se eu estivesse apenas para acertar a Seta para cima e, vejamos, crie um mysql2.
‫Isso agora é criado outro servidor MySQL executado em segundo plano.
‫Se eu fizer outro volume docker, você verá dois deles.
‫Você começa a ver o problema, certo?
‫Não há uma maneira muito fácil de dizer um do outro.
‫Se nós apenas, para provar um ponto, faça um contêiner docker parar mysql, e um docker um recipiente
‫parar mysql2.
‫Nós fazemos um container docker, não veremos nenhum container em execução. Se fizermos um ls -a,
‫nós conseguimos vê-los todos. E note que eles estão parados. E então, fazemos um volume de encaixe ls, você
‫observa que ainda temos os dois volumes.
‫Se eu fizer um container docker rm mysql e, em seguida, mysql2, porque eu posso realmente fazer ambos
‫em um comando, ele irá remover meus dois contêineres. um volume docker ls, meus volumes ainda estão lá.
‫Se eu agora fizer Meus dados ainda estão seguros.
‫Então, solucionamos um problema.
‫As bases de dados ultrapassam o executável.
‫Como tornamos isso um pouco mais amigável?
‫É aí que os volumes nomeados entram e a capacidade de especificar coisas no comando
‫de encadernação.
‫Se eu acertar a Seta para cima um par de vezes até chegar à caixa de contêiner do docker, na verdade não
‫importa qual você vai correr novamente.
‫Neste caso, nós realmente lançaremos um comando -v. A -v nos permite especificar um novo volume que
‫queremos criar para este recipiente que está prestes a ser executado, ou nos permite duas
‫outras opções.
‫Um deles aqui é criar um volume nomeado.
‫Se eu apenas fizesse -v e, em seguida, o var lib mysql, o que faria o mesmo é o que
‫nosso comando de volume no Dockerfile fez.
‫Nós realmente não precisamos fazer isso aqui. Mas o que podemos fazer é que eu posso colocar um nome à
‫sua frente com dois pontos. Isso é conhecido como um "volume nomeado. um nome amigável.
‫"Quando eu faço isso, e depois faço um volume docker ls, você verá que o meu novo recipiente está usando um novo volume
‫e está usando
‫Se fizermos um volume do docker inspecionar esse mysql, você verá que isso é mais fácil de usar aqui.
‫Se eu excluir meu contêiner novamente, e devemos colocar um -f
‫porque ainda está em execução, e então eu executar outro. E desta vez, eu
‫darei um nome diferente. E então, fazemos outro volume do docker, você verá
‫que parece que não criamos um novo volume. Ainda está usando o mesmo volume.
‫Vamos fazer um recipiente docker inspecionar o mysql3. o que foi configurado, mas o que estamos executando?
‫Então, o que veremos aqui é, sim, isso é
‫Esta é a nossa montagem aqui.
‫Veremos aqui que não só o nome é mais amigável, mas também mudou a localização da fonte para
‫ser um pouco mais amigável.
‫aqui é que, quando estou executando por dias ou semanas de cada vez, um banco de dados específico, em um recipiente específico que eu
‫preciso continuar usando uma e outra vez e não quero um servidor de banco de dados em
‫branco, eu Terminarei criando meus contêineres dessa maneira e nomeando-os para o projeto para que eu saiba por que esse volume é necessário e que
‫ele precisa ficar por perto.
‫Para mim, uma pequena dica
‫Um último coisa aqui.
‫Por que você deseja criar o volume do docker?
‫Se pudermos criá-los a partir de um comando de encaminhamento de contêiner docker em tempo de execução, e podemos criá-los, especificando-os no Dockerfile, há apenas alguns
‫casos em que você deseja criá-lo antes do tempo. E você pode realmente descobrir isso
‫muito rapidamente usando o comando de ajuda.
‫Porque aqui está a única maneira de realmente especificar um driver diferente.
‫Lembre-se do plug-in sobre o qual vou falar mais tarde?
‫Então, as opções de driver que queremos usar o -o em.
‫Então, se quisermos colocar rótulos sobre isso, sobre o qual também falaremos mais tarde na seção de produção.
‫Às vezes, em casos especiais, você precisa criar o volume do Docker com antecedência, mas geralmente para fins
‫de desenvolvimento local, apenas especificá-lo em um Dockerfile ou no comando executar está bem.