DEV Community

Lukita Moreno
Lukita Moreno

Posted on

Tipos de Volumes no Docker

1. Para que serve o volume no Docker ?

Alt Text
Basicamente utilizamos o volume para fazer a persistência de dados entre nossa máquina e o container.

2. Tipos de Volume

  • Bind-mount
  • Volume / Volume Nomeado
  • Volume Temporário

3. Bind-mount

  • Exemplo de uso
docker run -it \
-v /home/devlmoreno/docker-volumes/my-folder-bind:/my-app-docker \
ubuntu:20.04  
Enter fullscreen mode Exit fullscreen mode
  • Para exemplificar o uso, começamos criando um diretório em nosso sistema com o nome 'my-folder-bind', logo em seguida criamos o container. Alt Text
  • Por fim criamos um arquivo (bind-mount.txt) em nosso sistema (podendo ser a criação do arquivo dentro do container também). Pode-se observar que o arquivo é exibido normalmente tanto dentro do container quanto em nosso sistema. Alt Text
  • Esse tipo de Volume não é um volume criado pelo próprio Docker, ou seja, fazemos uma referência do caminho absoluto do nosso sistema para o diretório 'my-app-docker' dentro do nosso container.

4. Volume (Gerenciado pelo Docker)

  • Exemplo de uso
docker run -it \
-v /my-app-docker \
ubuntu:20.04  
Enter fullscreen mode Exit fullscreen mode
  • Nesse caso, o Docker cria um volume automaticamente dentro do nosso sistema e faz essa referência para o diretório 'my-app-docker' dentro do nosso container.
Para exemplificar o uso
  1. Criamos o container.
    • Alt Text
  2. Executamos o comando docker inspect id_container para inspecionarmos as configurações do nosso container .
    • docker inspect 1ba5ab5ab9e0
  3. Procuramos pelo atributo Mounts e em seguida o Source para descobrirmos o caminho do diretório que o Docker criou em nosso sistema para gerenciar o volume.
    • Alt Text
  4. Copiamos o caminho do diretório e logamos como sudo (por conta do caminho ser protegido), logo em seguida acessamos o diretório.
    • Por eu estar utilizando o wsl2 (ambiente linux dentro do windows) para exemplificar esse tipo de volume, o caminho do volume criado pelo Docker fica em um caminho diferente do que é listado no Mounts > Source, caso você não esteja utilizando o wsl2 basta acessar o caminho exibido no Mounts > Source normalmente.
    • Exemplo do caminho com wsl2
      • cd \\wsl$\docker-desktop-data\version-pack-data\community\docker\volumes
      • cd 1ba0860040f23624cb8efbbfde2f53af0b1d00c4af9d588299427b096ac17696
      • cd .\_data\
    • Exemplo do caminho para ambientes linux comuns
      • cd/var/lib/docker/volumes/7e5cc9339921d493553691db46fceed61f89d9cc60abf6b2c1060811166a0c4d/_data Alt Text
  5. Criamos um arquivo dentro do diretório do nosso sistema e listamos esse arquivo no container.
    • echo "Volume Gerenciado pelo Docker!" > volume-gerenciado-docker.txt
    • Para criar um arquivo no linux basta digitar touch arquivo.txt. No exemplo acima o arquivo foi criado a partir do powershell do windows por conta da utilização do wsl2.

5. Diferença entre Bind-mount e Volume

O Bind-mount faz uma referência a um caminho absoluto do nosso sistema, ou seja, nos permite escolher qual diretório queremos mapear ao docker, por conta disso ficamos "reféns" da estrutura de diretórios.
No formato Volume, o Docker faz esse trabalho, com isso abrimos um leque de possibilidades para utilizarmos os comandos que o mesmo disponibiliza, como por exemplo, create, inspect, rm, prune e etc.

6. Volume Nomeado (Gerenciado pelo Docker)

  • Exemplo de uso
docker run -it \
-v my-volume-docker:/my-app-docker \
ubuntu:20.04
Enter fullscreen mode Exit fullscreen mode
  • Crie um volume através do comando do Docker.
    • docker volume create my-volume-docker
  • Execute o container através do comando do exemplo de uso.
  • Para encontrar seu volume nomeado que foi criado (my-volume-docker) acesse o diretório /var/lib/docker/volumes, caso esteja utilizando o wsl2 seu volume será encontrado no diretório \wsl$\docker-desktop-data\version-pack-data\community\docker\volumes. Alt Text
  • Em seguida crie um arquivo dentro desse diretório e faça a listagem do mesmo no seu container, pronto, seu arquivo estará lá para ser acessado. Alt Text

7. Volume Temporário (Esse tipo de volume funciona apenas no Linux)

  • Exemplo de uso
docker run -it \
--tmpfs /my-app-docker \
ubuntu:20.04
Enter fullscreen mode Exit fullscreen mode
  • Enquanto nosso container estiver sendo executado, esse volume estará sendo armazenado na nossa memória RAM, ou seja, será um acesso mais rápido ao volume porém volátil, não teremos uma persistência de dados envolvida nesse método. Alt Text

8. Recomendações Docker

  • Por conta de facilitar o entendimento na hora da leitura do comando, é recomendando pelo próprio Docker utilizar a flag --mount ao invés da flag -v.
  • Exemplo do comando com a flag --mount
docker run -it \
--mount type=bind,source=/home/devlmoreno/docker-volumes/my-folder-bind,target=/my-app-docker \
ubuntu:20.04
Enter fullscreen mode Exit fullscreen mode

Alt Text

Alt Text

  • Estrutura do comando com a flag.
    • type = bind | volume (default) | tmpfs
    • source = diretório do nosso sistema
    • target = diretório dentro do container
  • No caso do type tmpfs, não teríamos um source, basta retirar esse parâmetro do comando.
docker run -it \
--mount type=tmpfs,target=/my-app-docker \
ubuntu:20.04
Enter fullscreen mode Exit fullscreen mode

Alt Text

  • No caso de um volume nomeado, seguindo nosso exemplo anterior e assumindo que você criou o volume a partir do gerenciamento do Docker, podemos utilizar o comando dessa forma.
docker run -it \
--mount source=my-volume-docker,target=/my-app-docker \
ubuntu:20.04
Enter fullscreen mode Exit fullscreen mode
  • Nota-se que no comando nós não passado o type, isso por conta do valor default do type ser volume.

9. Documentação Docker sobre Volumes

Top comments (0)