promovaweb-devops-docker-volumes
Compare original and translation side by side
🇺🇸
Original
English🇨🇳
Translation
ChineseSkill de Docker Volumes
Docker Volumes技能
Domine o armazenamento persistente do Docker, incluindo volumes nomeados, bind mounts, tmpfs e procedimentos de backup/restauração de dados.
掌握Docker持久化存储,包括命名卷、bind mounts、tmpfs以及数据备份/恢复流程。
Propósito
目的
Implementar persistência de dados confiável para containers com gerenciamento adequado de volume, estratégias de backup e manipulação de permissões.
为容器实现可靠的数据持久化,提供完善的卷管理、备份策略和权限处理能力。
Parâmetros
参数
| Parâmetro | Tipo | Obrigatório | Padrão | Descrição |
|---|---|---|---|---|
| volume_name | string | Não | - | Nome para o volume |
| mount_type | enum | Não | volume | volume/bind/tmpfs |
| backup | boolean | Não | false | Incluir comandos de backup |
| 参数 | 类型 | 必填 | 默认值 | 描述 |
|---|---|---|---|---|
| volume_name | string | 否 | - | 卷名 |
| mount_type | enum | 否 | volume | volume/bind/tmpfs |
| backup | boolean | 否 | false | 包含备份命令 |
Tipos de Armazenamento
存储类型
| Tipo | Persistência | Caso de Uso | Gerenciado Por |
|---|---|---|---|
| Named Volume | Sim | Dados de Produção | Docker |
| Bind Mount | Sim | Desenvolvimento, configs | Host |
| tmpfs | Não (memória) | Secrets, arquivos temporários | Docker |
| Anonymous | Ciclo de vida do container | Espaço temporário (scratch space) | Docker |
| 类型 | 持久化 | 适用场景 | 管理方 |
|---|---|---|---|
| 命名卷(Named Volume) | 是 | 生产数据 | Docker |
| 绑定挂载(Bind Mount) | 是 | 开发、配置文件 | 宿主机 |
| tmpfs | 否(内存存储) | 密钥、临时文件 | Docker |
| 匿名卷(Anonymous) | 随容器生命周期 | 临时空间(暂存空间) | Docker |
Operações de Volume
卷操作
Named Volumes
命名卷
bash
undefinedbash
undefinedCriar volume
创建卷
docker volume create app_data
docker volume create app_data
Usar no container
在容器中使用
docker run -d
-v app_data:/var/lib/postgresql/data
postgres:16-alpine
-v app_data:/var/lib/postgresql/data
postgres:16-alpine
docker run -d
-v app_data:/var/lib/postgresql/data
postgres:16-alpine
-v app_data:/var/lib/postgresql/data
postgres:16-alpine
Inspecionar volume
查看卷详情
docker volume inspect app_data
docker volume inspect app_data
Listar volumes
列出所有卷
docker volume ls
docker volume ls
Remover volumes não utilizados
清理未使用的卷
docker volume prune
undefineddocker volume prune
undefinedBind Mounts
绑定挂载
bash
undefinedbash
undefinedDesenvolvimento - montar código-fonte
开发场景 - 挂载源代码
docker run -d
-v $(pwd)/src:/app/src
node:20-alpine
-v $(pwd)/src:/app/src
node:20-alpine
docker run -d
-v $(pwd)/src:/app/src
node:20-alpine
-v $(pwd)/src:/app/src
node:20-alpine
Configuração apenas leitura (read-only)
只读配置挂载
docker run -d
-v /etc/app/config.yaml:/app/config.yaml:ro
myapp
-v /etc/app/config.yaml:/app/config.yaml:ro
myapp
undefineddocker run -d
-v /etc/app/config.yaml:/app/config.yaml:ro
myapp
-v /etc/app/config.yaml:/app/config.yaml:ro
myapp
undefinedtmpfs Mounts
tmpfs挂载
bash
undefinedbash
undefinedDados sensíveis em memória
内存存储敏感数据
docker run -d
--tmpfs /app/secrets:rw,noexec,nosuid,size=64m
myapp
--tmpfs /app/secrets:rw,noexec,nosuid,size=64m
myapp
docker run -d
--tmpfs /app/secrets:rw,noexec,nosuid,size=64m
myapp
--tmpfs /app/secrets:rw,noexec,nosuid,size=64m
myapp
Sintaxe do Compose
Compose语法
services:
app:
volumes:
- type: tmpfs
target: /app/tmp
tmpfs:
size: 100m
undefinedservices:
app:
volumes:
- type: tmpfs
target: /app/tmp
tmpfs:
size: 100m
undefinedDocker Compose Volumes
Docker Compose卷配置
yaml
services:
database:
image: postgres:16-alpine
volumes:
- db_data:/var/lib/postgresql/data
- ./init.sql:/docker-entrypoint-initdb.d/init.sql:ro
environment:
POSTGRES_PASSWORD: ${DB_PASSWORD}
app:
image: myapp
volumes:
- uploads:/app/uploads
- ./config:/app/config:ro
volumes:
db_data:
driver: local
uploads:
external: true # Pré-criadoyaml
services:
database:
image: postgres:16-alpine
volumes:
- db_data:/var/lib/postgresql/data
- ./init.sql:/docker-entrypoint-initdb.d/init.sql:ro
environment:
POSTGRES_PASSWORD: ${DB_PASSWORD}
app:
image: myapp
volumes:
- uploads:/app/uploads
- ./config:/app/config:ro
volumes:
db_data:
driver: local
uploads:
external: true # 预创建Backup & Restauração
备份与恢复
Backup de Volume
卷备份
bash
undefinedbash
undefinedBackup para arquivo tar
备份为tar文件
docker run --rm
-v app_data:/source:ro
-v $(pwd)/backups:/backup
alpine tar cvf /backup/app_data_$(date +%Y%m%d).tar -C /source .
-v app_data:/source:ro
-v $(pwd)/backups:/backup
alpine tar cvf /backup/app_data_$(date +%Y%m%d).tar -C /source .
docker run --rm
-v app_data:/source:ro
-v $(pwd)/backups:/backup
alpine tar cvf /backup/app_data_$(date +%Y%m%d).tar -C /source .
-v app_data:/source:ro
-v $(pwd)/backups:/backup
alpine tar cvf /backup/app_data_$(date +%Y%m%d).tar -C /source .
Backup compactado
压缩备份
docker run --rm
-v app_data:/source:ro
-v $(pwd)/backups:/backup
alpine tar czvf /backup/app_data_$(date +%Y%m%d).tar.gz -C /source .
-v app_data:/source:ro
-v $(pwd)/backups:/backup
alpine tar czvf /backup/app_data_$(date +%Y%m%d).tar.gz -C /source .
undefineddocker run --rm
-v app_data:/source:ro
-v $(pwd)/backups:/backup
alpine tar czvf /backup/app_data_$(date +%Y%m%d).tar.gz -C /source .
-v app_data:/source:ro
-v $(pwd)/backups:/backup
alpine tar czvf /backup/app_data_$(date +%Y%m%d).tar.gz -C /source .
undefinedRestaurar Volume
卷恢复
bash
undefinedbash
undefinedRestaurar de um tar
从tar文件恢复
docker run --rm
-v app_data:/dest
-v $(pwd)/backups:/backup:ro
alpine tar xvf /backup/app_data_20240101.tar -C /dest
-v app_data:/dest
-v $(pwd)/backups:/backup:ro
alpine tar xvf /backup/app_data_20240101.tar -C /dest
undefineddocker run --rm
-v app_data:/dest
-v $(pwd)/backups:/backup:ro
alpine tar xvf /backup/app_data_20240101.tar -C /dest
-v app_data:/dest
-v $(pwd)/backups:/backup:ro
alpine tar xvf /backup/app_data_20240101.tar -C /dest
undefinedClonar Volume
卷克隆
bash
docker run --rm \
-v source_volume:/from:ro \
-v target_volume:/to \
alpine cp -av /from/. /to/bash
docker run --rm \
-v source_volume:/from:ro \
-v target_volume:/to \
alpine cp -av /from/. /to/Tratamento de Erros
错误处理
Erros Comuns
常见错误
| Erro | Causa | Solução |
|---|---|---|
| Container em execução | Pare o container primeiro |
| Incompatibilidade de UID | Corrija a propriedade (ownership) |
| Disco cheio | Limpe ou expanda |
| Bind mount ausente | Crie o diretório |
| 错误 | 原因 | 解决方案 |
|---|---|---|
| 容器正在运行占用卷 | 先停止对应容器 |
| UID不匹配 | 修正文件所有权 |
| 磁盘已满 | 清理磁盘或扩容 |
| 绑定挂载路径不存在 | 创建对应目录 |
Correções de Permissão
权限修正
bash
undefinedbash
undefinedVerificar propriedade (ownership)
查看文件所有权
docker run --rm -v app_data:/data alpine ls -la /data
docker run --rm -v app_data:/data alpine ls -la /data
Corrigir propriedade (deve corresponder ao usuário do container)
修正所有权(需与容器内用户匹配)
docker run --rm -v app_data:/data alpine chown -R 1000:1000 /data
docker run --rm -v app_data:/data alpine chown -R 1000:1000 /data
SELinux (RHEL/CentOS)
SELinux(RHEL/CentOS)
docker run -v /host/path:/container/path:Z myimage
undefineddocker run -v /host/path:/container/path:Z myimage
undefinedSolução de Problemas (Troubleshooting)
问题排查
Checklist de Depuração
调试检查清单
- O volume existe?
docker volume ls - O mount está visível?
docker exec <c> df -h - As permissões estão corretas? no container
ls -la - Os dados estão persistindo? Pare/inicie o container
- 卷是否存在?执行确认
docker volume ls - 挂载是否可见?执行确认
docker exec <c> df -h - 权限是否正确?在容器内执行检查
ls -la - 数据是否持久化?停止并重启容器验证
Comandos de Diagnóstico
诊断命令
bash
undefinedbash
undefinedVerificar localização do volume
查看卷挂载路径
docker volume inspect app_data --format '{{.Mountpoint}}'
docker volume inspect app_data --format '{{.Mountpoint}}'
Verificar mounts do container
查看容器挂载信息
docker inspect <container> --format '{{json .Mounts}}'
docker inspect <container> --format '{{json .Mounts}}'
Verificar uso de disco
查看磁盘使用情况
docker system df -v
undefineddocker system df -v
undefined