2017-10-12 26 views
1

我正在努力學習Docker和那個提到的在線資料。我開始知道,我們可以拉出正式的圖像中心,並運行一個容器。是否所有碼頭圖像都具有最小的操作系統?

回購可在https://hub.docker.com/,屏幕截圖的一部分:

enter image description here

在此圖中,我們可以看到Ubuntu的,httpd的,MySQL的(等)的官方圖片。

我的問題是:

做所有這些圖像具有「最小OS」運行它們。例如,如果我們考慮httpd圖像,它是否具有運行所需的操作系統?

+0

你應該看看官方的Docker文檔:https://docs.docker.com/get-started/ –

+0

你需要的程序反過來需要庫等。這些來自docker鏡像中的文件,並在需要時調用。 Docker提供他們談論的內核。對於一個Java Docker機器而言,除了JVM及其所需的庫之外,您應該可以相處無憂。 –

+0

這是否意味着我們可以沒有任何操作系統的圖像? – CuriousMind

回答

2

大多數圖像都是基於一個發行版,因爲您可以在它們的Docker文件中看到它。除了分配圖像本身。它們具有不同的基本圖像,稱爲scratch

您可以查看他們是基於當您訪問的DockerHub項目的網頁上,圖像例如https://hub.docker.com/_/httpd/

他們Dockerfiles被引用,您可以通過點擊它們,例如審查這些第一個標籤「2.2」是指this file。 Dockerfile中的第一行是FROM debian:jessie,並顯示它基於Debian鏡像。

它被廣泛用於分隔標籤,其中後綴爲-alpine,用於指示使用alpine linux,這是一個比Debian圖像小得多的基本圖像。這導致httpd映像的圖像更小,因爲基本圖像要小得多。

1

整個想法是,整個圖像完全獨立運行在硬件/虛擬化層。因此,(專業:)也不能被其他任何東西影響,這是圖像的一部分。

每張圖片都包含一個完整的操作系統。特殊的碼頭使操作系統的幾個兆字節來:例如linux Alpine這是一個8兆字節的操作系統!

但是更大的操作系統,比如ubuntu/windows,可能是幾千兆字節。兩者都有它們的優點,因爲docker會將圖像分層切分,所以當您使用兩次基本圖像(FROM命令,請參閱N20 Answers)時,您將只下載一次該圖層。

較小的操作系統只需要下載幾兆的專業版。但對於你想使用的每個(linux)庫,你都必須下載&包括你自己。這個自定義圖層然後只用於您自己的圖像,因此不會在其他圖像中重新使用,從而創建客戶額外的下載層&兆字節人們將不得不下載以運行您的圖像。

如果你想從任何圖像您可以開始你的dockerfile:

FROM scratch 

但是,這不建議,除非你真的知道你正在做的和/或你周圍hobbying。

+0

感謝您的回答。那麼,圖像總是會不可避免地具有最小的操作系統?我還不清楚:( – CuriousMind

+1

)並非所有的圖像都是相同的,例如:Bitnami的php-fpm:7.2.1-r0圖像在15層中爲253MB kreable/php70:45層中最新爲1.21GB,如果它們確實具有相同的基本圖像,實際分層以及在安裝依賴項後自行清理的方式,將會影響最終的圖像大小。它是重用性(但可能更大層次)和極簡主義(但是可能不能重複使用以保證額外的工作)。 –

相關問題