首页 > 代码库 > 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数据管理
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。