Docker数据管理(四)

Docker数据管理

Docker数据分为两种:

数据卷

  • -/data
  • -v src:dst

数据卷容器

  • --volumes-from

 

数据卷

案例1:我们创建一个容器,起名叫nginx-volume-demo1挂载到容器中的/data目录下

1
2
[root@linux-node1 ~] # docker run -d --name nginx-volume-demo1 -v /data nginx
96892a7bb67e9c687f29d07ea674ca527ab09dee6b0ec1217bd5aebf328d8f44

进入容器,目录下已经有我们data目录

1
2
3
[root@linux-node1 ~] # ./docker_in.sh nginx-volume-demo1
root@96892a7bb67e:/ # ls /
bin  boot  data  dev  etc  home  lib  lib64  media  mnt  opt  proc  root  run  sbin  srv  sys  tmp  usr  var

查看当前挂载目录

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
root@96892a7bb67e:/ # mount
/dev/mapper/docker-8 :2-134698748-3b4e90ae453399aae2cd6b256c6e27996eaabd478669263beb955efb9def6017 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)
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/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/devices  type  cgroup (ro,nosuid,nodev,noexec,relatime,devices)
cgroup on  /sys/fs/cgroup/freezer  type  cgroup (ro,nosuid,nodev,noexec,relatime,freezer)
cgroup on  /sys/fs/cgroup/hugetlb  type  cgroup (ro,nosuid,nodev,noexec,relatime,hugetlb)
cgroup on  /sys/fs/cgroup/cpuset  type  cgroup (ro,nosuid,nodev,noexec,relatime,cpuset)
cgroup on  /sys/fs/cgroup/cpuacct ,cpu  type  cgroup (ro,nosuid,nodev,noexec,relatime,cpuacct,cpu)
cgroup on  /sys/fs/cgroup/blkio  type  cgroup (ro,nosuid,nodev,noexec,relatime,blkio)
cgroup on  /sys/fs/cgroup/memory  type  cgroup (ro,nosuid,nodev,noexec,relatime,memory)
mqueue on  /dev/mqueue  type  mqueue (rw,nosuid,nodev,noexec,relatime)
/dev/sda2  on  /data  type  xfs (rw,relatime,attr2,inode64,noquota)
/dev/sda2  on  /etc/resolv .conf  type  xfs (rw,relatime,attr2,inode64,noquota)
/dev/sda2  on  /etc/hostname  type  xfs (rw,relatime,attr2,inode64,noquota)
/dev/sda2  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_list  type  tmpfs (rw,nosuid,mode=755)
tmpfs on  /proc/timer_stats  type  tmpfs (rw,nosuid,mode=755)
tmpfs on  /proc/sched_debug  type  tmpfs (rw,nosuid,mode=755)

提示:虽然我们不知道mount到哪里,但是在却有date目录 

1
2
root@96892a7bb67e:/ # mount |grep data
/dev/sda2  on  /data  type  xfs (rw,relatime,attr2,inode64,noquota)

通过docker inspect来查看mount的情况

1
2
[root@linux-node1 ~] # docker inspect -f {{.Mounts}} nginx-volume-demo1
[{f3aa312c4981a6653d1ca75b4df8b76459622dee6b798077a8b350b4d8e73751  /var/lib/docker/volumes/f3aa312c4981a6653d1ca75b4df8b76459622dee6b798077a8b350b4d8e73751/_data  /data  local   true  }]

我们可以在这个文件下创建一个文件,然后在进容器中进行查看

1
2
3
4
[root@linux-node1 ~] # cd /var/lib/docker/volumes/f3aa312c4981a6653d1ca75b4df8b76459622dee6b798077a8b350b4d8e73751/_data
[root@linux-node1 _data] # touch demo.txt
[root@linux-node1 _data] # ls
demo.txt
1
2
3
root@96892a7bb67e:/ # cd /data/
root@96892a7bb67e: /data # ls
demo.txt

小结:根据上面的操作,我们可以看出物理机的/var/lib/docker/volumes/f3aa312c4981a6653d1ca75b4df8b76459622dee6b798077a8b350b4d8e73751/_data目录实际上就是对应到容器中的/data目录。

 

案例2:我们创建一个容器,起名叫nginx-volume-demo2,指定物理机上/data/docker-volume-nginx目录挂载到容器中的/data目录下

1
2
[root@linux-node1 ~] # docker run -d --name nginx-volume-demo2 -v /data/docker-volume-nginx/:/data nginx
8814cf80b424d93624d85044a093de67c67fba8dac1c8e0b832727a43d01fc0b

备注:/data/docker-volume-nginx 物理机存储文件的目录,/data容器中的目录。

我们可以在这个/data/docker-volume-nginx目录下创建一个文件,然后在进容器中/data目录进行查看

1
2
3
4
[root@linux-node1 _data] # cd /data/docker-volume-nginx
[root@linux-node1 docker-volume-nginx] # touch demo2.txt
[root@linux-node1 docker-volume-nginx] # ls
demo2.txt
1
2
3
4
[root@linux-node1 ~] # ./docker_in.sh nginx-volume-demo2
root@8814cf80b424:/ # cd /data/
root@8814cf80b424: /data # ls
demo2.txt

 

案例3:只读方式挂载

1
2
[root@linux-node1 ~] # docker run -d --name nginx-volume-demo3 -v /data/docker-volume-nginx/:/data:ro nginx
8822c2f37e9e393b5e845b0970c2037c932134568dd43e6460bb057bbb97f834

 

案例4:文件挂载

1
docker run -- rm  -it --name nginx-volume-demo4 - v  /root/ .bash_history:/.bash_history nginx  /bin/bash

 

数据卷容器

数据卷容器就是可以让一个容器访问另一个容器的卷,不管这个容器是否运行都可以访问到。 

数据卷容器简单解释就是:它可以让这个数据在多个容器中共享。

案例1:我们创建一个容器,起名叫volume-demo1,访问另一个容器nginx-volume-demo2的/data目录

1
2
3
4
[root@linux-node1 ~] # docker run -it --rm --name volume-demo1 --volumes-from nginx-volume-demo2 centos /bin/bash
[root@86c9a83d95be /] # cd /data
[root@86c9a83d95be data] # ls
demo2.txt

  • --volumes-from 另一个容器的名称

原文地址:http://www.cnblogs.com/shhnwangjian/p/6294793.html

猜你喜欢

转载自blog.csdn.net/AlbenXie/article/details/80978409