docker数据管理

数据卷挂载

Docker提供三种不同的方式将数据从宿主机挂载到容器中:volumes,bind mounts和tmpfs。

volumes:Docker管理宿主机文件系统的一部分(/var/lib/docker/volumes)。
bind mounts:可以存储在宿主机系统的任意位置。
tmpfs:挂载存储在宿主机系统的内存中,而不会写入宿主机的文件系统。

Mounts

创建一个volumes数据卷:
docker volume create nginx-vol
docker run -itd --name nginx-test --mount src=nginx-vol,dst=/usr/share/nginx/html nginx
其中src=nginx-vol代表挂载的nginx-vol这个数据卷,数据卷可以多个容器共享

Bind Mounts

创建一个挂载volumes数据卷 容器
docker run -itd --name nginx-test --mount type=bind,src=/app/wwwroot,dst=/usr/share/nginx/html nginx
其中src=/app/wwwroot代表挂载的宿主机的/app/wwwroot这个目录,数据卷可以多个容器共享。
其中–mount比-v更通用
注意: 1. 如果源文件/目录没有存在,不会自动创建,会抛出一个错误。
2. 如果挂载目标在容器中非空目录,则该目录现有内容将被隐藏。

1. 挂载本地的目录到容器里

docker run -tid -v /data/:/data centos bash //-v 用来指定挂载目录,:前面的/data/为宿主机本地目录,:后面的/data/为容器里的目录,会在容器中自动创建,这个有个很大的用处,就是有些项目文件可以放在这里,不用进入容器和重启容器,
如果在/data/:/data:ro 代表只读,默认是rw

2. 挂载数据卷

其实我们挂载目录的时候,可以指定容器name,如果不指定就随机定义了。比如上面我们没有指定,它就生成了一个名字为suspicious_roentgen,这个名字可以使用命令 docker ps 看最右侧一列
docker run -itd --volumes-from suspicious_roentgena centos6 bash
这样,我们使用centos6镜像创建了新的容器,并且使用了suspicious_roentgen 容器的数据卷
举例:
左边是宿主机的/data目录,右边的是容器的/data/目录

[root@py1 ~]# docker run -itd -v /data/:/data centos_with_net bash
9eec997ac9d0391ec359f5295e147a6e2cecf9b1fdc36986038fa1e8fd2a2d5c
[root@py1 ~]# docker exec -it 9eec99 bash
[root@9eec997ac9d0 /]# ls /data/
mysql-5.6.36  mysql-5.6.36-linux-glibc2.5-x86_64.tar.gz  redis  redis2

此时在容器内创建的文件 在宿主机也能看到
其他容器挂载:

[root@py1 ~]# docker run -itd --volumes-from suspicious_roentgen centos6 bash
2de678d5764a09d6510d25919b167ae2966c9550c91499903f416e5c41defd1a
[root@py1 ~]# docker exec -it 2de678 bash
[root@2de678d5764a /]# ls /data/
123132  mysql-5.6.36  mysql-5.6.36-linux-glibc2.5-x86_64.tar.gz  redis  redis2

3. 定义数据卷容器

有时候,我们需要多个容器之间相互共享数据,类似于linux里面的NFS,所以就可以搭建一个专门的数据卷容器,然后其他容器直接挂载该数据卷。
首先建立数据卷容器
docker run -itd -v /data/ --name testvol centos bash //注意这里的/data/是容器的/data目录,并非本地的/data/目录。
然后让其他容器挂载该数据卷,–volumes-from表示数据来自于那个容器
docker run -itd --volumes-from testvol centos6 bash
进入容器后可以看到testvol的指定data目录
如果客户端不想用/data/目录,可以用软连接指向过去

4. 数据卷备份与恢复

备份
mkdir /data/backup
docker run --volumes-from testvol -v /data/backup/:/backup centos tar cvf /backup/data.tar /data/
说明:首先我们需要使用testvol数据卷新开一个容器,同时我们还需要把本地的/data/backup/目录挂载到该容器的/backup下,这样在容器中/backup目录里面新建的文件,我们就可以直接在/data/backup/目录中看到了。 然后再把/data/目录下面的文件打包到成data.tar文件放到/backup目录下面。
恢复
思路: 先新建一个数据卷容器,再建一个新的容器并挂载该数据卷容器,然后再把tar包解包。
新建数据卷容器:docker run -itd -v /data/ --name testvol2 centos bash
挂载数据卷新建容器,并解包:docker run --volumes-from testvol2 -v /data/backup/:/backup centos tar xf /backup/data.tar
如果容器跟宿主机直接做了映射,我们直接备份宿主机的/data/目录就可以了

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值