docker容器卷简介

docker容器卷

Docker 容器卷(Volume)是用于持久化数据和共享数据的重要机制。它允许将容器内的数据存储到主机文件系统中,从而实现数据的持久化和跨容器共享。以下是 Docker 容器卷的详细讲义:

1. Docker 卷的作用
  • 数据持久化:容器停止或删除后,数据不会丢失。
  • 数据共享:多个容器可以共享同一个卷。
  • 性能优化:卷通常比容器的写时复制(Copy-on-Write)文件系统性能更好。
2. 卷的类型

Docker 支持两种类型的卷:

  1. 命名卷(Named Volume)
    • 由 Docker 管理,存储在 /var/lib/docker/volumes/ 目录下。
    • 适合存储数据库文件、配置文件等。
  1. 绑定挂载(Bind Mount)
    • 直接挂载主机文件系统中的目录或文件到容器。
    • 适合开发环境,方便修改代码或配置文件。
3. 创建和使用卷
创建命名卷

使用 docker volume create 命令创建命名卷:

docker volume create my_volume
查看卷列表
docker volume ls
使用卷运行容器

在运行容器时,通过 -v--mount 参数挂载卷。

使用 -v 参数:
docker run -d --name my_container -v my_volume:/app/data nginx
  • my_volume:卷名称。
  • /app/data:容器内的挂载路径。
使用 --mount 参数:
docker run -d --name my_container --mount source=my_volume,target=/app/data nginx
  • source=my_volume:卷名称。
  • target=/app/data:容器内的挂载路径。
4. 绑定挂载

绑定挂载允许将主机文件系统中的目录或文件挂载到容器。

挂载主机目录
docker run -d --name my_container -v /host/path:/container/path nginx
  • /host/path:主机目录路径。
  • /container/path:容器内的挂载路径。
挂载单个文件
docker run -d --name my_container -v /host/file.txt:/container/file.txt nginx
5. 查看卷信息
查看卷详细信息
docker volume inspect my_volume
查看容器挂载信息
docker inspect my_container
6. 删除卷
删除未使用的卷
docker volume prune
删除指定卷
docker volume rm my_volume
7. 卷的使用场景
数据持久化

将数据库文件存储在卷中,确保数据不会丢失:

docker run -d --name mysql_db -v mysql_data:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=password mysql
配置文件挂载

将主机的配置文件挂载到容器:

docker run -d --name my_nginx -v /host/nginx.conf:/etc/nginx/nginx.conf nginx
开发环境代码挂载

在开发环境中,将代码目录挂载到容器,方便实时修改:

docker run -d --name my_app -v /host/code:/app/code my_app_image
8. Docker Compose 中使用卷

docker-compose.yml 文件中定义卷:

version: '3'
services:
  web:
    image: nginx
    volumes:
      - my_volume:/app/data
      - /host/path:/container/path
  db:
    image: mysql
    volumes:
      - mysql_data:/var/lib/mysql
volumes:
  my_volume:
  mysql_data:

启动服务:

docker-compose up -d
9. 卷的备份和恢复

备份卷数据

docker run --rm -v my_volume:/volume -v /backup:/backup busybox tar cvf /backup/my_volume_backup.tar /volume

恢复卷数据

docker run --rm -v my_volume:/volume -v /backup:/backup busybox tar xvf /backup/my_volume_backup.tar -C /
10. 总结
  • 命名卷:由 Docker 管理,适合存储数据库和配置文件。
  • 绑定挂载:直接挂载主机目录或文件,适合开发和调试。
  • Docker Compose:通过 docker-compose.yml 文件定义和管理卷。
  • 备份和恢复:通过 tar 命令备份和恢复卷数据。