Volumes são diretórios externos ao container, que são montados diretamente nele, e dessa forma bypassam seu filesystem, ou seja, não seguem o padrão de camadas.
Particularidades:
Tipos
/var/lib/docker/volumes/
do hostCom o bind, um arquivo ou diretório do host é montado para um container.
Qual flag escolher? -v
ou --mount
?
--mount
é mais explícita e detalhada-v
combina todas as opções em um campo## Flag --mount
docker run -ti --name testando-volumes --mount type=bind,src="/home/seu-user/giropops-senhas",target=/giropops-senhas debian
## Volume read-only - ro
docker run -ti --name testando-volumes --mount type=bind,src="/home/seu-user/giropops-senhas",target=/giropops-senhas,ro debian
Onde
--mount
- indica o volumetype
- tipo de volumesrc
- origemdst
ou target
- destinoÉ possível fazer a criação de volumes que serão consumidos por outros containers
Pode-se criar volumes isolados de containers.
docker volume create <nome_do_volume>
No Linux, por padrão eles ficam em /var/lib/docker/volumes
- mas cabe verificar com o comando *inspect*
## Listar os volumes criados
docker volume ls
## Criar um volume
docker volume create [nome_do_volume]
docker volume create giropops
## Inspecionar
docker volume inspect [nome_do_volume]
docker volume inspect [nome_do_volume]
## Montar o volume
docker run -ti --name testando-volumes3 --mount type=volume,src=giropops,target=/giropops debian
## Remover volume
docker volume rm [nome_do_volume]
## Remover volumes não usados
docker volume prune
Usando a flag -v
docker container run -d --name container-teste -v volume-teste:/usr/share/nginx/html -p 8080:80 nginx### Exemplo
### Exemplo
docker run -d --name web-1 -v giropops:/usr/share/nginx/html -p 8080:80 nginx
## Readonly
docker container run -d --name container-teste -v volume-teste:/usr/share/nginx/html:ro -p 8080:80 nginx
### Exemplo
docker container run -d --name web-2 -v giropops:/usr/share/nginx/html:ro -p 8090:80 nginx
O Docker usa Storage Drivers para armazenar camadas de imagem e dados na camada gravável de um container.
Como os drivers podem ter desempenho inferior em gravações intensivas, especialmente em sistemas de copy-on-write, aplicações como bancos de dados sofrem impacto.
Por isso, para dados persistentes, de alta escrita ou compartilhados entre containers, a prática recomendada é usar volumes Docker.
O tmpfs é um volume temporário que persiste apenas na memória do host.
## Usando a flag mount
docker container run -d --name container-teste --mount type=tmpfs,target=/app -p 8080:80 nginx
## Exemplo
docker run -d --name web-1 --mount type=tmpfs,target=/strigus -p 8080:80 nginx