容器 & Docker & Docker鏡像 & Docker容器的關係和區別

最近在學docker,算是炒冷飯,之前接觸過docker的一些基礎內容,但沒有系統深入學習,這次會比較系統的學習docker的基礎支持和基本操作。挖個坑,會產出兩篇博客,一片介紹docker關鍵基礎概念,一篇介紹docker相關的實操。
這一篇會介紹docker相關的重要概念,一個是容器,一個是鏡像。

容器

容器是虛擬技術的一種,其主要作用是提供給應用程序一個可以運行的環境和相關依賴。說到虛擬技術,當然會想到虛擬機,那讓我們來看一下容器與虛擬機的區別。
圖一
如上圖所示,虛擬機和容器結構主要區別在於中間兩層,虛擬機自帶了操作系統,這個操作系統可以和宿主機一樣,也可以不一樣,而容器是和宿主機共享一個操作系統。我們知道,操作系統的內容是很多的,就像我們自己電腦上的操作系統一樣,佔用的內存很多,啓停很慢,而且如果虛擬機安裝的操作系統有更新,那更新也很麻煩,而且購買正版操作系統也是一筆不小的費用。而容器則沒有這些煩惱,所以容器相對於虛擬機而言,既可以提供獨立的軟件運行環境,佔用內存也小,啓停速度快,操作更簡單,更輕量級。

Docker

Docker不等同於容器,它是基於容器技術開發的一個應用,docker包含了運行一個應用程序所需要的所有東西,包括:代碼、運行時、各種依賴和配置。那麼這裏面的代碼、依賴、配置就是docker鏡像包含的內容,而運行鏡像裏的內容則是容器做的事情,也就是運行時。

Docker鏡像

Docker鏡像是一個文件系統,上文提到,其中包含了應用程序運行時所需的源代碼、依賴、配置等。我們自身的應用代碼可以根據dockerfile構建出一個鏡像,然後上傳到鏡像倉庫。docker提供了公有鏡像倉庫docker hub,這裏面的鏡像可以供所有人下載使用。可以將鏡像理解爲軟件安裝包,下載之後就開箱即用。Docker容器裏的鏡像是可以層層疊加的,比如運行我們的應用程序,需要使用mysql數據庫,需要python運行環境,那麼docker容器裏只要要有mysql鏡像、python鏡像、我們自己的應用程序鏡像。Docker鏡像是靜態的,像軟件安裝包一樣,沒有運行環境是不可以運行的,那麼docker容器就提供了這樣一個運行環境。

Docker容器

Docker容器就是容器,在docker裏,提供了運行docker鏡像的運行時環境。運行容器時,在鏡像層上面增加了一個讀寫層,可以對運行的容器做一些更改,但這些更改不會對鏡像產生影響,如果關閉或刪除容器後,這些更改也不會保存。那麼如果保存運行時的一些數據,進行持久化存儲,那就是卷(volume)做的事情,這是docker裏的另一個概念,這裏不做詳述。

鏡像和容器的關係

由上文描述可見,Docker容器和docker鏡像都是docker系統的一部分,密切相關。鏡像可以獨立於容器存在,但容器得依賴於鏡像,容器利用鏡像來構建一個運行時環境以此運行一個應用程序。利用docker運行應用程序的過程一般如下:編寫應用程序–》編寫dockerfile–》根據dockerfile構建鏡像–》上傳鏡像到鏡像倉庫–》使用docker容器運行該鏡像。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章