docker 多階段構建

2022-02-16 15:05:02 字數 704 閱讀 1151

構建映象最具挑戰性的一點是使映象大小盡可能的小。dockerfile中的每條指令都為影象新增了乙個圖層,您需要記住在移動到下一層之前清理任何不需要的工件。對於多階段構建,您可以在dockerfile中使用多個from語句。每個from指令可以使用不同的基礎,並且每個指令都開始乙個新的構建。您可以選擇性地將工件從乙個階段複製到另乙個階段,從而在最終image中只留下您想要的內容。 例如vs生成的dockerfile:

from microsoft/dotnet:2.1-aspnetcore-runtime as base

workdir

expose 80

from microsoft/dotnet:2.1-sdk as build

workdir

/src

copy ["dockerweb/dockerweb.csproj", "dockerweb/"]

run dotnet restore "dockerweb/dockerweb.csproj"

copy

. .workdir "/src/dockerweb"

from

build as publish

from

base as final

workdir

copy

entrypoint ["dotnet", "dockerweb.dll"]

參考:

Docker多階段構建

在 docker 17.05 版本之前,我們構建 docker 映象時,通常會採用兩種方式 一種方式是將所有的構建過程編包含在乙個 dockerfile 中,包括專案及其依賴庫的編譯 測試 打包等流程,這裡可能會帶來的一些問題 package main import fmt func main 編寫...

Docker 的多階段構建

比如我們現在有乙個最簡單的 golang 服務,需要構建乙個最小的docker映象,原始碼如下 複製 我們最終的目的都是將最終的可執行檔案放到乙個最小的映象 比如alpine 中去執行,怎樣得到最終的編譯好的檔案呢?基於docker的指導思想,我們需要在乙個標準的容器中編譯,比如在乙個 ubuntu...

docker 映象多階段構建

下面是 go 語言 hello world package main import fmt func main 接著用 alpine 1 的 go 語言 image 來編譯出可執行檔案。from golang alpine接著執行如下編譯指令 build stage from golang alpi...