在昨天我們談完Azure小白如何使用 Azure Event Hub進行應用程式及時傳訊,我們來聊聊
日常工作如何使用Docker File , Docker指令 , Docker Image ,Azure Container Registry
(ACR)及Azure Container Instance(ACI),快速部署是業務靈活度的關鍵,現代組織必須能夠
快速發行應用程式,以吸引和維持商機,容器化可節省時間並降低成本,你不必設定硬體,
也不用花時間安裝作業系統和軟體來裝載部署,多個應用程式可以在相同硬體上的自有
隔離容器中執行,只要啟動額外的容器執行個體,即可快速相應放大開始
動手前請先安裝Docker及Git程式
Docker 是執行容器化應用程式的工具。 容器化應用程式包含組成其執行環境的
應用程式和檔案系統。 例如,容器化應用程式可能包含資料庫,以及執行應用程
式所需的其他相關軟體和設定資訊。容器化應用程式的磁碟使用量,通常比設定用
於執行相同應用程式的虛擬機器較小。磁碟使用量較小是因為虛擬機器必須提供
整個作業系統和相關的支援環境,Docker Container無此額外負荷,因為Docker
使用主機電腦的作業系統核心為容器提供動能,下載並啟動DockerImage通常比
下載和執行提供類似功能的虛擬機器更為快速,也更有空間效益,以下為示意圖:
Docker起初是針對Linux開發,但已擴充為可支援 Windows,個別的Docker
Image為Windows或Linux,但不能同時為兩者,Image的作業系統會決定要在
Container內使用何種作業系統環境。
Docker Image儲存在registries中提供使用,registries是Docker提供可以
連線的 Web服務,用以Upload及Download Container Images,最為人熟知的
registries是Docker Hub,它是Public registry,許多個人和組織都會將
Image發佈至 Docker Hub,你可以使用在桌上型電腦、伺服器上或雲端中執行的
Docker 來下載並執行這些映像,你可以建立 Docker Hub帳戶,免費上傳你自己
的Image。repository是 unit of privacy for an image,如果不想共用
Image,你可以將repository設為Private。 你可以將存取權授與希望與其共用
Image的其他使用者。
通常你會在 Docker Hub 中發現最符合你想要容器化的應用程式類型Image,你
可以下載這類Image,並使用你自己的應用程式程式碼來加以擴充,Docker Hub
包含數千個Image,你可以從命令列或 Docker Hub 網站使用 Docker 來搜尋
和瀏覽登錄,該網站可讓你依類型和發行者搜尋、篩選及選取映像。 下圖顯示
搜尋頁面的範例,下圖為Docker Hub的官網畫面:
docker run -p 8080:80 -d mcr.microsoft.com/dotnet/core/samples:aspnetapp
如果正在執行的Container變更其Image中檔案,則這些變更只存在於已執行變更
的Container中,除非你採取特定的步驟來保留Container狀態,否則在移除
Container後,就會遺失這些變更,同樣地,以相同IMAGE為基礎並同時執行的多個
Container,不會共用Image中的檔案,每個Container都有自己的獨立複本。
某個Container寫入自己檔案系統的資料都不會讓其他Container看到。
Docker Hub 是你開始建置專屬容器化應用程式的絕佳映像來源。 你可以下載
提供基本所需功能的Image,以及將你自己的應用程式「堆疊」在其頂層,建立新
的自訂Image,你可以撰寫Dockerfile,自動化執行此程序的步驟。
Dockerfile 是純文字檔案,包含建置映像所需的所有命令。 Dockerfile 是以
專為建置及設定Image所設計的最小指令碼語言撰寫,而且會記載使用Base Image
開始建置所需的作業,為建立包含你應用程式的 Docker Image,你通常會從識別
「Base Image」開始,,你要在此Base Image中新增其他檔案和設定,這種Image
已包含應用程式架構和Ubuntu 或 Alpine 等Linux發行版本的所有公用程式和
工具,例如你有想要封裝至Container的 ASP.NET Core應用程式,Microsoft會
發佈稱為mcr.microsoft.com/dotnet/core/aspnet 的映像,其已包含ASP.NET
Core執行階段,你可以啟動具有Base Image的Container,並對其進行變更以自訂
Image,例如將從本機檔案系統的檔案複製到Container中,以及執行各種工具和
公用程式來編譯程式碼,完成後你會使用 docker commit 命令將變更儲存至新的
Image,以下Docker File範例
FROM mcr.microsoft.com/dotnet/core/sdk:2.2
WORKDIR /app
COPY myapp_code .
RUN dotnet build -c Release -o /rel
EXPOSE 80
WORKDIR /rel
ENTRYPOINT ["dotnet", "myapp.dll"]
Azure Container執行個體視需要載入並執行 Docker 映像。 Azure Container
Instance可從 Docker Hub 或 Azure Container Registry 等登錄擷取Image。
你的組織想要使用 Azure 執行其 Web 應用程式。 因此,將Image儲存在 Azure
Container Registry,然後使用 Azure ContainerInstance執行它們是合理的。
Azure Container Registry 是一項registry,其裝載 Azure 提供的服務。
你建立的每項 Azure Container Registry 資源都是具有唯一 URL 的個別登錄
。 這些登錄是「Private」:它們需要驗證才能Push或Pull Image。 Azure
Container Registry 在雲端執行,提供的延展性和可用性層級與其他許多 Azure
服務差不多。
Azure Container Instance服務可以從 Azure Container Registry 載入
Image,然後在 Azure 中執行它。
手把手擷取現有的 Docker 映像並將它部署到本機
手把手自訂 Docker 映像以執行你自己的 Web 應用程式
手把手將 Docker 映像部署至 Azure 容器執行個體
Day24教學講義:
https://docs.microsoft.com/zh-tw/learn/modules/intro-to-containers/