1. 程式人生 > >Docker 入門到實踐(二)Docker 三個基本概念

Docker 入門到實踐(二)Docker 三個基本概念

gist 系統 概念 png tag 分發 rep 創建 多層

一、Docker 的三個進本概念?

了解 Docker 的三個基本概念,就可以大致了解 Docker 的生命周期。

  1. 鏡像(Image)
  2. 容器(Container)
  3. 倉庫(Repository)

二、鏡像

1.Docker 鏡像

  我們都知道,操作系統分為內核和用戶空間。對於 Linux 而言,內核啟動後,會掛載 root 文件系統為其提供用戶空間支持。而 Docker 鏡像(Image),就相當於是一個 root 文件系統。比如官方鏡像 ubuntu:18.04 就包含了完整的一套 Ubuntu 18.04 最小系統的 root 文件系統。Docker 鏡像是一個特殊的文件系統,除了提供容器運行時所需的程序、庫、資源、配置等文件外,還包含了一些為運行時準備的一些配置參數(如匿名卷、環境變量、用戶等)。鏡像不包含任何動態數據,其內容在構建之後也不會被改變

2.分層存儲

  因為 鏡像包含了操作系統完整的 root 文件系統,其體積還是很巨大的,所以引入了 Unios FS 技術,將其設計為分層存儲的架構。所以鏡像不是那種 ISO 打包文件,鏡像是一個虛擬的概念,它是由一組文件系統構成,或者說多層文件系統聯合構成。

  鏡像在構建時,是一層層構建,上一層是下一層的基礎,每一層構建結束就不會在被修改,後一層任何修改只會作用在當前層。例如刪除上一層文件,不會真的刪除該文件,而是會標記刪除然後隱藏起來,最終運行容器的時候不會被看見,但是會一直跟隨鏡像。因此構建鏡像時需要小心,不要添加不需要的東西,任何額外的東西都要在本層構建完之前清除。

  分層存儲使鏡像的定制和復用變得容易,可以用之前做好的鏡像作為基礎層,然後添加新的層,定制自己所需要的東西,構建新的鏡像。

三、容器

  鏡像(Image)和容器(Conatiner)的關系就像是面向對象的類和實例一樣,鏡像是靜態的定義,容器是鏡像運行的實體,容器可以被創建,啟動,停止,刪除,暫停等。容器的實質是進程,但是又和宿主的進程不同,容器有自己的獨立命名空間,因此容器擁有自己 root 文件系統,自己的網絡配置,自己的進程空間,甚至自己的用戶 ID 空間。容器內的進程是運行在一個隔離的環境裏,使用起來,就好像是在一個獨立於宿主的系統下操作一樣。所以好多初學者都會把容器和虛擬機搞混。容器同樣和鏡像一樣使用分層存儲,以鏡像為基礎層,在上面創建了一個容器存儲層,是為了容器運行時讀寫準備的。註意,在容器被刪除後,容器存儲層保存的任何信息都不會保存,它和容器的生命周期一樣,所以任何需要保存的數據 Docker 建議保存在數據卷(Volumes)或者宿主機目錄中,這樣數據不會隨著容器的消失而消失。

四、倉庫

  鏡像構建完成後,可以很容易的在當前宿主機上運行,但是,如果需要在其它服務器上使用這個鏡像,我們就需要一個集中的存儲、分發鏡像的服務,Docker Registry 就是這樣的服務。

一個 Docker Registry 可以有多個 倉庫(Repository),每個倉庫可以含多個標簽(Tag),每個標簽都是一個鏡像。

  最初我沒有搞懂 Docker Registry 和 倉庫(Repository),簡單來說就是 Docker Registry 是註冊服務器,用於管理鏡像倉庫,起到服務器的作用,倉庫(Repository)就是存儲鏡像,起到存儲鏡像的作用。默認的 Docker Registry 就是 Docker Hub,其中擁有很多高質量的鏡像。

技術分享圖片

Docker 入門到實踐(二)Docker 三個基本概念