Rumah  >  Artikel  >  Operasi dan penyelenggaraan  >  Pengenalan terperinci kepada pengurusan volum data docker & plug-in volum konvoi (contoh terperinci)

Pengenalan terperinci kepada pengurusan volum data docker & plug-in volum konvoi (contoh terperinci)

WBOY
WBOYke hadapan
2022-01-21 18:15:431880semak imbas

Artikel ini membawakan anda pengetahuan yang berkaitan tentang pengurusan volum data dan pemalam volum konvoi dalam docker.

Pengenalan terperinci kepada pengurusan volum data docker & plug-in volum konvoi (contoh terperinci)

1 Apakah itu volum data Docker

  • Volume data ialah direktori yang ditetapkan khas dalam satu atau lebih bekas yang boleh Pintas sistem fail kesatuan.
    Jilid direka bentuk untuk kegigihan data dan bebas daripada kitaran hayat bekas.

  • Oleh itu, Docker tidak akan memadamkan volum data secara automatik apabila bekas dipadamkan, begitu juga volum "kutipan sampah" secara aktif yang tidak lagi digunakan oleh bekas.

  • Kewujudan volum data adalah untuk menjadikan data bekas itu berterusan dan untuk membolehkan perkongsian data antara bekas.

  • Dalam istilah orang awam, volum data bekas docker boleh dilihat sebagai cakera USB yang biasa digunakan dalam kehidupan kita Ia wujud dalam satu atau lebih bekas dan dipasang pada bekas oleh docker. , tetapi tidak tergolong dalam sistem fail kesatuan, Docker tidak akan memadamkan volum data yang dipasang apabila bekas dipadamkan.

2. Mengapa menggunakan volum data

sistem fail berlapis docker:

  • prestasi buruk
  • kitaran hayat Sama seperti bekas

volum data docker:

  • lekapkan ke hos, memintas sistem fail hierarki
  • Sama seperti prestasi cakera hos, bekas dipadam Masih dikekalkan selepas
  • Hanya cakera setempat, tidak boleh dipindahkan dengan bekas

3 volum data Docker menyediakan dua jilid

bind mount

ialah. untuk melekapkan direktori atau fail pada hos ke dalam bekas

  • Ia adalah intuitif, cekap dan mudah difahami.
  • Gunakan pilihan -v untuk menentukan laluan, format:
  • bind mount Kebenaran lalai ialah baca dan tulis rw, anda boleh menentukan ro baca sahaja apabila melekap.
  • Laluan yang ditentukan oleh pilihan -v, jika ia tidak wujud, akan dibuat secara automatik apabila dipasang.

volum terurus docker

bind mount mesti menentukan laluan sistem fail hos, yang mengehadkan kemudahalihan.
Kelantangan terurus Docker tidak perlu menentukan sumber pelekap

Perbandingan antara bind mount dan volum terurus docker

Mata yang sama: kedua-duanya adalah laluan dalam sistem fail hos

Perbezaan:
Pengenalan terperinci kepada pengurusan volum data docker & plug-in volum konvoi (contoh terperinci)

4.bind mount application

docker network prune 
docker network ls
docker run -d --name vm1 -v /opt/website:/usr/share/nginx/html nginx
docker ps

Pengenalan terperinci kepada pengurusan volum data docker & plug-in volum konvoi (contoh terperinci)

docker inspect vm1	#查看到ip为172.17.0.2
curl 172.17.0.2

Menjumpai halaman 403:
Pengenalan terperinci kepada pengurusan volum data docker & plug-in volum konvoi (contoh terperinci)

cd /opt/website/
ls	#发现没有默认发布页面
echo www.westos.org > index.html
curl 172.17.0.2

Apabila anda melawat nginx pada masa ini, anda akan melihat kandungan www.westos.org:
Pengenalan terperinci kepada pengurusan volum data docker & plug-in volum konvoi (contoh terperinci)
Anda juga boleh menentukan kebenaran semasa memasang :

docker run -it --rm -v /opt/website:/data1 -v /etc/passwd:/data2/passwd:ro busybox

Anda boleh melihat bahawa kebenaran lalai ialah rw baca dan tulis, jadi kami boleh menukar kandungan index.html dan selepas menentukan passwd sebagai baca sahaja, kami tidak boleh mengubah suai kandungannya dan boleh hanya baca
Pengenalan terperinci kepada pengurusan volum data docker & plug-in volum konvoi (contoh terperinci)

5.docker managed volume

Lihat volum terurus sedia ada:

docker volume ls

Kadangkala kami mempunyai baki volum terurus selepas memadamkan bekas . Inilah sebabnya mengapa kita perlu membersihkannya, jika tidak, ia akan menggunakan sumber kita:

docker volume prune 
docker volume ls

Pengenalan terperinci kepada pengurusan volum data docker & plug-in volum konvoi (contoh terperinci)

docker run -d --name registry registry
cd /var/lib/docker/volumes/
ls
docker history registry:latest

Pengenalan terperinci kepada pengurusan volum data docker & plug-in volum konvoi (contoh terperinci)
Kelantangan Docker boleh digunakan untuk menyimpan kandungan bekas Salin kandungan ke titik pelekap:

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

Pengenalan terperinci kepada pengurusan volum data docker & plug-in volum konvoi (contoh terperinci)

docker inspect vm2
curl 172.17.0.3	#nginx默认发布页

Pengenalan terperinci kepada pengurusan volum data docker & plug-in volum konvoi (contoh terperinci)

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

Pengenalan terperinci kepada pengurusan volum data docker & plug-in volum konvoi (contoh terperinci)

6. Pengenalan kepada pemalam volum docker

Volume docker menggunakan pemacu setempat secara lalai, yang hanya boleh wujud pada mesin hos
Cross-host volum perlu menggunakan pemacu pihak ketiga
Anda boleh melihat pautan:
https://docs.docker.com/engine/extend/legacy_plugins/#volume-plugins
Pengenalan terperinci kepada pengurusan volum data docker & plug-in volum konvoi (contoh terperinci)

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就是一个中介服务。
Pengenalan terperinci kepada pengurusan volum data docker & plug-in volum konvoi (contoh terperinci)
server2:

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

Pengenalan terperinci kepada pengurusan volum data docker & plug-in volum konvoi (contoh terperinci)
测试:
在server2中:

cd /nfs/
touch file

Pengenalan terperinci kepada pengurusan volum data docker & plug-in volum konvoi (contoh terperinci)
在server1中:

cd /nfs/
ls	#查看到file

Pengenalan terperinci kepada pengurusan volum data docker & plug-in volum konvoi (contoh terperinci)
说明两个节点的/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

Pengenalan terperinci kepada pengurusan volum data docker & plug-in volum konvoi (contoh terperinci)
在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

Pengenalan terperinci kepada pengurusan volum data docker & plug-in volum konvoi (contoh terperinci)
step3 创建卷:

docker volume ls
convoy create vol1

Pengenalan terperinci kepada pengurusan volum data docker & plug-in volum konvoi (contoh terperinci)
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默认发布页

Pengenalan terperinci kepada pengurusan volum data docker & plug-in volum konvoi (contoh terperinci)
Pengenalan terperinci kepada pengurusan volum data docker & plug-in volum konvoi (contoh terperinci)

cd /nfs/
cd vol1/
echo hello convoy > index.html
curl 172.17.0.2

Pengenalan terperinci kepada pengurusan volum data docker & plug-in volum konvoi (contoh terperinci)
在server1中数据也同步了:

cd /nfs/
cd vol1/
cat index.html

Pengenalan terperinci kepada pengurusan volum data docker & plug-in volum konvoi (contoh terperinci)
在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	#进入该目录,是空的

Pengenalan terperinci kepada pengurusan volum data docker & plug-in volum konvoi (contoh terperinci)
使用卷:

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

Pengenalan terperinci kepada pengurusan volum data docker & plug-in volum konvoi (contoh terperinci)
补充几条命令:

docker container prune	#删除停止的容器
docker volume prune	#删除没有被使用的卷

推荐学习:《docker视频教程

Atas ialah kandungan terperinci Pengenalan terperinci kepada pengurusan volum data docker & plug-in volum konvoi (contoh terperinci). Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Artikel ini dikembalikan pada:csdn.net. Jika ada pelanggaran, sila hubungi admin@php.cn Padam