Docker 卷

卷类型对比

类型语法管理方使用场景
命名卷-v mydata:/app/dataDocker持久化数据、数据库
绑定挂载-v /host/path:/container/path宿主机开发热更新、配置注入
tmpfs--tmpfs /tmp内存敏感临时数据
匿名卷-v /app/dataDocker临时数据(生产慎用)

命名卷

# 创建卷 docker volume create pgdata # 挂载命名卷运行容器 docker run -d \ --name postgres \ -v pgdata:/var/lib/postgresql/data \ -e POSTGRES_PASSWORD=secret \ postgres:16 # 备份卷到 tarball docker run --rm \ -v pgdata:/data:ro \ -v $(pwd):/backup \ alpine tar czf /backup/pgdata-backup.tar.gz -C /data . # 删除卷 docker volume rm pgdata docker volume prune # 删除所有未使用卷

绑定挂载

# 开发:挂载源码实现热更新 docker run -d \ --name dev-server \ -v $(pwd):/app \ -w /app -p 3000:3000 \ node:20 npm run dev # 只读绑定挂载 docker run -d \ -v /etc/nginx/nginx.conf:/etc/nginx/nginx.conf:ro \ nginx

Docker Compose 卷

services: db: image: postgres:16 volumes: - pgdata:/var/lib/postgresql/data - ./init.sql:/docker-entrypoint-initdb.d/init.sql:ro api: image: myapi volumes: - ./src:/app/src - /app/node_modules # 保留容器内的 node_modules volumes: pgdata: driver: local