14.Docker(五)-----数据卷(Docker数据卷管理、卷插件)

Docker数据卷管理、卷插件

一、Docker数据卷管理

1.为什么要用数据卷

  • docker分层文件系统

    • 性能差
    • 生命周期与容器相同
  • docker数据卷

    • mount到主机中,绕开分层文件系统
    • 和主机磁盘性能相同,容器删除后依然保留
    • 仅限本地磁盘,不能随容器迁移
  • docker提供了两种卷:

    • bind mount
    • docker managed volume
  • docker提供了两种卷: bind mount , docker managed volume

  • bind mount

  • 是将主机上的目录或文件mount到容器里。

  • 使用直观高效,易于理解。

  • 使用 -v 选项指定路径

2.bind mount

[root@server1 ~]# mkdir /jwl
[root@server1 ~]# docker run -d --name demo -v /jwl:/usr/share/nginx/html nginx
e49819a700e5976278ec5eba49442eb50b17554c341b8729a96c7d5039a1ceea
[root@server1 ~]# echo www.westos.org > /jwl/index.html
[root@server1 ~]# curl 172.17.0.2
www.westos.org
[root@server1 ~]# 

14.Docker(五)-----数据卷(Docker数据卷管理、卷插件)

[root@server1 ~]# docker exec -it demo bash			#进入demo容器交互界面
root@e49819a700e5:/# ls
bin   docker-entrypoint.d   home   media  proc	sbin  tmp
boot  docker-entrypoint.sh  lib    mnt	  root	srv   usr
dev   etc		    lib64  opt	  run	sys   var
root@e49819a700e5:/# cd /usr/share/nginx/html/
root@e49819a700e5:/usr/share/nginx/html# ls
index.html
root@e49819a700e5:/usr/share/nginx/html# pwd
/usr/share/nginx/html
root@e49819a700e5:/usr/share/nginx/html# exit
[root@server1 ~]# 

14.Docker(五)-----数据卷(Docker数据卷管理、卷插件)

[root@server1 ~]# docker volume ls #查看逻辑卷
[root@server1 ~]# docker volume prune #清除多余的逻辑卷
[root@server1 ~]# docker volume create webdata	#创建逻辑卷
webdata
[root@server1 ~]# docker rm -f demo	
demo
[root@server1 ~]# docker run -d --name demo -v webdata:/usr/share/nginx/html nginx		#将新建的逻辑卷挂载
11b0ae33a9579d574e775624eb4ee49c68e5881947a20321e7d9441ca5a9e387
[root@server1 ~]# cd /var/lib/docker/
[root@server1 docker]# ls
builder   containers  network   plugins   swarm  trust
buildkit  image       overlay2  runtimes  tmp    volumes
[root@server1 docker]# cd volumes/
[root@server1 volumes]# ls

[root@server1 volumes]# cd webdata/
[root@server1 webdata]# ls
_data
[root@server1 webdata]# cd _data/
[root@server1 _data]# ls
50x.html  index.html
[root@server1 _data]# cat index.html 

14.Docker(五)-----数据卷(Docker数据卷管理、卷插件)
14.Docker(五)-----数据卷(Docker数据卷管理、卷插件)
14.Docker(五)-----数据卷(Docker数据卷管理、卷插件)
14.Docker(五)-----数据卷(Docker数据卷管理、卷插件)

3.挂载文件

[root@server1 ~]# docker run -it --rm -v /etc/yum.repos.d/westos.repo:/etc/yum.repos.d/westos.repo:ro rhel7 bash  ## ro挂载文
件只读
bash-4.2# yum repolist
bash-4.2# cd /etc/yum.repos.d/
bash-4.2# ls
rhel7.repo  westos.repo
bash-4.2# cat westos.repo 
[wan]
name="wan"
baseurl=http://172.25.15.250/rhel7
gpgcheck=0
[docker]
name=docker
baseurl=ftp://172.25.15.250/pub/docs/docker/docker-ce
gpgcheck=0
bash-4.2# echo westos > westos.repo 
bash: westos.repo: Read-only file system
bash-4.2# 

14.Docker(五)-----数据卷(Docker数据卷管理、卷插件)
14.Docker(五)-----数据卷(Docker数据卷管理、卷插件)
14.Docker(五)-----数据卷(Docker数据卷管理、卷插件)

[root@server1 ~]# docker rm -f demo
demo
[root@server1 ~]# docker run -d --name demo -v /usr/share/nginx/html nginx
a0cf32ca66c1510581ca4ca2dbb74617ebe229fb8ebbae444b9512cd371a7aac
[root@server1 ~]# docker inspect demo

[root@server1 ~]# cd /var/lib/docker/volumes/
[root@server1 volumes]# ls
[root@server1 volumes]# cd webdata/
[root@server1 webdata]# ls
_data
[root@server1 webdata]# cd _data/
[root@server1 _data]# ls
50x.html  index.html
[root@server1 _data]# cd /var/lib/docker/volumes/4039fdaa052d8ba29acc13d5ffe92bd9c871d285c5c545b6fe4d533f7cc86ce7/_data
[root@server1 _data]# ls
50x.html  index.html
[root@server1 _data]# 

14.Docker(五)-----数据卷(Docker数据卷管理、卷插件)
14.Docker(五)-----数据卷(Docker数据卷管理、卷插件)
14.Docker(五)-----数据卷(Docker数据卷管理、卷插件)

4.两个路径下的文件一样

14.Docker(五)-----数据卷(Docker数据卷管理、卷插件)

二、卷插件

convoy卷插件实现
支持三种运行方式:devicemapper、NFS、EBS。
以下实验使用nfs方式。
convoy卷插件安装

1.跨节点数据同步

[root@server1 ~]# yum install -y nfs-utils.x86_64 
[root@server1 ~]# mkdir /mnt/nfs
[root@server1 ~]# vim /etc/exports
[root@server1 ~]# cat /etc/exports
/mnt/nfs        *(rw,no_root_squash)
[root@server1 ~]# chmod 777 /mnt/nfs/
[root@server1 ~]# systemctl start nfs

14.Docker(五)-----数据卷(Docker数据卷管理、卷插件)
14.Docker(五)-----数据卷(Docker数据卷管理、卷插件)
14.Docker(五)-----数据卷(Docker数据卷管理、卷插件)

[root@server1 ~]# yum install -y nfs-utils.x86_64 
[root@server2 ~]# mkdir /mnt/nfs
[root@server2 ~]# mount 172.25.15.1:/mnt/nfs/ /mnt/nfs/		#挂载到server1/mnt/nfs/目录下
[root@server2 ~]# df

14.Docker(五)-----数据卷(Docker数据卷管理、卷插件)

2.目录共享

14.Docker(五)-----数据卷(Docker数据卷管理、卷插件)
14.Docker(五)-----数据卷(Docker数据卷管理、卷插件)

3.创建卷 使用卷

##下载convoy
[root@server1 ~]# lftp 172.25.15.250 
lftp 172.25.15.250:~> cd pub/docker/
lftp 172.25.15.250:/pub/docker> get convoy.tar.gz 
11693031 bytes transferred                         
lftp 172.25.15.250:/pub/docker> exit
[root@server1 ~]# ls
auth           docker        harbor-offline-installer-v1.10.1.tgz  rhel7.tar
busybox.tar    game2048.tar  mario.tar
convoy.tar.gz  harbor        nginx.tar

[root@server1 ~]# scp convoy.tar.gz 172.25.15.2:
root@172.25.15.2's password: 
convoy.tar.gz                                 100%   11MB  86.9MB/s   00:00    
[root@server1 ~]# 

14.Docker(五)-----数据卷(Docker数据卷管理、卷插件)

server1

[root@server1 ~]# tar zxf convoy.tar.gz 解压插件
[root@server1 ~]# cd convoy/
[root@server1 convoy]# mv convoy* /usr/local/bin/ 将convoy的二进制文件移动到系统的环境变量里
[root@server1 convoy]# convoy daemon --drivers vfs --driver-opts vfs.path=/mnt/nfs &		驱动

[root@server1 convoy]# mkdir -p /etc/docker/plugins/
[root@server1 convoy]# echo "unix:///var/run/convoy/convoy.sock" > /etc/docker/plugins/convoy.spec
[root@server1 convoy]# convoy create vol1		创建一个逻辑卷
[root@server1 convoy]# convoy list		查看信息

14.Docker(五)-----数据卷(Docker数据卷管理、卷插件)
14.Docker(五)-----数据卷(Docker数据卷管理、卷插件)

server2

[root@server2 ~]# tar zxf convoy.tar.gz
[root@server2 ~]# cd convoy/
[root@server2 convoy]# mv convoy* /usr/local/bin/
[root@server2 convoy]# convoy daemon --drivers vfs --driver-opts vfs.path=/mnt/nfs &

[root@server2 convoy]# mkdir -p /etc/docker/plugins/
[root@server2 convoy]# echo "unix:///var/run/convoy/convoy.sock" > /etc/docker/plugins/convoy.spec
[root@server2 convoy]# convoy create vol1

[root@server2 convoy]# convoy list

14.Docker(五)-----数据卷(Docker数据卷管理、卷插件)
14.Docker(五)-----数据卷(Docker数据卷管理、卷插件)

server1上拉起容器同步数据到server2

[root@server1 convoy]# docker run -d --name demo -v vol1:/usr/share/nginx/html nginx
	
[root@server1 convoy]# docker ps
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS               NAMES
cf1fcff91138        nginx               "/docker-entrypoint.…"   6 seconds ago       Up 6 seconds        80/tcp              demo
[root@server1 convoy]# cd /mnt/nfs/vol1/
[root@server1 vol1]# echo www.westos.org > index.html
[root@server1 vol1]# curl 172.17.0.2
www.westos.org

[root@server2 vol1]# cd /mnt/nfs/vol1/
[root@server2 vol1]# ls
50x.html  index.html
[root@server2 vol1]# cat index.html 
www.westos.org

14.Docker(五)-----数据卷(Docker数据卷管理、卷插件)
14.Docker(五)-----数据卷(Docker数据卷管理、卷插件)
14.Docker(五)-----数据卷(Docker数据卷管理、卷插件)
14.Docker(五)-----数据卷(Docker数据卷管理、卷插件)

删除piugins

[root@server2 volumes]# ps ax
[root@server2 vol1]# cd /etc/docker/plugins/
[root@server2 plugins]# ls
convoy.spec
[root@server2 plugins]# rm -fr *
[root@server2 plugins]# cd /var/lib/docker/
[root@server2 docker]# cd volumes/
[root@server2 volumes]# ls
metadata.db
[root@server2 volumes]# rm -rf metadata.db 
[root@server2 volumes]# systemctl restart docker.service 

14.Docker(五)-----数据卷(Docker数据卷管理、卷插件)

上一篇:SaltStack部署


下一篇:docker简介(安装与运行)