2017-09-01 17 views
-1

我想開始編寫Docker鏡像。我有一個.net Core 2.0 Web Api服務,我已經部署到Amazon Linux機器上。它運行良好,但我想稍微自動化構建和部署過程。當我的主機擁有我需要安裝的所有軟件時,爲什麼要將Linux發行版作爲Dockerfile庫提供?

就我而言,沒有必要爲我需要建立的圖像父圖像。我可能會從某個位置抓取一些文件,運行一些dotnet CLI命令,然後使用Apache作爲反向代理運行該服務。我真的沒有看到任何一個父圖像的需要。

我在問這個問題,因爲我見過的大多數例子都包含一個基礎圖像。大多數情況下,它的東西非常通用,比如「From Ubuntu」。我讀過大部分圖像都會包含父圖像。根據Docker的文檔:

父圖像是您的圖像所基於的圖像。它引用Dockerfile中FROM指令的內容。 Dockerfile中的每個後續聲明都會修改此父圖像。大多數Dockerfiles從父映像開始,而不是基本映像。但是,這些術語有時可以互換使用。

究竟是從Ubuntu繼承的重點?即使Docker文檔也建議使用Debian,「因爲它的控制非常嚴格,並且保持最低限度」。這是否確保您的Linux機器具有Ubuntu發行版?如果我使用亞馬遜Linux,但使用Debian映像作爲我的基礎,這是否甚至重要?

+2

你希望從哪裏得到*任何軟件*如果你不是來自發行版?假設您正在運行Apache HTTPD。你需要實際上有一個libc鏈接到一個OpenSSL的副本。哎呀,如果你沒有'apt-get'(或'yum'或其他軟件包管理器)和你的發行版提供的所有東西,你不能'apt-get install apache'。 –

+0

......最接近你可以得到的不是擁有一個發行版就像[Buildroot](https://buildroot.org/),甚至這仍然是一個發行版(只有一個,在編譯時,根據您的規格構建一切,不涉及二進制包)。 –

+0

(好吧 - [從Scratch的Linux](http://www.linuxfromscratch.org/lfs/),但如果你想知道什麼是使用真正的發行版,而不是嘗試使用它。良好的學習經驗,但不能幫助你完成實際工作)。 –

回答

3

Docker鏡像運行在一組文件系統命名空間中,這些文件系統命名空間與主機的連接沒有關聯,除非您選擇了綁定掛載卷。這意味着主機上安裝的工具對容器不可用:僅僅因爲主機運行Amazon Linux並不意味着Amazon Linux提供的用戶空間命令(以及這些命令用於運行的庫)可供客人使用。你可能沒有一個軟件包管理工具(yum,apt-get等),用它來安裝你需要的工具來下載文件,運行軟件(這大概需要是鏈接到libc,OpenSSL的副本或其他共享組件)。還有一個正在運行的Linux系統的運行時間部分,比如解壓縮程序,在您的發行版中在用戶空間中提供,不在Docker安裝中與主機共享。

使用基礎映像可確保您的容器內有可用的工具 - 它可確保該容器在任何具有兼容的內核和硬件體系結構的Linux系統上始終如一地工作。

從理論上講,綁定掛載主機中的許多工具是可能的(例如通過將所有/usr作爲一個卷展示出來),但這樣做會挫敗Docker在可移植性方面提供的許多優點。

相關問題