環境準備node
IP 主機名 操做系統 192.168.56.11 linux-node1 centos7 注意:我這裏使用的是centos7,若是是使用centos5或者centos6,須要升級操做系統內核,不然Docker的許多新功能都沒法使用
(1)數據卷(Data Volumes) (2)數據卷容器(Data Volumes Dontainers)
使用-v能夠掛載一個本地的目錄到容器中做爲數據卷。linux
[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 查看掛載狀況nginx
[root@linux-node1 ~]# docker inspect -f ``.`Mounts` nginx-volume-test1 [{89a01e31a8abe828491e2cba29c9f21b02e204b88c5a7f1733f6b2b80b624b32 /var/lib/docker/volumes/89a01e31a8abe828491e2cba29c9f21b02e204b88c5a7f1733f6b2b80b624b32/_data /data local true }]
從上面的結果咱們能夠看出來,docker將本地的一個目錄掛載到容器的/data下docker
[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目錄下有剛纔建立的文件centos
root@1b1113fe3b8e:/# ls /data papapa root@1b1113fe3b8e:/#
[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:/#
把/root/.bash_history掛載到容器bash
[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 掛載成功
將容器掛載到另外一個容器上app
[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參數,退出時刪除容器ide
[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