搜尋
首頁運維Docker詳細介紹docker資料磁碟區管理&convoy磁碟區外掛程式(實例詳解)

本篇文章為大家帶來了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。如有侵權,請聯絡admin@php.cn刪除
Linux和Docker:不同Linux發行版的DockerLinux和Docker:不同Linux發行版的DockerApr 19, 2025 am 12:10 AM

在Ubuntu、CentOS和Debian上安裝和使用Docker的方法各有不同。 1)Ubuntu:使用apt包管理器,命令為sudoapt-getupdate&&sudoapt-getinstalldocker.io。 2)CentOS:使用yum包管理器,需添加Docker倉庫,命令為sudoyuminstall-yyum-utils&&sudoyum-config-manager--add-repohttps://download.docker.com/lin

掌握Docker:Linux用戶指南掌握Docker:Linux用戶指南Apr 18, 2025 am 12:08 AM

在Linux上使用Docker可以提高開發效率和簡化應用部署。 1)拉取Ubuntu鏡像:dockerpullubuntu。 2)運行Ubuntu容器:dockerrun-itubuntu/bin/bash。 3)創建包含nginx的Dockerfile:FROMubuntu;RUNapt-getupdate&&apt-getinstall-ynginx;EXPOSE80。4)構建鏡像:dockerbuild-tmy-nginx.。 5)運行容器:dockerrun-d-p8080:80

Linux上的Docker:應用和用例Linux上的Docker:應用和用例Apr 17, 2025 am 12:10 AM

Docker在Linux上可以簡化應用部署和管理。 1)Docker是容器化平台,將應用及其依賴打包進輕量、可移植容器。 2)在Linux上,Docker利用cgroups和namespaces實現容器隔離和資源管理。 3)基本用法包括拉取鏡像和運行容器,高級用法如DockerCompose可定義多容器應用。 4)調試常用dockerlogs和dockerexec命令。 5)性能優化可通過多階段構建減小鏡像大小,保持Dockerfile簡潔是最佳實踐。

Docker:用於可移植性和可擴展性的容器化應用程序Docker:用於可移植性和可擴展性的容器化應用程序Apr 16, 2025 am 12:09 AM

Docker是一種基於Linux容器技術的工具,用於打包、分發和運行應用,提升應用的可移植性和可擴展性。 1)通過dockerbuild和dockerrun命令,可以構建和運行Docker容器。 2)DockerCompose用於定義和運行多容器的Docker應用,簡化微服務管理。 3)使用多階段構建可以優化鏡像大小,提升應用啟動速度。 4)查看容器日誌是調試容器問題的有效方法。

docker怎麼啟動容器docker怎麼啟動容器Apr 15, 2025 pm 12:27 PM

Docker 容器啟動步驟:拉取容器鏡像:運行 "docker pull [鏡像名稱]"。創建容器:使用 "docker create [選項] [鏡像名稱] [命令和參數]"。啟動容器:執行 "docker start [容器名稱或 ID]"。檢查容器狀態:通過 "docker ps" 驗證容器是否正在運行。

docker怎麼查看日誌docker怎麼查看日誌Apr 15, 2025 pm 12:24 PM

查看 Docker 日誌的方法包括:使用 docker logs 命令,例如:docker logs CONTAINER_NAME使用 docker exec 命令運行 /bin/sh 並查看日誌文件,例如:docker exec -it CONTAINER_NAME /bin/sh ; cat /var/log/CONTAINER_NAME.log使用 Docker Compose 的 docker-compose logs 命令,例如:docker-compose -f docker-com

docker容器名稱怎麼查docker容器名稱怎麼查Apr 15, 2025 pm 12:21 PM

可以通過以下步驟查詢 Docker 容器名稱:列出所有容器(docker ps)。篩選容器列表(使用 grep 命令)。獲取容器名稱(位於 "NAMES" 列中)。

docker怎麼創建容器docker怎麼創建容器Apr 15, 2025 pm 12:18 PM

在 Docker 中創建容器: 1. 拉取鏡像: docker pull [鏡像名] 2. 創建容器: docker run [選項] [鏡像名] [命令] 3. 啟動容器: docker start [容器名]

See all articles

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

AI Hentai Generator

AI Hentai Generator

免費產生 AI 無盡。

熱工具

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

Dreamweaver Mac版

Dreamweaver Mac版

視覺化網頁開發工具

Atom編輯器mac版下載

Atom編輯器mac版下載

最受歡迎的的開源編輯器

SublimeText3 Mac版

SublimeText3 Mac版

神級程式碼編輯軟體(SublimeText3)

MinGW - Minimalist GNU for Windows

MinGW - Minimalist GNU for Windows

這個專案正在遷移到osdn.net/projects/mingw的過程中,你可以繼續在那裡關注我們。 MinGW:GNU編譯器集合(GCC)的本機Windows移植版本,可自由分發的導入函式庫和用於建置本機Windows應用程式的頭檔;包括對MSVC執行時間的擴展,以支援C99功能。 MinGW的所有軟體都可以在64位元Windows平台上運作。