天天看點

在linux docker容器中挂載使用雲存儲網關

背景

阿裡雲雲存儲網關是一個讓使用者通過SMB/NFS協定通路阿裡雲對象存儲(OSS)的産品,使用者通過部署雲存儲網關,并在用戶端挂載雲存儲網關提供的挂載點,就可以輕松的通路自己在OSS 對象存儲桶(bucket)中的資料,非常的友善。 那麼如果使用者在自己的ECS中部署了容器環境,如果在容器中直接通路網關的共享呢?本文就将介紹下,在linux的docker環境中如何挂載雲存儲網關的NFS共享。

步驟

首先,讓我們準備好存儲網關的共享,我們可以根據

檔案網關快速入門

的介紹來先建立一個檔案網關,并綁定需要通路的oss bucket,在這個例子中,我們将共享名稱取名為docker-volume。

接下來,我們到我們的linux用戶端當中,首先使用showmount 指令,檢視linux用戶端是否可以通路到雲存儲網關的nfs 共享。

# 我們以nas共享IP位址192.168.0.76為例,可以看到showmount 輸出了
# /docker-volume (everyone) 這個我們的共享名稱的目錄

# showmount -e 192.168.0.76 
Export list for 192.168.0.76:
/docker-volume (everyone)           

确定用戶端通路共享沒問題後,就可以為docker配置雲存儲網關共享作為後端存儲資源了,我們運作下面的指令來基于雲存儲網關的nfs共享來建立一個docker volume:

docker volume create --driver local \
    --opt type=nfs \
    --opt o=addr=192.168.0.76,rw \
    --opt device=:/docker-volume \
    sgw-docker
               

上邊的指令中,--opt type=nfs 表示我們是建立一個nfs類型的 docker volume, ----opt o=addr=後面是雲存儲網關提供的共享位址,在這個例子中是192.168.0.76, rw代表是以讀寫的方式挂載這個共享,使用者也可以根據需要将其修改為隻讀模式(ro) --opt device=: 後面就是雲存儲網關提供的挂載路徑,在這個例子中,我們在雲存儲網關控制台配置的共享路徑為/docker-volume。

運作docker volume create成功後,一個基于雲存儲網關nfs共享的docker volume就建立成功了,我們可以使用docker volume inspect指令來檢查我們的配置, 可以看到我們取名為sgw-docker 的這個docker volume的詳細配置資訊。

# docker volume inspect sgw-docker
[
    {
        "CreatedAt": "2020-09-21T16:24:31+08:00",
        "Driver": "local",
        "Labels": {},
        "Mountpoint": "/var/lib/docker/volumes/sgw-docker/_data",
        "Name": "sgw-docker",
        "Options": {
            "device": ":/docker-volume",
            "o": "addr=192.168.0.76,rw",
            "type": "nfs"
        },
        "Scope": "local"
    }
]           

接下來,我們就可以在啟動docker容器的時候指定這個docker volume了,我們以一個centos的docker 執行個體為例:

docker run -v sgw-docker:/data -ti centos:latest  /bin/bash           

通過上邊的指令,我們以互動方式啟動了一個基于centos鏡像的docker執行個體,并将之前建立的sgw-docker 這個docker volume映射到了容器中的/data檔案夾,接下來,我們在容器的/data檔案夾中建立一個名為hello的測試檔案,并寫入測試資料:

# cd /data
# touch hello
# echo "test" > hello
# cat hello
test           

然後到oss的管理控制台中,進入我們綁定了雲存儲網關綁定的路徑中檢視,我們可以看到,在linux docker容器執行個體中寫入的資料已經寫入到了對象存儲(OSS)中。

在linux docker容器中挂載使用雲存儲網關

通過這種方式,我們在docker容器中可以非常友善的寫入和通路對象存儲(OSS)中的資料,是不是非常的友善呢?大家趕快試試吧!