匯出二進制檔案
您知道您可以使用 Docker 將應用程式建置成獨立的二進位檔嗎?有時,您不想將應用程式打包和發佈為 Docker 映像檔。使用 Docker 建置您的應用程式,並使用匯出器將輸出儲存到磁碟。
docker build
的預設輸出格式是容器映像檔。該映像檔會自動載入到您的本機映像檔存放區,您可以在其中從該映像檔執行容器,或將其推送到登錄檔。在底層,這使用預設的匯出器,稱為 docker
匯出器。
若要將建置結果匯出為檔案,您可以使用 --output
旗標,或簡稱為 -o
。 --output
旗標可讓您變更建置的輸出格式。
從建置匯出二進位檔
如果您在 docker build --output
旗標中指定檔案路徑,Docker 會在建置結束時將建置容器的內容匯出到主機檔案系統上的指定位置。這使用 local
匯出器。
這樣做的好處是您可以使用 Docker 強大的隔離和建置功能來建立獨立的二進位檔。這適用於 Go、Rust 和其他可以編譯成單一二進位檔的語言。
以下範例建立一個簡單的 Rust 程式,它會列印「Hello, World!」,並將二進位檔匯出到主機檔案系統。
为此範例建立一個新目錄,然後瀏覽至該目錄
$ mkdir hello-world-bin $ cd hello-world-bin
使用以下內容建立 Dockerfile
# syntax=docker/dockerfile:1 FROM rust:alpine AS build WORKDIR /src COPY <<EOT hello.rs fn main() { println!("Hello World!"); } EOT RUN rustc -o /bin/hello hello.rs FROM scratch COPY --from=build /bin/hello / ENTRYPOINT ["/hello"]
提示
COPY <<EOT
語法是 文件中的程式碼。它允許您在 Dockerfile 中撰寫多行字串。在此處,它用於在 Dockerfile 中內嵌建立一個簡單的 Rust 程式。這個 Dockerfile 使用多階段建置在第一階段編譯程式,然後將二進位檔複製到第二階段的臨時映像檔。最終映像檔是一個最小映像檔,僅包含二進位檔。臨時映像檔的這種使用案例很常見,用於為不需要完整作業系統即可執行的程式建立最小的建置構件。
建置 Dockerfile 並將二進位檔匯出到目前的工作目錄
$ docker build --output=. .
此命令會建置 Dockerfile 並將二進位檔匯出到目前的工作目錄。二進位檔名為
hello
,並在目前的工作目錄中建立。
匯出多平台建置
您可以使用本機匯出器搭配 多平台建置 來匯出二進位檔。這可讓您一次編譯多個二進位檔,這些二進位檔可以在任何架構的任何機器上執行,前提是目標平台受到您使用的編譯器支援。
繼續 從建置匯出二進位檔 章節中的範例 Dockerfile
# syntax=docker/dockerfile:1
FROM rust:alpine AS build
WORKDIR /src
COPY <<EOT hello.rs
fn main() {
println!("Hello World!");
}
EOT
RUN rustc -o /bin/hello hello.rs
FROM scratch
COPY --from=build /bin/hello /
ENTRYPOINT ["/hello"]
您可以使用帶有 --platform
標誌的 docker build
命令為多個平台構建此 Rust 程序。結合 --output
標誌,構建會將每個目標的二進制文件導出到指定的目錄。
例如,要為 linux/amd64
和 linux/arm64
構建程序
$ docker build --platform=linux/amd64,linux/arm64 --output=out .
$ tree out/
out/
├── linux_amd64
│ └── hello
└── linux_arm64
└── hello
3 directories, 2 files
其他資訊
除了 local
導出器之外,還有其他可用的導出器。要了解有關可用導出器及其使用方法的更多信息,請參閱導出器文檔。