離線下載與安裝 Docker Enterprise Edition 任意版本

離線下載與安裝 Docker Enterprise Edition 任意版本

一般而言,要安裝 Docker Enterprise Edition (以下稱 Docker EE) (或 Preview) 版本都只需要執行二行 PowerShell 指令,例如:

安裝 Docker EE 1

Install-Module DockerMsftProvider -Force
Install-Package Docker -ProviderName DockerMsftProvider -Force

安裝 Docker EE Preview:

Install-Module DockerProvider
Install-Package Docker -ProviderName DockerProvider -RequiredVersion preview

看似簡單無比的任務,搞得我就搞得我一個頭二個大。原本以為 Install-Module 加上 -Proxy 參數就能解決的問題,但不斷出現的紅字錯誤訊息,只有灰頭土臉可以形容。請管理網路同事幫忙,得到一個壞消息,這個 Install-Module 指令就算加了 -Proxy 結果還是往 Firewall 走,也有試著用 netsh 改更底層 Proxy 設定,但依然無用。動 Firewall 事態不小,非到不得以,實在不想走這一條。

使用 PowerShell 安裝、更新與刪除 Docker Enterprise Edition (含Preview)

使用 PowerShell 安裝、更新與刪除 Docker Enterprise Edition (含Preview)

在 Windows Server Core 1709 測試過程,經常需要安裝、更新或刪除 Docker Enterprise Edition 的動作。因為文件分散在 Docker Docs 與 Microsoft Docs ,整理為以下筆記,方便自己查詢。你能發現,使用 PowerShell 的安裝與更新非常簡單,刪除步驟比較多,你能從上而下跟著筆記把 Docker 給刪除,在重新安裝起來。

ASP.NET Web API GZip/Deflat 資料遺失迷航記

ASP.NET Web API GZip/Deflat 資料遺失迷航記

前情提要:參考(1)(2),之前測試發現 ASP.NET Web API 有個查詢資料量不小(1.92 MB),並且會有同等級的上傳行為,在 ASP.NET Web API 加入 GZIP/Deflate (解)壓縮來改善效能,資料由 1.92 MB → 50 KB 壓縮率約 40 倍,這是用一點 CPU 來改善效能的好範例。

同事回報,在測試區當資料量提升至 3.3 MB(3338506 bytes) 後,程式有機會(隨機)出錯(Exception)。

先來看 HTTP POST 流程:

RestSharp (RawData: Over 3.3 MB) → GZIP → GZIP ByteArray (79515 bytes) → HTTP POST → ASP.NET Web API

這是個 VSTO 的 Excel 應用程式,在讀取 Web API 資料之後,原封不同進行上傳(HTTP POST)動作,由側錄取得離線 RawData 約 3.3 MB,經過 GZIP 壓縮後得到約 78 KB 的 Byte Array 資料,最後使用參考(2)程式碼送出:

request.AddParameter("application/json", content.ToArray(), ParameterType.RequestBody);
檔案大小

接收流程:

ASP.NET Web API → DecompressionHandler → RawData → Web API life cycle

Web API 收到請求後安排一個 Message Handler 進行解壓縮後取得 RawData 之後,按 Web API 生命流程往下進行。

程式穩定運作,經過許多分析與測試後,在終於在 Web API 側錄到錯誤發生時的資訊:

lose data

在 DecompressionHandler 取得的 GZIP ByteArray 大小為 77889,很明顯小於原始的 79515,把解壓縮的 RawData 資料 Dump 出來後確實資料短少被截斷了,造成後續 Web API 在進行 ModelBinding 時的不正常 Exception。