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可以挂载一个本地的目录到容器中作为数据卷。
# docker run -d --name nginx-volume-test1 -v /data nginx
1b1113fe3b8e4e72f9d3f132cc398448b1dadda08ad53d341e1a88984ba56079-d后台运行,--name 容器名字 –v 挂载一个本地的目录到容器中作为数据卷,比如挂在到/data
nginx镜像名称
进入docker容器
# ./docker_in.sh nginx-volume-test1
root@1b1113fe3b8e:/# ls
binbootdatadevetchomeliblib64mediamntoptprocrootrunsbinsrvsystmpusrvar
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 查看挂载情况
# docker inspect -f {{.Mounts}} nginx-volume-test1
[{89a01e31a8abe828491e2cba29c9f21b02e204b88c5a7f1733f6b2b80b624b32 /var/lib/docker/volumes/89a01e31a8abe828491e2cba29c9f21b02e204b88c5a7f1733f6b2b80b624b32/_data /data localtrue }]
从上面的结果我们可以看出来,docker将本地的一个目录挂载到容器的/data下
# cd /var/lib/docker/volumes/89a01e31a8abe828491e2cba29c9f21b02e204b88c5a7f1733f6b2b80b624b32/_data
# ls
# touch papapa
再次进入docker容器查看,发现data目录下有刚才创建的文件
root@1b1113fe3b8e:/# ls /data
papapa
root@1b1113fe3b8e:/#
2、方式二
(1)挂载一个指定的目录
# docker run -d --name nginx-volume-test2 -v /data/docker-volume-nginx/:/data nginx
cbc91bef8ea779668a696046c1aa905ba2dc65e64ed5b403633b3284e00ec126
-v 源路径:目的路径
# ./docker_in.sh nginx-volume-test2
root@cbc91bef8ea7:/# ls /data #此时data目录下没有文件
在本地主机上创建一个目录
# cd /data/docker-volume-nginx/
# ls
# mkdir papapapa
#
在docker容器上查看
root@cbc91bef8ea7:/# ls /data #可以看到刚才创建的papapapa目录
papapapa
root@cbc91bef8ea7:/#
(2)挂载一个指定的文件
把/root/.bash_history挂载到容器
# 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
挂载成功
三、数据卷容器
将容器挂载到另一个容器上
# docker run -it --name volume-test3 --volumes-from nginx-volume-test2 centos /bin/bash
# ls /data
papapapa
#
这样的一个好处就是:一个容器挂载了本地目录,其他的所有容器使用-volumes-from挂载这个容器即可
就算是这个容器停掉,其他容器仍然可以访问这个目录
再运行一个容器,加上--rm参数,退出时删除容器
# docker run --rm -it --volumes-from nfs-test centos /bin/bash
# cd /data
# ls -a#此时data目录下是空的
...
# cd /data/nfs-data/
# ls
# touch shit #创建一个文件
#
# ls -a #可以看到创建的文件
...shit
页:
[1]