發表文章

目前顯示的是有「container」標籤的文章

使用Visual Studio開發支援容器化的 .net 網站

圖片
在 .net 開發技術中,若要產生支援 Linux Container 的 Image 非常容易,你只需要底下幾個步驟即可: 上圖中的 Image Registry,可以是私有的,也可以是公用的。目前坊間公用的 Registry 典型像是 Docker Hub,若你把Image上傳到Docker Hub,人人都可以下載使用。許多軟體和框架的開發商,都已經把自己所建立的SDK, Runtime上傳至Docker Hub: 私有的Registry則適合企業存放僅供內部使用的Image。開發人員可以透過軟體自建Private Image Registry,或是採用雲端現成的服務,像是Azure 上的ACR(Azure Container Registry)。 使用Docker File建立image docker file是一份文件,透過docker file我們可以建置出docker image,你可以透過手動方式,以docker CLI來建立,若採用開發工具,在 Visual Studio 中,只需要將專案加入docker支援,即可自動建立 docker file: Visual Studio自動建立出來的 docker file,會依照 .net 版本有所不同。例如,底下是 .net 5 的 docker file: #See https://aka.ms/containerfastmode to understand how Visual Studio uses this Dockerfile to build your images for faster debugging. FROM mcr.microsoft.com/dotnet/aspnet:5.0 AS base WORKDIR /app EXPOSE 80 EXPOSE 443 FROM mcr.microsoft.com/dotnet/sdk:5.0 AS build WORKDIR /src COPY [ "testdocker.csproj" , "." ] RUN dotnet restore "./testdocker.csproj" COPY . . WORKDIR "/src/....

關於容器化技術

圖片
我喜歡用這個比喻跟同學解釋,為何 “容器化(Container)” 技術對於開發人員和維運工程師那麼重要。 過去,你一定碰到過,開發的程式 “在我的電腦上是好的” 但在客戶那邊就是不能用的情況。有時候是…在測試環境OK,在正式機就是不行,然後怎麼辦? 我們開始找差異(難不成把你的電腦出貨給客戶?),有時候幾天幾夜你也找不出差別,乾脆重安裝一台比較快。 這是因為,我們所開發的軟體對於作業系統、runtime、套件…都有相依性,所以換了底層環境,或是有一點點的套件差異,就可能導致無法執行。 然而,當我們採用容器化技術後,可以把軟體運行所需要的一切,都封裝在一個影像檔(image)之中,未來,只要把這個 image 丟到任何支援容器化技術的環境,不管是甚麼平台,不管作業系統、不管runtime是甚麼版本、不管有沒有安裝什麼套件…我們的應用程式一定可以執行。 就好比貨櫃屋或是行動餐車,把營業所需要的家當全部都封裝在那個車廂(image)裡面了,不管開到哪,接上水電就可營業(執行)。 而且容器化技術可以把一個影像檔壓縮到幾百M以內,比起VM的 image 動輒幾G起跳,有著天生的複製方便、擴展容易的特性,使得你可以很輕鬆地實踐 scale out(動態生出伺服器) 或 fail-over(壞了立刻啟動備援)。 從此之後,我們的應用程式跟作業系統環境毫無相依性,且隨便也可以瞬間擴展出五台十台執行個體,再也不怕瞬間大流量,這不是突破性的革命,什麼是突破性的革命? 如果讓我票選,近代軟體開發最重要的幾個技術,除了網際網路之外,容器化和AI可能可以名列前三。