码迷,mamicode.com
首页 > 其他好文 > 详细

Docker数据管理

时间:2016-03-22 17:34:35      阅读:388      评论:0      收藏:0      [点我收藏+]

标签: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数据管理

标签:docker数据管理

原文地址:http://daixuan.blog.51cto.com/5426657/1753952

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!