容器中管理数主要有两种方式:
1、数据卷
数据卷是一个可供容器使用的特殊目录,可以将主机操作系统目录直接映射进容器。
1.1 创建数据卷
Docker提供了volume子命令来管理数据卷。
Usage: docker volume COMMAND
Commands:
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
[root@study ~ 10:38:09]# docker volume create -d local test
test
可以在/var/lib/docker/volumes目录下查看到:
[root@study ~ 10:42:13]# ls -d /var/lib/docker/volumes/test/
/var/lib/docker/volumes/test/
通过inspect查看详细信息
[root@study ~ 10:42:16]# docker volume inspect test
[
{
"Driver": "local",
"Labels": {},
"Mountpoint": "/var/lib/docker/volumes/test/_data",
"Name": "test",
"Options": {},
"Scope": "local"
}
]
1.2 绑定数据卷
在创建容器时将主机本地的任意路径挂载到容器内作为数据卷,这种形式创建的数据卷称为绑定数据卷。
Docker run命令时,可以使用--mount来使用数据卷。--mount支持三种类型:
volume:普通数据卷,映射到主机/var/lib/docker/volumes/目录下
bind:绑定数据卷,映射到主机指定路径下
tmpfs:临时数据卷,只存在与内存中
使用training/webapp镜像运行一个web容器,并把/opt/webapp挂载到容器/opt/test目录
[root@study ~ 15:31:00]# docker run -d -P --name web --mount type=bind,source=/opt/webapp,destination=/opt/test training/webapp python app.py
注:本地目录必须是绝对路径且存在,容器内路径可以是相对路径,且路径不存在会自动创建
2、数据卷容器
用容器提供数据卷,挂载给其他容器
创建一个数据卷容器data,并创建一个数据卷挂载到/data
[root@study ~ 18:18:07]# docker run -it -v /data --name data centos
在其他容器中使用--volumes-from来挂载data容器中的数据卷
[root@study ~ 19:58:45]# docker run -dit --volumes-from data --name db1 centos
[root@study ~ 19:59:10]# docker run -dit --volumes-from data --name db2 centos
在data容器中/data/目录下创建test.txt
[root@study ~ 20:03:18]# docker exec -it data touch /data/test.txt
[root@study ~ 20:03:30]# docker exec -it data ls /data
test.txt
在db1,db2容器中也可与查看到
[root@study ~ 20:04:17]# docker exec -it db1 ls /data
test.txt
[root@study ~ 20:04:19]# docker exec -it db2 ls /data
test.txt
如果删除了挂载的容器,数据卷并不会自动删除。
3、利用数据卷容器来迁移数据
3.1 备份数据
创建一个dbbackup目录
[root@study ~ 20:08:03]# mkdir dbbackup
启动一个名为backup的容器,挂载本地目录到容器的backup目录。启动后备份/data目录。
[root@study ~ 20:09:34]# docker run --volumes-from data -v /root/dbbackup:/backup --name backup centos tar cvf /backup/bachup.tar /data
tar: Removing leading `/' from member names
/data/
/data/test.txt
[root@study ~ 20:09:43]# ls /root/dbbackup/
bachup.tar
3.2 恢复数据
恢复数据到一个容器
启动一个db3容器
[root@study ~ 20:10:07]# docker run -v /data --name db3 centos
[root@study ~ 20:32:03]# docker run --volumes-from db3 -v /root/dbbackup:/backup centos tar xvf /backup/bachup.tar
data/
data/test.txt