在docker中,對接外部存儲我們通常需要docker的資料卷插件。docker中簡要可分為兩類 docker卷插件和CSI插件,其中docker卷插件分為兩個版本,舊版的傳統插件(legacy plugin/non-managed plugin)和新版的托管插件(managed plugin)。下面分章節讨論這幾個問題
一、傳統插件(legacy plugin/non-managed plugin)
傳統插件推出初期得到了各大廠商支援。也有一些開源支援。下面是常見的插件
根據官網整理
插件 | 說明 | 發展現狀 |
Azure File Storage plugin | 允許您裝載微軟Azure的檔案存儲使用SMB 3.0協定将共享作為卷添挂載到Docker容器。 | |
BeeGFS Volume Plugin | 一個開源卷插件,用于在BeeGFS并行檔案系統中建立持久卷。 | 2018年停止更新 |
Blockbridge plugin | 提供對基于容器的持久存儲選項的可擴充集合的通路的卷插件。它支援單主機和多主機Docker環境,具有租戶隔離、自動配置、加密、安全删除、快照和QoS等功能。 | |
Contiv Volume Plugin | 一個開源卷插件,提供多租戶、持久性、分布式存儲和基于意圖的使用。它支援Ceph和NFS協定。 | 2016年停止更新 |
Convoy plugin | 用于各種存儲後端(包括裝置映射器和NFS)的卷插件。它是一個用Go語言編寫的簡單的獨立可執行檔案,提供了一個架構來支援特定于供應商的擴充,如快照、備份和恢複。 | 2018年停止更新 |
DigitalOcean Block Storage plugin | DigitalOcean的塊存儲解決方案。通過自動将給定的塊存儲卷附加到DigitalOcean droplet,并使該卷的内容可用于在該droplet上運作的Docker容器,進而将資料導入Docker生态系統。 | |
DRBD plugin | 通過DRBD副本提供高可用存儲的卷插件,寫入Docker卷的資料将在DRBD節點的群集中複制。 | |
Flocker plugin | 為Docker提供多主機可移植卷的卷插件,使您能夠運作資料庫和其他有狀态容器,并在計算機群集中移動它們。 | |
Fuxi Volume Plugin | 作為OpenStack Kuryr項目的一部分開發的卷插件,通過利用OpenStack塊存儲服務Cinder實作Docker卷插件API。 | |
gce-docker plugin | 一個能夠附加、格式化和挂載谷歌GCE的持久化磁盤卷插件 | |
GlusterFS plugin | 使用GlusterFS為Docker提供多主機卷管理的卷插件。 | |
Horcrux Volume Plugin | 一個用Go語言編寫,支援SCP minio Amazon S3協定的插件,它允許按需,版本控制通路您的資料。它是一個開源插件, | 2017年停止更新 |
HPE 3Par Volume Plugin | 支援HPE 3Par和StoreVirtual iSCSI存儲陣列的卷插件。 | |
Infinit volume plugin | 可以使用Docker輕松安裝和管理Infinit卷的一個卷插件。 | |
IPFS Volume Plugin | 一個運作挂載ipfs檔案系統作為卷的開放源代碼卷插件。 | |
Keywhiz plugin | 使用Keywhiz作為中央存儲庫提供憑據和機密管理的插件。 | |
Local Persist Plugin | 擴充預設的卷插件。它允許您在主機上的任何位置指定裝載點,即使通過删除卷指令 docker volume rm删除卷,檔案依然存在在主機上。 | 2016年停止更新 |
NetApp Plugin (nDVP) | 一個卷插件,可為NetApp存儲産品組合提供與Docker生态系統的直接內建。nDVP産品包支援從存儲平台到Docker主機的存儲資源調配和管理,并提供了一個強大的架構,可用于在将來添加其他平台。 | |
Netshare plugin | 一個卷插件,為NFS 3/4、AWS EFS和CIFS檔案系統提供卷管理。 | 2019年停止更新 |
Nimble Storage Volume Plugin | 與Nimble Storage Unified Flash Fabric陣列內建的卷插件。該插件為Docker管理者提取陣列卷功能,以允許自行配置安全的多租戶卷和克隆。 | |
OpenStorage Plugin | 支援群集的卷插件,可為檔案和塊存儲解決方案提供卷管理。 它實作了一個供應商中立的規範,用于實作CoS、加密和快照等擴充。它有一些基于FUSE、NFS、NBD和EBS的示例驅動程式。 | |
Portworx Volume Plugin | 一個卷插件,可将任何伺服器轉變為橫向擴充的聚合計算/存儲節點,使用可與任何Docker排程程式配合使用的無共享存儲後端,跨任何節點提供容器粒度存儲和高可用性卷。 | 2016年停止更新 |
Quobyte Volume Plugin | 将Docker連接配接到的卷插件 Quobyte 配額的資料中心檔案系統,這是一個通用的可擴充和容錯存儲平台。 | |
REX-Ray plugin | 一個用Go語言編寫的卷插件,為許多平台提供進階存儲功能,包括VirtualBox、EC2、Google計算引擎、OpenStack和EMC。 | 2019年停止更新,依賴問題無法安裝 |
Virtuozzo Storage and Ploop plugin | 支援Virtuozzo Storage分布式雲檔案系統和ploop裝置的卷插件。 | |
VMware vSphere Storage Plugin | 使客戶能夠滿足vSphere環境中Docker容器的持久存儲要求。 |
在自建叢集裡,一般考慮支援的存儲協定為nfs、s3、cephfs
上述符合條件的開源項目如Rex-Ray、Netshare幾乎都停止更新好幾年了。現在再用這些插件也不太現實。
二、托管插件(managed plugin)
官網對于這個新插件的介紹非常簡陋,執行個體裡的插件也就隻有vieux/sshfs和sample-volume-plugin兩個無關痛癢的插件
從dockerhub搜尋nfs插件:https://hub.docker.com/search?q=nfs&type=plugin
結果第一條為trajano/nfs-volume-plugin 這是一個托管插件。star數比較高,不過已經3年沒更新了。
搜尋的弊端是,搜尋選項裡沒有區分傳統插件和托管插件,雲廠商的插件比較難找,缺乏相關的使用案例。
三、CSI插件
目前docker 23.0.0開始支援CSI插件,目前功能還沒有完善。目前幾乎還不支援docker swarm叢集使用CSI插件。
相關的使用demo可以參考:https://github.com/olljanat/csi-plugins-for-docker-swarm
傳統插件、托管插件和CSI插件的安裝指令都是
docker plugin install [插件tag]
四、nfs挂載和使用
在自建叢集中,nfs是最常用的挂載方式。
目前docker是支援nfs卷的挂載和使用的,預設的local driver插件就支援,這個插件已經内置,不需要再安裝。
1.docker volume create方式
建立指令
docker volume create --driver local \
--opt type=nfs \
--opt o=addr=[ip-address],rw \
--opt device=:[path-to-directory] \
[volume-name]
安裝nfs用戶端
apt install nfs-common
挂載
docker run -d -it \
--name [container-name] \
--mount source=[volume-name],target=[mount-point]\
[image-name]
2.yaml檔案方式
編輯docker-compose.yml
version: "3.2"
services:
[service-name]:
image: [docker-image]
ports:
- "[port]:[port]"
volumes:
- type: volume
source: [volume-name]
target: /nfs
volume:
nocopy: true
volumes:
[volume-name]:
driver_opts:
type: "nfs"
o: "addr=[ip-address],nolock,soft,rw"
device: ":[path-to-directory]"