現在程式寫好了,要怎麼包裝image呢
建議使用第二種方式,不論是自動化的程度跟要share的話都是較好的選擇。
docke build在開始執行的時候會找到當前目錄下的Dockerfile,然後按照Dockerfile執行, 本質上Dockerfile類似script或是bat檔,我們可以在裡面做一些copy, log...的動作
https://docs.microsoft.com/en-us/dotnet/core/docker/building-net-docker-images
以官網的範例來看一下Dockerfile
FROM microsoft/aspnetcore-build:2.0 AS build-env
WORKDIR /app
# copy csproj and restore as distinct layers
COPY *.csproj ./
RUN dotnet restore
# copy everything else and build
COPY . ./
RUN dotnet publish -c Release -o out
# build runtime image
FROM microsoft/aspnetcore:2.0
WORKDIR /app
COPY --from=build-env /app/out .
ENTRYPOINT ["dotnet", "aspnetapp.dll"]
首先這段code可以分成兩段(文件裡面是寫build stage),以From為起頭
第一段是build-env,回復專案的package,編譯後發行。
第二段是沒有as的From,將前一段build-env的內容copy到runtime的image下,在build成新的image
在這個Dockerfile裡面使用的指令
Docker指令
Dotnet指令
可以注意一下下圖編譯中途失敗的結果
會有 images殘留,另外值得注意的是每個Run會啟動一個container然後產生一個image,但是在每個from階段最終只會產生一個暫時的image。
如果撰寫dockerfile失敗可以朝workdir的相對路徑跟dockerfile的生命週期下去思考。