Você está na página 1de 2

# Volumes em Docker

## Entendendo a persistência de Dados no Docker

O docker em si possui uma estrutura de dados voláteis, pois as camadas que compõem
a aplicação por baixo são apenas de ready-only. Toda alteraçõa que é realizada no
docker advém da camada de read/write(leitura e escrita)
que é a camada de execução do container.

A imagem abaixo faz bem essa exemplificação.

![a](imagens/persistencia-dados.png)

Todos esses dados precisam ser salvos fora do ciclo de execução do container já que
todos os dados mantidos em um container são aqueles que estão na camada de somente
leitura.

A ideia de armazenar os dados fora dos containers em execução é para que a pasta
`/var/lib/docker/container` não acabe por crescer por conta da quantidade de dados
armazenados ali.

O principal objetivo é fazer esses dados serem mapeados para fora do container e
para isso nós temos alguams opções que veremos a seguir. Essas três opções são:
- Bind Mount
- Volume
- ON RAM

### Bind Mount

É a persistência dos dados no host. Basicamente, é criado uma pasta no container e


ela é mapeada para dentro do host.
Essa alternativa ela não é escalável, pois os arquivos são criados sobre demanda já
que os arquivos da origem sobrescrevem os dados de destino

Para realizarmos esse mapeamento, utilizamos a opção `-v


caminho_da_pasta_do_host(destino) : caminho_da_pasta_do_container(origem)`

Podemos também mapear múltiplas pastas. Basta repetir o mesmo comando com a nova
pasta desejada

```
docker run -itd --name meucontainer -p 9090:80 -v
caminho_da_pasta_do_host(destino) : caminho_da_pasta_do_container(origem)
minha_imagem

// Múltiplas pastas
docker run -itd --name meucontainer -p 9090:80 -v
caminho_da_pasta_do_host(destino) : caminho_da_pasta_do_container(origem) -v
caminho_da_pasta_do_host(destino) : caminho_da_pasta_do_container(origem)
minha_imagem

```

### Docker Volume

Diferente do bind mount, o docker volume não mapeia um diretório específico, mas
sim trabalha com o conceito de volumes.
Mas, igualmente o bind mount, ela o mapeamento desse volume entre o hospedeiro e o
container. Esse mapeamento é feito diretamente pelo Docker e não diretamente no
host
Ele é usado em produção

Eles são mais seguros, porém são menos simples. Eles não sobrescrevem os arquivos e
diretórios como no bind mount.
Eu consigo criar criptografia de conteúdos(aqui é possível também o uso de plugins
drives como: local, NFS, CIES, Cluster, SSHFS,...
Conseguimos também manipular os dados via Docker CLI e compartilhar hosts remotos.

Para utilizar um volume precisamos criar ele com o comando: `docker volume create
nome_do_volume`

Agora, basta utilizá-lo na hora da criação de um container passando a flag `-v


nome_do_volume: /pasta_mapeada`

```docker
docker run -d --name apache_volume_web -p 9091:80 -v
volume-apache-web:/usr/local/apache2/htdocs httpd

```
P.S: Eu também consigo usar o volume aliado a um mapeamento do tipo bind mount

### ON RAM(TMPFS)

Esse tipo de escrita me proporciona performance, pois só fazemos o seu mapeamento


na memória RAM.

Para realizar esse tipo de tarefa, basta passarmos a flag --tmpfs e a pasta que
vamos mapear em memória principal.

Você também pode gostar