Docker - Armazenamento
Volume
É um disco virtual onde a Docker Engine tem total autonomia sobre ele, sendo assim, o Host não precisa ter uma estrutura de arquivos, porém isso torna um pouco mais carregado a leitura do Host Físico, porque há uma verificação de montagens nos containers.Pode ser criado durante a criação do container.
Cria os arquivos no Host caso não existam, e já existam na imagem.
É o preferencial e aconselhado para ambientes replicados e distribuídos.
As informações são persistidas em disco, mesmo que o container seja removido ou reiniciado.
$ docker volume create myFirstVolume
$ docker volume ls
$ docker volume inspect myFirstVolume
$ docker run -d -p 80:80 --name conatiner-volume --mount source=myFirstVolume,target=/usr/share/nginx nginx
Bind Mounts
Um pouco mais simples. Mapeamento de arquivo ou pasta do Host para um arquivo ou pasta do Container.É como uma pasta compartilhada entre o Host e o Container.
A pasta no Host deve existir previamente para então ser mapeada dentro do container, caso contrário, a pasta é criada automaticamente.
As informações são persistidas em disco, mesmo que o container seja removido ou reiniciado.
$ mkdir /
$ echo "Teste" > index.html
$ docker run -d --name container-bind -p 80:80 -v /html:/usr/share/nginx/html nginx
$ docker exec -it 43 bash
# cd /usr/share/nginx/html/
# ls
# cat index.html
# echo "Hello World" > teste.html
# exit
tmpfs Mounts
É um tipo temporário, gravado na última camada, que é a camada de escrita.As informações são persistidas somente se o container reiniciado, se for removido são perdidas0.
Dependendo do modo de utilização pode consumir muito recurso físico, portanto, uma opção seria usar cache para otimizar esses recursos físicos, neste caso, as informações são perdidas na reinicialização do container.
$ docker run -d --name container-tmpfs --mount type=tmpfs,destination=/cache,tmpfs-size=100000 busybox sleep 3600
$ docker exec -it 43 bash
# ls
# cd cache/
# dd if=/dev/zero of=1mb.file bs=1024 count=1024
# touch a
# echo "teste" >
# exit
$ docker ps
$ docker restart container-tmpfs