1. 程式人生 > >1、為什麼使用docker?之docker簡介

1、為什麼使用docker?之docker簡介

使用Docker可以很方便的建立和管理映象,以及管理已經生成的和正在執行的容器。那麼為什麼使用映象和容器呢?映象是一種檔案儲存方式,可以把許多檔案(如:一個jar包或多個jar)做成一個映象檔案。例如可以把一個作業系統做成一個GHOST映象,我們在其他地方用到的時候,只需要把這個映象拷貝過去,然後就可以用來重灌作業系統了。是不是很方便呢?我只需要製作一個映象,就可以在多個地方去使用啦。好了回到我們現在說的docker。大家想試想想平時搭建跑jar專案是不是要在一臺電腦上跑,而且有它的一套執行規則。你現在也可以把docker當成是你的一臺電腦(當然它是一個虛假的電腦),他也有一套自己的執行規則。所以在docker上執行程序的時候我們要遵循docker的規則。
首先,我們得到別人的映象庫拉取(pull)下來。簡單粗暴理解為下載能夠在docker執行的程式。然後,我們在拉取下來的映象庫,新增進新的東西。就別我想在原來映象的基礎上新增多個一個jar程式,這樣我們就構建( build)成了一個全新的屬於你自己的映象啦。最後,你就可以執行(run)這個屬於你的映象啦。這個進行就會執行在你docker的容器中。嗯嗯,整個過程就是這麼的簡單。所以呀!!??所以什麼呀?所以你從現在開始應該要知道,docker有三大元件了。以後用他就要記住她。什麼三大元件呀?請往下看:
1、docker倉庫 (Registy)     docker 倉庫是什麼鬼?它英文名叫 Docker Registy。我們都是新手小白,剛開始學習,就當理解為App Store吧,反正就是一個用來存放檔案程式的公共的地方。只是它不是用來存放蘋果app。它是用來存放能夠提供docker執行的映象檔案,一般有很多大牛啊,大神,大公司啊什麼的放了一些好用的映象到上面給我們用了,我們可以pull下來直接使用。通常一個倉庫會包含一個映象的不同版本,所以會用不同的標籤是定義它。人家通常是通過<映象名>:<標籤>的格式來指定是哪個版本的映象,如果那人比較懶,不去定義標籤。那麼就會預設將以latest作為預設標籤。所以後你成了大神,上傳映象到倉庫的時候不要那麼偷懶啊。
      docker倉庫有2種,一種是上面說的大夥兒都能下下載的。大神們叫它做公共倉庫。為什麼叫公共倉庫。因為很多大神有私有祕密,他們技術又厲害,所以學會了搭建屬於自己的倉庫,這種屬於他們私有的叫私有倉庫,為什麼這樣叫,因為很多大神會在自己公司建立自己的私有倉庫放自己的軟體包上去,這樣他不讓你下載只讓他的團隊去用。能增加許可權想給誰訪問就給誰訪問。這個大夥兒後面再學吧,先用別人的倉庫下載別人的東西跑起來再說。2、docker映象(Images)     docker映象,一個能夠執行在docker容器上的一組程式檔案。他說白了她就是一個能夠在docker容器執行的軟體,只是它的媽媽曾經給她起了個漂亮的名字叫映象,方便大夥兒認識,好記住,能夠第一時間知道她。它提供了容器執行時所需的程式、庫、資源、配置等檔案外,還包含了一些為執行時準備的一些配置引數(如匿名卷、環境變數、使用者等),是一個完整的root檔案系統。映象不包含任何動態資料,原始內容在構建之後也不會被改變。我們下載它後就可以在她的基礎(剛下載下來的映象我們可以叫它做基礎層)上增加一層我們的程式了,這樣新的映象就誕生了。我們可以給它取個新名字,新的版本後,一切就緒。我們可以一層一層的新增自己的程式,後面任何一層的改變都不會影響前面一層的,所以的改變只會發現在自己這一層,這樣我們後面很方便的複用。好了,一切搞定也不說那麼多了,構建好它就可以在docker容器上跑了,下面會繼續說的。
映象構建方式:
  •   通過Dockerfile檔案構建(這種用得非常多)
  •   通過容器構建
3、docker容器(Container)     容器,就是執行程式的載體。開發好的軟體還得找個作業系統來跑吧,所以容器就是這個作用。映象(Image)和容器(Container)的關係,就像是面向物件程式設計中的類和例項一樣,映象是靜態的定義,容器是映象執行時的實體。容器可以被建立、啟動、停止、刪除、暫停等。     容器的實質是程序,但與直接在宿主執行的程序不同,容器程序運行於屬於自己的獨立的 名稱空間。因此容器可以擁有自己的 root 檔案系統、自己的網路配置、自己的程序空間,甚至自己的使用者 ID 空間。容器內的程序是執行在一個隔離的環境裡,使用起來,就好像是在一個獨立於宿主的系統下操作一樣。   這種特性使得容器封裝的應用比直接在宿主執行更加安全。也因為這種隔離的特性,很多人初學 Docker 時常常會把容器和虛擬機器搞混。    前面講過映象使用的是分層儲存,容器也是如此。每一個容器執行時,是以映象為基礎層,在其上建立一個當前容器的儲存層,我們可以稱這個為容器執行時讀寫而準備的儲存層為容器儲存層。    容器儲存層的生存週期和容器一樣,容器消亡時,容器儲存層也隨之消亡。因此,任何保存於容器儲存層的資訊都會隨容器刪除而丟失。    按照 Docker 最佳實踐的要求,容器不應該向其儲存層內寫入任何資料,容器儲存層要保持無狀態化。所有的檔案寫入操作,都應該使用 資料卷(Volume)、或者繫結宿主目錄,在這些位置的讀寫會跳過容器儲存層,直接對宿主(或網路儲存)發生讀寫,其效能和穩定性更高。    資料卷的生存週期獨立於容器,容器消亡,資料卷不會消亡。因此,使用資料卷後,容器可以隨意刪除、重新 run,資料卻不會丟失。    廢話了那麼多,如果你是大神請略過。小白可以繼續關注下一篇更新。