docker數據管理

1、docker數據管理

一、環境準備

環境準備node

IP			主機名			操做系統
192.168.56.11		linux-node1		centos7

注意:我這裏使用的是centos7,若是是使用centos5或者centos6,須要升級操做系統內核,不然Docker的許多新功能都沒法使用

二、docker數據管理的兩種方式

(1)數據卷(Data Volumes)
(2)數據卷容器(Data Volumes Dontainers)

2、數據卷

一、方式一

使用-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:/#

二、方式二

(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掛載到容器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
掛載成功

3、數據卷容器

將容器掛載到另外一個容器上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
相關文章
相關標籤/搜索