簡體   English   中英

我們可以有一個多階段的 Dockerfile,其中 FROM 下的圖像可能與不同的 linux 操作系統分布有關

[英]Can we have a multi-stage Dockerfile where images under FROM could pertain to different linux OS distribution

是否可以使用多級Dockerfile ,其中第一個基本映像屬於 Ubuntu,然后第二個屬於 Alpine。 我知道使用此 Dockerfile 構建生成的最終映像無法在 Ubuntu 平台上執行,因為它還包含 Alpine 指令,如果您在 Alpine 上執行它也是如此。 但我仍然想確認是否是這種情況

例如,這是我的示例 Dockerfile:

FROM some-ubuntu-base-image:latest 

RUN apt-get update && apt-get install -y my-ubuntu-package

FROM some-alpine-base-image:latest

RUN apk add my-alpine-package

............
.............

首先,沒有什么可以阻止 Alpine 映像在 Ubuntu docker 主機上運行。 這些是在相同 Linux kernel 之上運行的不同文件系統,共享的 kernel 不會影響運行不同分發二進制文件/庫的能力。

在多階段部分,您可以為每個 state 使用您想要的任何圖像,這些圖像彼此獨立。 多階段不是合並圖像的方法,在第二階段開始時(除非該階段來自第一階段輸出),您在第二階段的文件系統中的第一階段沒有任何內容。

您將遇到的問題是,如果您在文件系統上依賴於其他文件(例如庫)的階段之間復制文件。 最常見的問題是嘗試在使用 musl 的 Alpine 系統上運行針對 libc 編譯的二進制文件。

是的,它。 但是,它可能會導致問題:如果您使用動態鏈接,您可能正在復制一個可執行文件,該可執行文件需要一個庫版本,該版本在您制作它的階段可用,但在最終映像的分發時不可用。 然而,對於靜態編譯的語言/程序(如 Go)來說,這不是一個大問題,因為它們本質上是將它們使用的庫捆綁到可執行文件中。

但是,如果可以,您應該避免這樣做。 除特定情況外,這是一種不兼容的風險,沒有太大的價值。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM