文章目录
1. 简介
场景:
- 容器中的数据需要持久化
- 多个容器间数据需要共享
数据管理方式:
- 数据卷(Data Volumes):容器内数据直接映射到本地主机环境
- 数据卷容器(Data Volume Containers):使用特定容器维护数据卷
2. 数据卷(Data Volumes)
解释:将主机目录映射进容器,类似mount
特性:
- 可以在容器间共享和重用
- 主机和容器都可以修改,且立刻生效
- 不影响镜像
- 一直存在,直到没有容器使用,可以安全卸载
类型:
- volume:普通数据卷,映射到主机/var/lib/docker/volumes路径下
- bind:绑定数据卷,映射到主机指定路径下
- tmpfs:临时数据卷,只存在于内存中
2.1. 创建普通数据卷
使用docker volume COMMAND
命令
命令格式:docker volume COMMAND
命令:
命令 | 注释 |
---|---|
create | Create a volume |
inspect | Display detailed information on one or more volumes |
ls | List volumes |
prune | Remove all unused volumes |
rm | Remove one or more volumes |
使用docker volume create
命令
命令格式:docker volume create [OPTIONS] [VOLUME]
选项:
短格式 | 长格式 | 注释 |
---|---|---|
-d | –driver string | Specify volume driver name (default “local”) |
–help | Print usage | |
–label list | Set metadata for a volume (default []) | |
-o | –opt map | Set driver specific options (default map[]) |
示例:
docker volume create -d local test
在/var/lib/docker/volumees下会有test数据卷(是一个目录)
2.2. 绑定数据卷
绑定数据卷:在容器创建时,直接将主机任意路径挂载到容器内作为数据卷
使用docker [container] run
命令的--mount
选项
该选项对三种类型数据卷均支持
示例:
docker run -d -P --name web --mount type=bind, source=/webapp, destination=/opt/webapp training/webapp python app.py
或者:
docker run -d -P --name web -v /webapp:/opt/webapp training/webapp python app.py
改为只读:
docker run -d -P --name web -v /webapp:/opt/webapp:ro training/webapp python app.py
3. 数据卷容器(Data Volume Containers)
数据卷容器是一个容器,专门提供数据卷给其他容器
示例:
创建一个数据卷容器,并在其中创建一个数据卷挂载到/dbdata
docker run -it -v /dbdata --name dbdata ubuntu
在db1和db2容器中使用–volumes-from来挂载dbdata容器中的数据卷
docker run -it --volumes-from dbdata -name db1 ubuntu
docker run -it --volumes-from dbdata -name db2 ubuntu
从已挂载的数据卷的容器中挂载容器卷
docker run -d --volumes-from db1 -name db3 ubuntu
注意:删除了dbdata,db1,db2,数据卷并不会自动删除,在删除最后一个还挂载的容器时,显式使用docker rm -v命令删除容器同时删除数据卷
创建多数据卷容器:
docker run -it -v /dbdata1 -v /dbdata2 --name db centos:7
4. 利用数据卷容器来迁移数据
4.1. 备份
docker run --volumes-from dbdata -v $(pwd):/backup --name worker ubuntu tar cvf /backup/backup.tar /dbdata
注释:
- 使用ubuntu镜像创建容器worker
- 使用–volumes-from dbdata挂载dbdata容器数据卷
- 使用-v $(pwd):/backup挂载当前目录到worker容器的/backup目录
- worker容器启动,使用tar cvf /backup/backup.tar /dbdata将dbdata中dbdata目录备份
4.2. 恢复
docker run -v /dbdata --name dbdata2 ubuntu /bin/bash
docker run --volumes-from dbdata2 -v $(pwd):/backup busybox tar xvf /backup/backup.tar