Docker入門系列02
阿新 • • 發佈:2018-04-24
create sha 本地 新的 uil 自信 from creat new
上篇用一個簡單的示例,簡單的介紹了 Dockerfile 的配置及其相關的命令。這一篇會在上篇的示例程序裏,繼續添加新代碼及如何將單元測試也放入 Image 建立過程內。
首先,我們需要建一個新的類庫,將業務相關的代碼從原來的項目移到新類庫裏。創建類庫的代碼如下:
dotnet new classlib -o utils
dotnet restore utils/
dotnet sln add utils/utils.csproj
現在我們已經創建好了新的類庫,那麽現在coding……,我會在文章末尾放入項目地址。假設你十指如飛的敲好了代碼。OK,雖然我們對自己的代碼很自信,但為了體現我們對代碼的負責的態度,還是需要寫個單元測試的。OK,我們需要創建個單元測試項目,非常簡單,代碼如下:
dotnet new xunit -o test
現在coding單元測試用例,5分鐘後代碼寫好了,現在本地運行下,命令如下:
dotnet test ./tests/ #以下是test運行結果 Build started, please wait... Build completed. Test run for /Users/gebilaowang/Development/dotnet-docker/dotnetapp/tests/bin/Debug/netcoreapp2.0/tests.dll(.NETCoreApp,Version=v2.0) Microsoft (R) Test Execution Command Line Tool Version 15.5.0 Copyright (c) Microsoft Corporation. All rights reserved. Starting test execution, please wait... [xUnit.net 00:00:00.7581900] Discovering: tests [xUnit.net 00:00:00.8340440] Discovered: tests [xUnit.net 00:00:00.8412310] Starting: tests test text 1 test text 2 test text 3 test text. [xUnit.net 00:00:01.0264220] Finished: tests Total tests: 3. Passed: 3. Failed: 0. Skipped: 0. Test Run Successful. Test execution time: 1.8490 Seconds
到現階段,單元測試相關的代碼已經寫好了,那麽該進入主題了,修改 Dockerfile 內容如下:
FROM microsoft/dotnet:2.0-sdk AS build # copy csproj and restore as distinct layer WORKDIR /src COPY *.sln . COPY dotnetapp/*.csproj ./dotnetapp/ COPY tests/*.csproj ./tests/ COPY utils/*.csproj ./utils/ RUN dotnet restore # copy and build everything else COPY . . RUN dotnet build # create test FROM build AS test WORKDIR /src/tests RUN dotnet test # publish execution app FROM build AS publish WORKDIR /src/dotnetapp RUN dotnet publish -c Release -o out # FROM microsoft/dotnet:2.0-runtime as runtime WORKDIR /app COPY --from=publish /src/dotnetapp/out ./ ENTRYPOINT [ "dotnet","dotnetapp.dll" ]
OK,現在可以創建新的 Image 了,鍵入 docker build -t dotnetapp:1.0-test .
,這個過程相對第一次比較快,因為相關的基礎鏡像(BaseImage)之前已經下載到本地了。註意觀察 Image 的過程,你會發現單元測試的輸出結果。
OK,有關單元測試的內容已經介紹完了,是不是很簡單。聰明的你,也許想到了是不是也可以將單元測試作為容器啟動的入口程序,你可以自己動手試試。
示例代碼
Docker入門系列02