docker容器卷
Docker 容器卷(Volume)是用于持久化数据和共享数据的重要机制。它允许将容器内的数据存储到主机文件系统中,从而实现数据的持久化和跨容器共享。以下是 Docker 容器卷的详细讲义:
1. Docker 卷的作用
- 数据持久化:容器停止或删除后,数据不会丢失。
- 数据共享:多个容器可以共享同一个卷。
- 性能优化:卷通常比容器的写时复制(Copy-on-Write)文件系统性能更好。
2. 卷的类型
Docker 支持两种类型的卷:
- 命名卷(Named Volume):
-
- 由 Docker 管理,存储在
/var/lib/docker/volumes/
目录下。 - 适合存储数据库文件、配置文件等。
- 由 Docker 管理,存储在
- 绑定挂载(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
命令备份和恢复卷数据。