首頁> 運維> Docker> 主體

詳細介紹docker資料磁碟區管理&convoy磁碟區外掛程式(實例詳解)

WBOY
發布: 2022-01-21 18:16:01
轉載
1791 人瀏覽過

本篇文章為大家帶來了docker中資料捲管理和convoy卷插件的相關知識,希望對大家有幫助。

詳細介紹docker資料磁碟區管理&convoy磁碟區外掛程式(實例詳解)

1.什麼是Docker資料卷

  • #資料卷是一個或多個容器中專門指定的目錄,它能夠繞過聯合檔案系統。
    卷被設計用作資料持久化、並且是獨立於容器的生命週期的。

  • 因此,Docker不會在刪除容器時自動刪除資料捲捲,也不會主動「垃圾回收」掉容器不再使用的捲。

  • 資料卷的存在就是想要讓的容器的資料持久化存在,而且可以實現容器之間的資料共享。

  • 通俗地來說,docker容器資料卷可以看成使我們生活中常用的u盤,它存在於一個或多個的容器中,由docker掛載到容器,但不屬於聯合檔案系統,Docker不會在容器刪除時刪除其掛載的資料卷。

2.為什麼要用資料卷

docker分層檔案系統:

    ##效能差
  • 生命週期與容器相同
docker資料卷:

    mount到主機中,繞過分層檔案系統
  • 和主機磁碟效能相同,容器刪除後來仍保留
  • 僅限本機磁碟,不能隨容器遷移
3.docker資料卷提供兩種磁碟區

bind mount

#是將主機上的目錄或檔案mount到容器裡

    使用直覺高效,易於理解。
  • 使用 -v 選項指定路徑,格式 :
  • bind mount 預設權限是讀寫rw,可以在掛載時指定唯讀ro。
  • -v選項指定的路徑,如果不存在,掛載時會自動建立。
docker managed volume

bind mount必須指定host檔案系統路徑,限制了移植性。docker managed volume 不需要指定mount來源

bind mount 和docker managed volume對比

相同點:兩者都是host檔案系統中的某個路徑

不同點:


詳細介紹docker資料磁碟區管理&convoy磁碟區外掛程式(實例詳解)

4.bind mount應用

docker network prune docker network ls docker run -d --name vm1 -v /opt/website:/usr/share/nginx/html nginx docker ps
登入後複製

詳細介紹docker資料磁碟區管理&convoy磁碟區外掛程式(實例詳解)

docker inspect vm1 #查看到ip为172.17.0.2 curl 172.17.0.2
登入後複製
發現是403頁:


詳細介紹docker資料磁碟區管理&convoy磁碟區外掛程式(實例詳解)

cd /opt/website/ ls #发现没有默认发布页面 echo www.westos.org > index.html curl 172.17.0.2
登入後複製
此時存取nginx,就有www.westos.org內容了:


詳細介紹docker資料磁碟區管理&convoy磁碟區外掛程式(實例詳解)掛載時還可以指定權限:

docker run -it --rm -v /opt/website:/data1 -v /etc/passwd:/data2/passwd:ro busybox
登入後複製
可以看到預設權限為rw讀寫,所以我們可以更改index.html的內容;而指定passwd為唯讀後,我們就無法修改其內容,只能讀


詳細介紹docker資料磁碟區管理&convoy磁碟區外掛程式(實例詳解)

5. docker managed volume

查看現有的管理卷:

docker volume ls
登入後複製
我們有些是時候在刪除了容器後會有殘餘的管理卷存在,這是我們就需要去清理它,不然會佔用我們的資源:

docker volume prune docker volume ls
登入後複製

詳細介紹docker資料磁碟區管理&convoy磁碟區外掛程式(實例詳解)

docker run -d --name registry registry cd /var/lib/docker/volumes/ ls docker history registry:latest
登入後複製

詳細介紹docker資料磁碟區管理&convoy磁碟區外掛程式(實例詳解)# 透過docker volume可以將容器內的內容複製到掛載點:

docker run -d --name vm2 -v /usr/share/nginx/html nginx cd /var/lib/docker/volumes/ ls cd 674c999f99b7b524d8f5769b65cb5411d11e3fa855da695a5fdd3494e4342d89/ cd _data/ ls #查看到默认发布目录被复制到了这里
登入後複製

詳細介紹docker資料磁碟區管理&convoy磁碟區外掛程式(實例詳解)

docker inspect vm2 curl 172.17.0.3 #nginx默认发布页
登入後複製

詳細介紹docker資料磁碟區管理&convoy磁碟區外掛程式(實例詳解)

echo hello docker! > index.html curl 172.17.0.3 #可以直接在挂载的目录修改默认发布页
登入後複製

詳細介紹docker資料磁碟區管理&convoy磁碟區外掛程式(實例詳解)

#6.docker磁碟區外掛程式簡介

docker磁碟區預設使用的是local類型的驅動,只能存在宿主機,跨主機的volume就需要使用第三方的驅動
,可以查看連結:
https://docs.docker.com/engine/extend /legacy_plugins/#volume-plugins

詳細介紹docker資料磁碟區管理&convoy磁碟區外掛程式(實例詳解)#

Docker Plugin 是以Web Service的服务运行在每一台Docker Host上的,通过HTTP协议传输RPC风格的JSON数据完成通信。Plugin的启动和停止,并不归Docker管理,Docker Daemon依靠在缺省路径下查找Unix Socket文件,自动发现可用的插件。
当客户端与Daemon交互,使用插件创建数据卷时,Daemon会在后端找到插件对应的 socket 文件,建立连接并发起相应的API请求,最终结合Daemon自身的处理完成客户端的请求。

7.convoy卷插件

convoy卷插件支持三种运行方式:devicemapper、NFS、EBS。下面的实验以nfs的运行方式来演示

实验目的:在server1和2底层用nfs来实现数据共享

step1 首先在server1和server2上搭建nfs文件系统:

server1:

yum install -y nfs-utils systemctl start rpcbind mkdir /nfs #创建共享目录 chmod 777 /nfs #修改共享目录权限 vim /etc/exports #编辑共享目录文件,否则将不会被共享出去 /nfs *(rw,no_root_squash) systemctl start nfs
登入後複製

注意:rpcbind服务必须是开启的。这是因为:他是一个RPC服务,主要是在nfs共享时候负责通知客户端,服务器的nfs端口号的。简单理解rpc就是一个中介服务。
詳細介紹docker資料磁碟區管理&convoy磁碟區外掛程式(實例詳解)
server2:

yum install -y nfs-utils systemctl start nfs-server.service showmount -e server1 #寻找server1的挂载目录 mkdir /nfs mount server1:/nfs /nfs df
登入後複製

詳細介紹docker資料磁碟區管理&convoy磁碟區外掛程式(實例詳解)
测试:
在server2中:

cd /nfs/ touch file
登入後複製

詳細介紹docker資料磁碟區管理&convoy磁碟區外掛程式(實例詳解)
在server1中:

cd /nfs/ ls #查看到file
登入後複製

詳細介紹docker資料磁碟區管理&convoy磁碟區外掛程式(實例詳解)
说明两个节点的/nfs实现同步了

step2 配置convoy环境:
docker官方只提供了卷插件的api,开发者可以根据实际需求定制卷插件驱动。

在server1中:

tar zxf convoy.tar.gz cd convoy/ cp convoy* /usr/local/bin/ #将二进制文件加入到PATH路径 mkdir /etc/docker/plugins #创建docker的插件目录 convoy daemon --drivers vfs --driver-opts vfs.path=/nfs &> /dev/null & cd /nfs ls
登入後複製

注意:第一次运行上面的convoy daemon命令的时候,会在/nfs目录下生成一个config文件夹,这个文件夹不要删除,不然客户端的convoy命令就会用不了

echo "unix:///var/run/convoy/convoy.sock" > /etc/docker/plugins/convoy.spec #将convoy守护进程开启生成的.sock文件放入/etc/docker/plugins目录下的convoy.spec文件中,docker就可以识别。(其中convoy.spec文件之前是不存在的) cat /etc/docker/plugins/convoy.spec
登入後複製

詳細介紹docker資料磁碟區管理&convoy磁碟區外掛程式(實例詳解)
在server2中同样配置convoy环境:

scp -r server1:convoy . cd convoy/ cp convoy* /usr/local/bin/ #将二进制文件加入到PATH路径 mkdir /etc/docker/plugins #创建docker的插件目录 echo "unix:///var/run/convoy/convoy.sock" > /etc/docker/plugins/convoy.spec convoy daemon --drivers vfs --driver-opts vfs.path=/nfs &> /dev/null & cd /nfs ls
登入後複製

詳細介紹docker資料磁碟區管理&convoy磁碟區外掛程式(實例詳解)
step3 创建卷:

docker volume ls convoy create vol1
登入後複製

詳細介紹docker資料磁碟區管理&convoy磁碟區外掛程式(實例詳解)
step4 操作卷:

在server2中运行容器,指定卷为刚才新创建的vol1:

docker run -it --name vm1 -v vol1:/usr/share/nginx/html nginx docker ps docker inspect vm1 curl 172.17.0.2 #nginx默认发布页
登入後複製

詳細介紹docker資料磁碟區管理&convoy磁碟區外掛程式(實例詳解)
詳細介紹docker資料磁碟區管理&convoy磁碟區外掛程式(實例詳解)

cd /nfs/ cd vol1/ echo hello convoy > index.html curl 172.17.0.2
登入後複製

詳細介紹docker資料磁碟區管理&convoy磁碟區外掛程式(實例詳解)
在server1中数据也同步了:

cd /nfs/ cd vol1/ cat index.html
登入後複製

詳細介紹docker資料磁碟區管理&convoy磁碟區外掛程式(實例詳解)
在ser1中也可以运行容器,也可以用到共享的数据卷

说明:docker引擎默认扫描 /etc/docker/plugins目录中的convoy.spec—>访问/run/convoy/convoy.sock文件—>发起响应的api请求—>把数据写入vol1中—>底层通过nfs进行主机间的数据同步

如何删除通过nfs创建的数据卷,让之后创建的数据卷都是本地的呢?

删除卷:

convoy delete vol1
登入後複製

实现本地驱动:

cd /etc/docker/plugins/ mv convoy.spec /mnt systemctl restart docker
登入後複製

创建卷:

docker volume create vol1 ls cd volumes/ ls #可以看到vol1,默认创建在这个目录下 cd vol1/ ls cd _data/ ls #进入该目录,是空的
登入後複製

詳細介紹docker資料磁碟區管理&convoy磁碟區外掛程式(實例詳解)
使用卷:

docker run -d --name vm1 -v vol1:/usr/share/nginx/html nginx docker ps ls #看到nginx默认发布目录被挂到这里了
登入後複製

詳細介紹docker資料磁碟區管理&convoy磁碟區外掛程式(實例詳解)
补充几条命令:

docker container prune #删除停止的容器 docker volume prune #删除没有被使用的卷
登入後複製

推荐学习:《docker视频教程

以上是詳細介紹docker資料磁碟區管理&convoy磁碟區外掛程式(實例詳解)的詳細內容。更多資訊請關注PHP中文網其他相關文章!

相關標籤:
來源:csdn.net
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
最新問題
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板
關於我們 免責聲明 Sitemap
PHP中文網:公益線上PHP培訓,幫助PHP學習者快速成長!