隨著Windows容器逐漸普及和發展,Windows容器持久化存儲以及容器間共享的需求越來越高漲。
本文介紹如何讓Windows主機正確配置NAS SMB文件系統,支持Windows容器讓Docker鏡像使用掛載NAS SMB文件系統的子目錄作為持久化存儲目錄。
手工掛載步驟
- 在阿里雲控制檯創建ECS虛擬機,選擇Windows Container版本。
- 參考《Windows系統掛載SMB文件系統》官方文檔,修改註冊表允許匿名訪問,創建SMB文件系統,創建掛載點。以下為在cmd命令行中修改註冊表允許匿名訪問的命令。
REG ADD HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\services\LanmanWorkstation\Parameters /f /v AllowInsecureGuestAuth /t REG_DWORD /d 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密碼。
- 使用New-Item創建鏈接,作為容器的數據共享盤
New-Item -ItemType SymbolicLink -Value \\file-system-id.region.nas.aliyuncs.com\myshare -Path c:\datashare
- 在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卷中
開機自啟動步驟
以上步驟經過改進,可以做成開啟啟動腳本,使得機器啟動後即可生成帶持久化存儲目錄的容器。
- 在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
- 在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
- 在cmd命令行運行以下命令,生成開機任務
schtasks /create /tn "startup_script" /tr "c:\startup_script.bat" /sc onstart /RU SYSTEM /RL HIGHEST
schtasks /run /tn "startup_script"
- 上述步驟即配置完成開機任務。以後每次開機啟動之後,即可運行以下docker命令打開容器命令行,操作c:data持久化存儲目錄
4.1. 使用docker ps找到container ID
4.2. 使用docker exec打開容器命令行,可以看到c:data持久化存儲目錄