← 返回首页
💾

Docker数据持久化

📂 devops ⏱ 2 min 245 words

Docker数据持久化

为什么需要数据持久化

容器是临时的,删除容器后数据会丢失。数据持久化可以:

数据卷(Volume)

# 创建数据卷
docker volume create mydata

# 查看数据卷
docker volume ls
docker volume inspect mydata

# 使用数据卷运行容器
docker run -d -v mydata:/data nginx

# 删除数据卷
docker volume rm mydata
docker volume prune

绑定挂载(Bind Mount)

# 挂载主机目录
docker run -d -v /host/path:/container/path nginx

# 只读挂载
docker run -d -v /host/path:/container/path:ro nginx

# 挂载单个文件
docker run -d -v /host/nginx.conf:/etc/nginx/nginx.conf:ro nginx

tmpfs挂载

# 内存挂载
docker run -d --tmpfs /tmp nginx

# 指定大小
docker run -d --tmpfs /tmp:size=100m nginx

数据卷驱动

# 使用NFS数据卷
docker volume create --driver local \
    --opt type=nfs \
    --opt o=addr=192.168.1.100,rw \
    --opt device=:/path/to/dir \
    nfsvolume

# 使用NFS运行容器
docker run -d -v nfsvolume:/data nginx

实践:数据库数据持久化

# MySQL数据持久化
docker run -d \
    --name mysql \
    -v mysql_data:/var/lib/mysql \
    -e MYSQL_ROOT_PASSWORD=secret \
    -e MYSQL_DATABASE=mydb \
    mysql:8

# PostgreSQL数据持久化
docker run -d \
    --name postgres \
    -v pg_data:/var/lib/postgresql/data \
    -e POSTGRES_PASSWORD=secret \
    postgres:14

数据备份

# 使用临时容器备份
docker run --rm -v mydata:/data -v $(pwd):/backup \
    alpine tar czf /backup/mydata-backup.tar.gz -C /data .

# 恢复数据
docker run --rm -v mydata:/data -v $(pwd):/backup \
    alpine tar xzf /backup/mydata-backup.tar.gz -C /data

数据卷管理

# 查看数据卷使用情况
docker system df -v

# 清理未使用的数据卷
docker volume prune

# 查看数据卷挂载点
docker inspect --format '{{json .Mounts}}' container_name

实践:Web应用数据管理

#!/bin/bash

# 创建必要目录
mkdir -p ./nginx/conf.d
mkdir -p ./nginx/html
mkdir -p ./app/data

# 运行Nginx
docker run -d --name web \
    -p 80:80 \
    -v $(pwd)/nginx/nginx.conf:/etc/nginx/nginx.conf:ro \
    -v $(pwd)/nginx/conf.d:/etc/nginx/conf.d:ro \
    -v $(pwd)/nginx/html:/usr/share/nginx/html \
    nginx

# 运行应用
docker run -d --name app \
    -v $(pwd)/app/data:/app/data \
    myapp:v1

数据卷最佳实践

  1. 使用命名卷而非匿名卷
  2. 重要数据定期备份
  3. 使用:ro标记只读挂载
  4. 避免挂载敏感数据
  5. 使用.dockerignore排除不需要的文件

总结

Docker数据管理是生产环境中必须掌握的技能。正确使用数据卷和挂载,可以确保数据的安全性和可恢复性。