1. 程式人生 > >Docker(一):理解Docker映象與容器

Docker(一):理解Docker映象與容器

一、映象的概念

  1、廣泛映象概念:

    映象是一種檔案儲存形式,是冗餘的一種型別,一個磁碟上的資料在另一個磁碟上存在完全相同的副本即為映象。

  2、Docker映象概念:

    在Docker中映象同樣是一種完全相同的副本,以廣泛的映象來理解就很簡單了,Docker雖然在Linux系統中,但是內部又完全和Linux系統隔開。所以我們可用Docker來將自己的專案構建成映象。相當於把自己的專案程式碼複製一份到Docker系統裡。

二、如何解決專案執行時所需的生產環境

  問題很快產生,在Linux中已經安裝好的執行環境。使得我們專案可以正常執行,但是去到一個新系統中。專案那些生產環境豈不是需要重新安裝。而重新安裝又很麻煩。所以Docker對於這個處理就是可以用多個映象疊加在一起。如下圖:

 

   可看見映象是分層的,及上面一層依賴著下面的映象來執行。舉個例子:我們需要部署Java專案在Docker上,我們需要先從Docker中拉取jdk的映象作為基礎的映象,有了這個映象那麼Java專案就可進行編譯及運行了。所以Docker中的映象分層的概念可以理解為是在Linux系統中安裝對應的生產環境。而且DockerHub中同樣具有很全的映象,包括Ubuntu的映象與centos映象同樣存在。但是重點在於映象是隻讀的。我們能寫入的只有容器。

三、靜態容器

  對於靜態容器的定義和映象幾乎一模一樣,同樣是一堆層的統一視角,唯一區別是在於容器最上面那一層是可讀可寫的。可以理解為我們的專案基於下面執行環境搭建起來的映象併為它覆蓋上一層讀寫層,使得我們可以進入修改檔案。即容器=映象+讀寫層。這裡需要注意的是容器的定義並沒有說容器是否在執行。也就是容器可以執行也可以暫停。

 

 

四、執行中的容器

  在執行態中的容器被定義為一個可讀寫的統一檔案系統加上隔離的程序空間和包含其中的程序。如下圖:

  Docker擁有檔案隔離技術與程序隔離技術。在執行態的容器,可通過shell進入bash系統,內部的程序與檔案都是較外部系統獨立存在的,可通過讀寫層進行修改內部檔案

五、理解Dokcer中build命令

  在Docker中build是用來建立映象的命令,通常我們會使用Dockerfile來建立映象,而每次Dockerfile檔案開頭總是會有FROM欄位。結合上面我們所說映象是多層的來看,FROM就是底層映象,而我們當前需要build的映象需要以該映象作為基礎。映象的關鍵在於可不停疊加映象,直到我們把所需要的生產環境都部署好,再進行構建我們專案的映象即可。

六、理解Docker中create,start,run三種命令

  1、create

    docker create <image-id>命令可以理解為為指定映象新增一個讀寫層,就構成了容器,正如上面所說容器=映象+讀寫層。但此時容器並未執行起來。如下圖

 

   2、start

    docker start <container-id>命令是為容器的檔案系統建立了一個程序隔離空間,注意:每個容器只能有一個程序隔離空間,因為程序隔離所以外部的資訊訪問不到內部的,這時候就需要埠對映,將容器內的正在執行埠對映到外部Linux系統上。這樣就可以通過訪問Linux的埠從而訪問到Docker中。這個埠通常是我們專案接受請求的埠,比如MySQL要執行在Docker上需要對映3306埠等。這時候容器是屬於執行起來了的狀態。專案可以正常接收請求和釋出請求了。

  3、run

    docker run <image-id>這個命令相當於create+start,即如下圖:

 

七、總結

  上面的概念已經揭開Docker最神祕的面紗。讓我們知道Docker內部是一個什麼情況。為什麼需要構建映象,容器執行時為什麼要暴露埠等等一些最基礎的問題。而Docker技術現在也已經成為微服務架構時代最主流的部署方式,後面我們還會講如何編排服務。使得服務之間能正常通訊與執行。

 

    

 

 

 

 

  

&n