雲計算

Windows容器使用阿里雲NAS SMB文件系統做持久化存儲目錄

隨著Windows容器逐漸普及和發展,Windows容器持久化存儲以及容器間共享的需求越來越高漲。
本文介紹如何讓Windows主機正確配置NAS SMB文件系統,支持Windows容器讓Docker鏡像使用掛載NAS SMB文件系統的子目錄作為持久化存儲目錄。

手工掛載步驟

  1. 在阿里雲控制檯創建ECS虛擬機,選擇Windows Container版本。
  2. 參考《Windows系統掛載SMB文件系統》官方文檔,修改註冊表允許匿名訪問,創建SMB文件系統,創建掛載點。以下為在cmd命令行中修改註冊表允許匿名訪問的命令。
REG ADD HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\services\LanmanWorkstation\Parameters /f /v AllowInsecureGuestAuth /t REG_DWORD /d 1
  1. 打開Powershell,使用New-SmbGlobalMapping命令進行掛載
# Define clear text string for username and password
[string]$userName = 'workshop\administrator'
[string]$userPassword = '???'

# Convert to SecureString
[securestring]$secStringPassword = ConvertTo-SecureString $userPassword -AsPlainText -Force

[pscredential]$credOject = New-Object System.Management.Automation.PSCredential ($userName, $secStringPassword)
 
# Mount SMB share for container
New-SmbGlobalMapping -LocalPath z: -RemotePath \\file-system-id.region.nas.aliyuncs.com\myshare -Persistent $true

注意New-SmbGlobalMapping掛載命令使用的用戶名是workshop/administrator,密碼需要填上ECS的administrator密碼。

  1. 使用New-Item創建鏈接,作為容器的數據共享盤
 New-Item -ItemType SymbolicLink -Value \\file-system-id.region.nas.aliyuncs.com\myshare -Path c:\datashare
  1. 在cmd命令行使用docker run命令運行容器。注意選擇ECS操作系統版本對應的容器鏡像
docker run -ti --rm -v c:\datashare:c:\data --entrypoint="" registry.cn-hangzhou.aliyuncs.com/acs/flexvolume:v1.16.9.205f5a3-windows1809 pwsh.exe

完成之後在彈出的容器命令行界面中,即可對c:data目錄進行操作,內容會存儲在NAS SMB卷中

開機自啟動步驟

以上步驟經過改進,可以做成開啟啟動腳本,使得機器啟動後即可生成帶持久化存儲目錄的容器。

  1. 在C盤創建c:startup_script.ps1腳本
 # Define clear text string for username and password
[string]$userName = 'workshop\administrator'
[string]$userPassword = '???'

# Convert to SecureString
[securestring]$secStringPassword = ConvertTo-SecureString $userPassword -AsPlainText -Force

[pscredential]$credOject = New-Object System.Management.Automation.PSCredential ($userName, $secStringPassword)
New-SmbGlobalMapping -LocalPath y: -RemotePath \\file-system-id.region.nas.aliyuncs.com\myshare -Persistent $true -Credential $credOject

New-Item -ItemType SymbolicLink -Value \\file-system-id.region.nas.aliyuncs.com\myshare -Path c:\datashare
  1. 在C盤創建startup_script.bat腳本
ECHO ON
ECHO This startup_script will mount smb share and start container

powershell -file "c:\startup_script.ps1" >> c:\startup_script.output.txt

docker run -ti --rm -v c:\datashare:c:\data --entrypoint="" registry.cn-hangzhou.aliyuncs.com/acs/flexvolume:v1.16.9.205f5a3-windows1809 pwsh.exe
  1. 在cmd命令行運行以下命令,生成開機任務
schtasks /create /tn "startup_script" /tr "c:\startup_script.bat" /sc onstart /RU SYSTEM /RL HIGHEST

schtasks /run /tn "startup_script"
  1. 上述步驟即配置完成開機任務。以後每次開機啟動之後,即可運行以下docker命令打開容器命令行,操作c:data持久化存儲目錄

4.1. 使用docker ps找到container ID
使用docker ps找到container ID.png

4.2. 使用docker exec打開容器命令行,可以看到c:data持久化存儲目錄
使用docker exec打開容器.png

Leave a Reply

Your email address will not be published. Required fields are marked *