首页 > 代码库 > docker数据管理

docker数据管理

一、docker数据管理

1、环境准备

环境准备

IP			主机名			操作系统
192.168.56.11		linux-node1		centos7

注意:我这里使用的是centos7,如果是使用centos5或者centos6,需要升级操作系统内核,否则Docker的许多新功能都无法使用

2、docker数据管理的两种方式

(1)数据卷(Data Volumes)
(2)数据卷容器(Data Volumes Dontainers)

二、数据卷

1、方式一

使用-v可以挂载一个本地的目录到容器中作为数据卷。

[root@linux-node1 ~]# docker run -d --name nginx-volume-test1 -v /data nginx
1b1113fe3b8e4e72f9d3f132cc398448b1dadda08ad53d341e1a88984ba56079-d后台运行,--name 容器名字 –v 挂载一个本地的目录到容器中作为数据卷,比如挂在到/data
nginx镜像名称

进入docker容器
[root@linux-node1 ~]# ./docker_in.sh nginx-volume-test1
root@1b1113fe3b8e:/# ls
bin  boot  data  dev  etc  home  lib  lib64  media  mnt  opt  proc  root  run  sbin  srv  sys  tmp  usr  var
root@1b1113fe3b8e:/# ls /data  #这时data目录下没有任何文件
root@1b1113fe3b8e:/# mount
/dev/mapper/docker-253:0-67758036-f73c4d92da10a8b789d3dc7b2d137bee3cc9dfebd1e46de1167eeb4b4c409a7c on / type xfs (rw,relatime,nouuid,attr2,inode64,logbsize=64k,sunit=128,swidth=128,noquota)
proc on /proc type proc (rw,nosuid,nodev,noexec,relatime)
tmpfs on /dev type tmpfs (rw,nosuid,mode=755)
devpts on /dev/pts type devpts (rw,nosuid,noexec,relatime,gid=5,mode=620,ptmxmode=666)
mqueue on /dev/mqueue type mqueue (rw,nosuid,nodev,noexec,relatime)
sysfs on /sys type sysfs (ro,nosuid,nodev,noexec,relatime)
tmpfs on /sys/fs/cgroup type tmpfs (ro,nosuid,nodev,noexec,relatime,mode=755)
cgroup on /sys/fs/cgroup/systemd type cgroup (ro,nosuid,nodev,noexec,relatime,xattr,release_agent=/usr/lib/systemd/systemd-cgroups-agent,name=systemd)
cgroup on /sys/fs/cgroup/cpuacct,cpu type cgroup (ro,nosuid,nodev,noexec,relatime,cpuacct,cpu)
cgroup on /sys/fs/cgroup/cpuset type cgroup (ro,nosuid,nodev,noexec,relatime,cpuset)
cgroup on /sys/fs/cgroup/net_cls type cgroup (ro,nosuid,nodev,noexec,relatime,net_cls)
cgroup on /sys/fs/cgroup/perf_event type cgroup (ro,nosuid,nodev,noexec,relatime,perf_event)
cgroup on /sys/fs/cgroup/hugetlb type cgroup (ro,nosuid,nodev,noexec,relatime,hugetlb)
cgroup on /sys/fs/cgroup/blkio type cgroup (ro,nosuid,nodev,noexec,relatime,blkio)
cgroup on /sys/fs/cgroup/devices type cgroup (ro,nosuid,nodev,noexec,relatime,devices)
cgroup on /sys/fs/cgroup/memory type cgroup (ro,nosuid,nodev,noexec,relatime,memory)
cgroup on /sys/fs/cgroup/freezer type cgroup (ro,nosuid,nodev,noexec,relatime,freezer)
**/DEV/MAPPER/CENTOS-ROOT ON /DATA TYPE XFS (RW,RELATIME,ATTR2,INODE64,NOQUOTA)**
/dev/mapper/centos-root on /run/secrets type xfs (rw,relatime,attr2,inode64,noquota)
/dev/mapper/centos-root on /etc/resolv.conf type xfs (rw,relatime,attr2,inode64,noquota)
/dev/mapper/centos-root on /etc/hostname type xfs (rw,relatime,attr2,inode64,noquota)
/dev/mapper/centos-root on /etc/hosts type xfs (rw,relatime,attr2,inode64,noquota)
shm on /dev/shm type tmpfs (rw,nosuid,nodev,noexec,relatime,size=65536k)
proc on /proc/asound type proc (ro,nosuid,nodev,noexec,relatime)
proc on /proc/bus type proc (ro,nosuid,nodev,noexec,relatime)
proc on /proc/fs type proc (ro,nosuid,nodev,noexec,relatime)
proc on /proc/irq type proc (ro,nosuid,nodev,noexec,relatime)
proc on /proc/sys type proc (ro,nosuid,nodev,noexec,relatime)
proc on /proc/sysrq-trigger type proc (ro,nosuid,nodev,noexec,relatime)
tmpfs on /proc/kcore type tmpfs (rw,nosuid,mode=755)
tmpfs on /proc/timer_stats type tmpfs (rw,nosuid,mode=755)
root@1b1113fe3b8e:/#

使用docker inspect 查看挂载情况

[root@linux-node1 ~]# docker inspect -f {{.Mounts}} nginx-volume-test1
[{89a01e31a8abe828491e2cba29c9f21b02e204b88c5a7f1733f6b2b80b624b32 /var/lib/docker/volumes/89a01e31a8abe828491e2cba29c9f21b02e204b88c5a7f1733f6b2b80b624b32/_data /data local  true }]

从上面的结果我们可以看出来,docker将本地的一个目录挂载到容器的/data下

[root@linux-node1 ~]# cd /var/lib/docker/volumes/89a01e31a8abe828491e2cba29c9f21b02e204b88c5a7f1733f6b2b80b624b32/_data
[root@linux-node1 /var/lib/docker/volumes/89a01e31a8abe828491e2cba29c9f21b02e204b88c5a7f1733f6b2b80b624b32/_data]# ls
[root@linux-node1 /var/lib/docker/volumes/89a01e31a8abe828491e2cba29c9f21b02e204b88c5a7f1733f6b2b80b624b32/_data]# touch papapa

再次进入docker容器查看,发现data目录下有刚才创建的文件

root@1b1113fe3b8e:/# ls /data
papapa
root@1b1113fe3b8e:/#

2、方式二

(1)挂载一个指定的目录

[root@linux-node1 ~]# docker run -d --name nginx-volume-test2 -v /data/docker-volume-nginx/:/data nginx
cbc91bef8ea779668a696046c1aa905ba2dc65e64ed5b403633b3284e00ec126
-v 源路径:目的路径
[root@linux-node1 ~]# ./docker_in.sh nginx-volume-test2
root@cbc91bef8ea7:/# ls /data   #此时data目录下没有文件
在本地主机上创建一个目录
[root@linux-node1 ~]# cd /data/docker-volume-nginx/
[root@linux-node1 /data/docker-volume-nginx]# ls
[root@linux-node1 /data/docker-volume-nginx]# mkdir papapapa
[root@linux-node1 /data/docker-volume-nginx]#
在docker容器上查看
root@cbc91bef8ea7:/# ls /data    #可以看到刚才创建的papapapa目录
papapapa
root@cbc91bef8ea7:/#

(2)挂载一个指定的文件

把/root/.bash_history挂载到容器

[root@linux-node1 ~]# docker run --rm -it -v /root/.bash_history:/.bash_history nginx /bin/bash

进入容器查看挂载的文件
root@fde03de2d226:/# cat .bash_history |more
vi jenkins.log 
#1472008962
ls
#1472009301
cat jenkins.log 
#1472009312
cat /var/lib/jenkins/secrets/initialAdminPassword
#1472016216
挂载成功

三、数据卷容器

将容器挂载到另一个容器上

[root@linux-node1 ~]# docker run -it --name volume-test3 --volumes-from nginx-volume-test2 centos /bin/bash
[root@fd11374b2a58 /]# ls /data
papapapa
[root@fd11374b2a58 /]#
这样的一个好处就是:一个容器挂载了本地目录,其他的所有容器使用-volumes-from挂载这个容器即可
就算是这个容器停掉,其他容器仍然可以访问这个目录

再运行一个容器,加上--rm参数,退出时删除容器

[root@linux-node1 ~]# docker run --rm -it --volumes-from nfs-test centos /bin/bash
[root@f32352c8d243 /]# cd /data
[root@f32352c8d243 data]# ls -a  #此时data目录下是空的
.  ..

[root@linux-node1 ~]# cd /data/nfs-data/
[root@linux-node1 /data/nfs-data]# ls
[root@linux-node1 /data/nfs-data]# touch shit    #创建一个文件
[root@linux-node1 /data/nfs-data]#

[root@f32352c8d243 data]# ls -a        #可以看到创建的文件
.  ..  shit


本文出自 “JackyWang” 博客,请务必保留此出处http://jackyxin.blog.51cto.com/1976631/1856551

docker数据管理