Docker数据管理

Docker数据管理
容器中管理数主要有两种方式:
  • 数据卷:容器内数据直接映射到本地主机环境;
  • 数据卷容器:使用特定容器维护数据卷。

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

你可能感兴趣的:(docker)