練習 - 擷取現有的 Docker 映像並將它部署到本機
要建立並運行您自己的 Docker 映像,良好的起點是從 Docker Hub 取得現有的映像,然後在本機電腦上執行它。
您決定從 Docker Hub 嘗試執行範例映像,藉以證明公司應用程式的概念。 您選取的映像會實作基本的 .NET Core ASP.NET Web 應用程式。 建立部署 Docker 映像的程序之後,您就可以使用 Docker 執行公司自己的其中一個 Web 應用程式。
在此練習中,您會從 Docker Hub 提取映像並加以執行。 您可以檢查 Docker 的本機狀態,以協助瞭解已部署的專案。 最後,您會從計算機中移除容器和映像。
重要
此練習會在您的電腦中執行,而非在 Azure 中。 您需要在本機安裝 Docker,才能繼續執行練習。 下載:https://docs.docker.com/desktop/install/windows-install/
從 Docker Hub 提取並執行範例應用程式
在電腦上啟動 Docker。
在您的本機電腦上開啟命令提示字元視窗。
輸入下列程式碼,從 Docker Hub 登錄並提取 ASP.NET 範例應用程式映像。 此映像包含 Microsoft 開發的範例 Web 應用程式,且是以 Visual Studio 中可用的預設 ASP.NET 範本為基礎。
docker pull mcr.microsoft.com/dotnet/samples:aspnetapp輸入下列程式代碼,確認映像已儲存在本機。
docker image ls您應該會看到名為 mcr.microsoft.com/dotnet/samples 的存放庫,其標籤為 aspnetapp。
輸入下列程式碼以啟動範例應用程式。
-d旗標為執行作為背景、非互動式應用程式。 該p標誌用於將創建的容器中的 8080 埠對應到本地的 8080 埠。 此設定旨在避免與您電腦上已執行的任何 Web 應用程式發生衝突。 此命令會以實例的冗長十六進位標識符回應。docker run -d -p 8080:8080 mcr.microsoft.com/dotnet/samples:aspnetapp開啟網頁瀏覽器並移至範例 Web 應用程式的 URL:
http://localhost:8080。 您應該會看到類似下列螢幕快照的頁面:
檢查本地 Docker 註冊表中的容器
在命令提示字元中,執行下列命令以檢視在本機登錄中正在執行的容器。
docker ps輸出應類似下列範例:
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 96c851831ade mcr.microsoft.com/dotnet/samples:aspnetapp "dotnet aspnetapp.dll" 22 minutes ago Up 22 minutes 0.0.0.0:8080->80/tcp eager_montalcini[COMMAND] 欄位會顯示執行中命令 dotnet aspnetapp.dll 所啟動的容器。 此命令會叫用 .NET Core 執行階段,啟動 aspnetapp.dll 中的程式碼 (範例 Web 應用程式的程式碼)。 [埠] 欄位表示映像中的埠 8080 已對應到您電腦上的埠 80。 STATUS 欄位顯示應用程式仍在執行。 請記下容器的 NAME。
請執行以下命令來停止 Docker 容器,並將其中的
<NAME>替換為上一個命令的輸出名稱。docker container stop <NAME>執行下列命令以確認容器已不再執行。 -a 旗標指出,此命令會顯示所有容器的狀態,而不限於仍在執行的容器。 輸出應該會顯示容器的「狀態」為 [已結束]。
docker ps -a在您的網頁瀏覽器中,重新整理範例 Web 應用程式頁面 (http://localhost:8080/). 它應該會失敗並顯示「連線被拒」錯誤。
從本機登錄移除容器和映像
雖然容器已停止,但它仍然已載入且可以重新啟動。 在 [命令提示字元] 視窗中執行下列命令,以將之移除,並取代預留位置
<NAME>為您的容器名稱。docker container rm <NAME>執行下列命令來確認容器已移除。 該命令應該不會再列出該容器。
docker ps -a列出在您的電腦上目前可用的映像。 該輸出應該要顯示樣本存放庫。
docker image ls從登錄移除映像。
docker image rm mcr.microsoft.com/dotnet/samples:aspnetapp輸出應該會列出許多未標記和刪除的專案。 執行下列命令以再次列出映像,並驗證 microsoft/dotnet-samples Web 應用程式的映像確實已消失。
docker image ls