标签:docker数据管理
1. 挂载本地的目录到容器里
#docker run -itd -v /data/:/data/ 镜像名/IMAGE_ID bash
可以用其他容器再挂载这个容器的目录 实现多个容器和本地目录同步、共享 如 2.挂载其它容器的目录
-d 选项表示后台运行
-v 选项用来指定挂载(创建映射关系)的目录
/data/:/data/ 宿主机目录:容器目录,: 前面的/data/为本地目录 : 后面的/data/为容器里的目录,名字不一定要相同 只要自己指定好对应的目录就可以 宿主机要手动去创建这个目录 容器会自动生成这个目录
镜像名/IMAGE_ID 为 #docker images 显示的 REPOSITORY 列的 镜像名 或者 IMAGE_ID 列的 id
[root@localhost ~]# docker run -tid -v /data/:/data1/ centos bash aa6ad30230f0eaaf47f35e26a97928bea620bc1d5ad0c8c1a3f97968076e77e6 [root@localhost ~]# touch /data/1.txt [root@localhost ~]# echo "abcdf" > /data/1.txt [root@localhost ~]# docker exec -it aa6ad30230f bash [root@aa6ad30230f0 /]# ls /data1/ 1.txt mysql [root@aa6ad30230f0 /]# cat 1.txt cat: 1.txt: No such file or directory [root@aa6ad30230f0 /]# cat /data1/1.txt abcdf [root@aa6ad30230f0 /]# touch /data1/2.txt [root@aa6ad30230f0 /]# exit exit [root@localhost ~]# ls /data/ 1.txt 2.txt mysql [root@localhost ~]# docker stop aa6ad30230f aa6ad30230f [root@localhost ~]# ls /data 1.txt 2.txt mysql [root@localhost ~]# docker rm aa6ad30230f aa6ad30230f [root@localhost ~]# ls /data/ 1.txt 2.txt mysql
2. 挂载数据卷
其实我们挂载目录的时候,可以指定容器name,如果不指定就随机定义了。比如下面我们没有指定,它就生成了一个名字为lonely_archimedes,这个名字可以使用命令 docker ps 看最右侧一列
docker run -itd --volumes-from llonely_archimedes centos bash
这样,我们使用centos镜像创建了新的容器,并且使用了 lonely_archimedes 容器的数据卷
[root@localhost ~]# docker run -itd -v /data/:/data1 centos bash 009f70e70fa76591f81b4a7e1414d12bce4d65688b33fa426ffe83e942f87a57 [root@localhost ~]# docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 009f70e70fa7 centos "bash" 7 seconds ago Up 5 seconds lonely_archimedes [root@localhost ~]# docker run -itd --volumes-from lonely_archimedes centos bash 42dab4b88ba10dffef378b824c77524f348aa0d284f2f868e298fd234d831fb8 You have new mail in /var/spool/mail/root [root@localhost ~]# docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 42dab4b88ba1 centos "bash" 22 seconds ago Up 20 seconds cranky_lovelace 009f70e70fa7 centos "bash" 9 minutes ago Up 9 minutes lonely_archimedes [root@localhost ~]# docker exec -it 42dab4b88ba1 bash [root@42dab4b88ba1 /]# ls /data1/ 1.txt 2.txt mysql [root@42dab4b88ba1 /]# touch /data1/3.txt [root@42dab4b88ba1 /]# ls /data1/ 1.txt 2.txt 3.txt mysql [root@42dab4b88ba1 /]# exit exit You have new mail in /var/spool/mail/root [root@localhost ~]# docker exec -it 009f70e70fa7 bash [root@009f70e70fa7 /]# ls /data1/ 1.txt 2.txt 3.txt mysql
自定义容器name
docker run -itd -v /data/:/data1 --name datavol centos bash
3. 定义数据卷容器
有时候,我们需要多个容器之间相互共享数据,类似于linux里面的NFS,所以就可以搭建一个专门的数据卷容器,然后其他容器直接挂载该数据卷。
首先建立数据卷容器
docker run -itd -v /data/ --name testvol centos bash //注意这里的/data/是容器的/data目录,并非本地的/data/目录。
然后让其他容器挂载该数据卷
docker run -itd --volumes-from testvol aming bash
4. 数据卷的备份与恢复
(1)备份
mkdir /vol_data_backup
docker run --volumes-from testvol -v /vol_data_backup/:/backup aming/centos tar cvf /backup/data.tar /data/
说明:首先我们需要使用testvol数据卷新开一个容器,同时我们还需要把本地的/vol_data_backup/目录挂载到该容器的/backup下,这样在容器中/backup目录里面新建的文件,我们就可以直接在/vol_data_backup/目录中看到了。 然后再把/data/目录下面的文件打包到成data.tar文件放到/backup目录下面。
(2)恢复
思路: 先新建一个数据卷容器,再建一个新的容器并挂载该数据卷容器,然后再把tar包解包。
新建数据卷容器:docker run -itd -v /data/ --name testvol2 aming/centos bash
挂载数据卷新建容器,并解包:docker run --volumes-from testvol2 -v /vol_data_backup/:/backup aming/centos tar xvf /backup/data.tar
本文出自 “梅花香自苦寒来!” 博客,请务必保留此出处http://daixuan.blog.51cto.com/5426657/1753952
标签:docker数据管理
原文地址:http://daixuan.blog.51cto.com/5426657/1753952