Escolar Documentos
Profissional Documentos
Cultura Documentos
title: Capítulo 07
---
# 7. Entendendo volumes
Bom, volumes nada mais são que diretórios externos ao *container*, que
são montados diretamente nele, e dessa forma *bypassam* seu
*filesystem*, ou seja, não seguem aquele padrão de camadas que falamos.
Decepcionei você? Que bom, sinal de que é bem simples e você não vai ter
problemas para entender. :)
- Caso ocorra de já haver dados no diretório em que você está montando como
volume, ou seja, se o diretório já existe e está "populado" na imagem base, aqueles
dados serão copiados para o volume.
- Alterações em um volume não irão com a imagem quando você fizer uma cópia ou
*snapshot* de um *container*.
```bash
root@linuxtips:~# mkdir /volume
root@linuxtips:~# docker container run -ti --mount
type=bind,src=/volume,dst=/volume ubuntu
root@7db02e999bf2:/# df -h
Filesystem Size Used Avail Use% Mounted on
none 13G 6.8G 5.3G 57% /
tmpfs 999M 0 999M 0% /dev
tmpfs 999M 0 999M 0% /sys/fs/cgroup
/dev/mapper/ubuntu--vg-root 13G 6.8G 5.3G 57% /volume
shm 64M 0 64M 0% /dev/shm
root@7db02e999bf2:/# ls
bin boot dev etc home lib lib64 media mnt opt proc root run sbin srv sys tmp usr
var volume
root@7db02e999bf2:/#
```
```bash
# docker container run -ti --mount
type=bind,src=/root/primeiro_container,dst=/volume ubuntu
root@3d372a410ea2:/# df -h
Filesystem Size Used Avail Use% Mounted on
none 13G 6.8G 5.3G 57% /
tmpfs 999M 0 999M 0% /dev
tmpfs 999M 0 999M 0% /sys/fs/cgroup
/dev/mapper/ubuntu--vg-root 13G 6.8G 5.3G 57% /volume
shm 64M 0 64M 0% /dev/shm
root@3d372a410ea2:/#
```
No *container*:
```bash
root@3d372a410ea2:/# ls /volume/
Dockerfile
root@3d372a410ea2:/#
```
No *host*:
```bash
root@linuxtips:~# ls /root/primeiro_dockerfile/
Dockerfile
root@linuxtips:~#
```
```bash
# docker container run -ti --mount
type=bind,src=/root/primeiro_container,dst=/volume,ro ubuntu
root@8d7863b1d9af:/# df -h
root@8d7863b1d9af:/# cd /volume/
root@8d7863b1d9af:/volume# ls
Dockerfile
root@8d7863b1d9af:/volume#
```
```bash
# docker container run -ti --mount
type=bind,src=/root/primeiro_container/Dockerfile,dst=/Dockerfile ubuntu
root@df0e3e58280a:/# df -h
root@df0e3e58280a:/#
```
Sempre que criamos um volume, ele cria um diretório com o mesmo nome
dentro de "/var/lib/docker/volumes/".
```bash
# docker volume create giropops
```
```bash
# docker volume rm giropops
```
```bash
# docker volume inspect giropops
```
Para remover os volumes que não estão sendo utilizados (use com extrema
moderação! :D):
```bash
# docker volume prune
```
```bash
# docker container run -d --mount type=volume,source=giropops,destination=/var/opa
nginx
```
Onde:
Caso você queira obter a localização do seu volume, é simples. Mas para
isso você precisa conhecer o comando "docker volume inspect".
```bash
docker volume inspect --format {% raw %}'{{ .Mountpoint }}'{% endraw %} giropops
/var/lib/docker/volumes/giropopos/_data
```
```bash
# docker container create -v /data --name dbdados centos
```
[{46255137fe3f6d5f593e9ba9aaaf570b2f8b5c870f587c2fb34f29b79f97c30c
/var/lib/docker/volumes/46255137fe3f6d5f593e9ba9aaaf570b2f8b5c870f587c2fb34f29b79f9
7c30c/_data /data local true }]
```
```bash
root@linuxtips:~# ls \
/var/lib/docker/volumes/46255137fe3f6d5f593e9ba9aaaf570b2f8b5c870f587c2fb34f29b79f9
7c30c/_data
```
```bash
# docker run -d -p 5432:5432 --name pgsql1 --volumes-from dbdados \
-e POSTGRESQL_USER=docker -e POSTGRESQL_PASS=docker \
-e POSTGRESQL_DB=docker kamui/postgresql
```bash
root@linuxtips:~# ls
/var/lib/docker/volumes/46255137fe3f6d5f593e9ba9aaaf570b2f8b5c870f587c2fb34f29b79f9
7c30c/_data
root@linuxtips:~#
```
```bash
root@linuxtips:~# cd backup/
root@linuxtips:~/backup# docker run -ti --volumes-from dbdados -v $(pwd):/backup
debian tar -cvf /backup/backup.tar /data
```
```bash
root@linuxtips:~/backup# ls
backup.tar
root@linuxtips:~/backup#
```