manuais-e-documentacao-itguys/documentacao conteineres/Nivel_2_Volumes_e_Persisten...

91 lines
3.0 KiB
Markdown
Raw Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# MANUAL TÉCNICO - VOLUMES E PERSISTÊNCIA DE DADOS NO DOCKER
**Código:** ITGINF 0010/26 | **Classificação:** RESTRITO
**Responsável:** João Pedro Toledo Gonçalves | **Data:** {{DATA_ATUAL}}
## 1. HISTÓRICO DE REVISÃO
> ⚠️ **REGRA DE OURO:**
> 1. **Autor:** João Pedro Toledo Gonçalves.
> 2. **Descrição:** Criação do documento.
| Data | Versão | Descrição | Autor |
| :--- | :--- | :--- | :--- |
| {{DATA_ATUAL}} | 1.0 | Criação Inicial | João Pedro Toledo Gonçalves |
## 2. OBJETIVO
Definir estratégias de persistência de dados em conteineres (Stateful), diferenciando Volumes gerenciados de Bind Mounts e garantindo backup e permissões corretas.
## 3. PRÉ-REQUISITOS
- [ ] Docker Engine instalado.
- [ ] Entendimento básico de permissões Linux (chmod/chown).
## 4. PASSO A PASSO (EXECUÇÃO)
**Etapa 1: Volumes Gerenciados (Recomendado)**
> **NOTA:** Volumes são gerenciados pelo Docker em `/var/lib/docker/volumes`. São mais fáceis de fazer backup e migrar.
1. Crie um volume explícito.
```bash
docker volume create dados-postgres
```
2. Use o volume em um container.
```bash
docker run -d --name db-prod -v dados-postgres:/var/lib/postgresql/data postgres:15
```
**Etapa 2: Bind Mounts (Caminhos do Host)**
> ⚠️ **IMPORTANTE:** Use Bind Mounts para arquivos de configuração (`nginx.conf`) ou código fonte em desenvolvimento.
1. Mapeie um diretório local absoluto para dentro do container.
```bash
docker run -d \
--name web-server \
-v /home/user/meu-site:/usr/share/nginx/html:ro \
nginx
```
> `:ro` = Read Only (O container não pode alterar os arquivos do host).
**Etapa 3: Inspecionando Volumes**
1. Descubra onde os dados estão realmente salvos no disco.
```bash
docker volume inspect dados-postgres
```
**Etapa 4: Backup de Volume**
1. Use um container temporário para tar/zipar o conteúdo de um volume.
```bash
docker run --rm \
-v dados-postgres:/volume \
-v $(pwd):/backup \
alpine tar cvf /backup/backup.tar /volume
```
## 5. SOLUÇÃO DE PROBLEMAS (TROUBLESHOOTING)
**Problema 1: "Permission Denied" ao escrever no volume**
* **Causa:** O UID do processo dentro do container é diferente do UID do dono da pasta no host (Bind Mount).
* **Solução:**
1. Descubra o UID interno: `docker exec container id`.
2. Ajuste o dono no host: `sudo chown -R 1000:1000 /pasta/local`.
**Problema 2: Volume órfão (Dados "perdidos")**
* **Causa:** Remover container sem remover volume mantém os dados (o que é bom), mas pode confundir.
* **Solução:**
1. Liste volumes: `docker volume ls`.
2. Remova não usados: `docker volume prune`.
## 6. DADOS TÉCNICOS
| Campo | Valor | Descrição |
| :--- | :--- | :--- |
| **Path Linux** | `/var/lib/docker/volumes` | Local padrão dos volumes |
| **Driver** | `local` | Driver padrão |
## 7. VALIDAÇÃO FINAL
- [ ] O comando `docker volume ls` lista o volume criado?
- [ ] Se remover o container (`docker rm -f`), os dados persistem?
- [ ] O container consegue ler/escrever no diretório mapeado?