promovaweb-devops-docker-volumes

Compare original and translation side by side

🇺🇸

Original

English
🇨🇳

Translation

Chinese

Skill 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âmetroTipoObrigatórioPadrãoDescrição
volume_namestringNão-Nome para o volume
mount_typeenumNãovolumevolume/bind/tmpfs
backupbooleanNãofalseIncluir comandos de backup
参数类型必填默认值描述
volume_namestring-卷名
mount_typeenumvolumevolume/bind/tmpfs
backupbooleanfalse包含备份命令

Tipos de Armazenamento

存储类型

TipoPersistênciaCaso de UsoGerenciado Por
Named VolumeSimDados de ProduçãoDocker
Bind MountSimDesenvolvimento, configsHost
tmpfsNão (memória)Secrets, arquivos temporáriosDocker
AnonymousCiclo de vida do containerEspaço temporário (scratch space)Docker
类型持久化适用场景管理方
命名卷(Named Volume)生产数据Docker
绑定挂载(Bind Mount)开发、配置文件宿主机
tmpfs否(内存存储)密钥、临时文件Docker
匿名卷(Anonymous)随容器生命周期临时空间(暂存空间)Docker

Operações de Volume

卷操作

Named Volumes

命名卷

bash
undefined
bash
undefined

Criar 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
docker run -d
-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
undefined
docker volume prune
undefined

Bind Mounts

绑定挂载

bash
undefined
bash
undefined

Desenvolvimento - montar código-fonte

开发场景 - 挂载源代码

docker run -d
-v $(pwd)/src:/app/src
node:20-alpine
docker run -d
-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
undefined
docker run -d
-v /etc/app/config.yaml:/app/config.yaml:ro
myapp
undefined

tmpfs Mounts

tmpfs挂载

bash
undefined
bash
undefined

Dados sensíveis em memória

内存存储敏感数据

docker run -d
--tmpfs /app/secrets:rw,noexec,nosuid,size=64m
myapp
docker run -d
--tmpfs /app/secrets:rw,noexec,nosuid,size=64m
myapp

Sintaxe do Compose

Compose语法

services: app: volumes: - type: tmpfs target: /app/tmp tmpfs: size: 100m
undefined
services: app: volumes: - type: tmpfs target: /app/tmp tmpfs: size: 100m
undefined

Docker 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é-criado
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  # 预创建

Backup & Restauração

备份与恢复

Backup de Volume

卷备份

bash
undefined
bash
undefined

Backup 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 .
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 .

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 .
undefined
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 .
undefined

Restaurar Volume

卷恢复

bash
undefined
bash
undefined

Restaurar 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
undefined
docker run --rm
-v app_data:/dest
-v $(pwd)/backups:/backup:ro
alpine tar xvf /backup/app_data_20240101.tar -C /dest
undefined

Clonar 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

常见错误

ErroCausaSolução
volume in use
Container em execuçãoPare o container primeiro
permission denied
Incompatibilidade de UIDCorrija a propriedade (ownership)
no space left
Disco cheioLimpe ou expanda
path not found
Bind mount ausenteCrie o diretório
错误原因解决方案
volume in use
容器正在运行占用卷先停止对应容器
permission denied
UID不匹配修正文件所有权
no space left
磁盘已满清理磁盘或扩容
path not found
绑定挂载路径不存在创建对应目录

Correções de Permissão

权限修正

bash
undefined
bash
undefined

Verificar 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
undefined
docker run -v /host/path:/container/path:Z myimage
undefined

Soluçã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?
    ls -la
    no container
  • Os dados estão persistindo? Pare/inicie o container
  • 卷是否存在?执行
    docker volume ls
    确认
  • 挂载是否可见?执行
    docker exec <c> df -h
    确认
  • 权限是否正确?在容器内执行
    ls -la
    检查
  • 数据是否持久化?停止并重启容器验证

Comandos de Diagnóstico

诊断命令

bash
undefined
bash
undefined

Verificar 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
undefined
docker system df -v
undefined