為什麼有docker
在開發中我們經常會遇到這樣的問題:我的代碼在本地是好好的,為什麼放到另一個環境上就跑不起來了呢?
這時候就牽扯到了另一個因素環境。我們的開發環境受制很多因素,比如我用win或者mac os開發的,但是部署到了centos上面了,造成的環境影響。還有配置,資料庫版本,等等一系列的問題。
因為環境的不同,當運維拿到我們的代碼的時候就會很頭疼。是以急切的希望出現一種技術來統一這些環境。你開發就不要隻送出代碼給我了,把你的代碼連着你的開發環境直接打包丢給我吧。或者說我來弄一套環境,你在我這上面開發。
是以這時候docker就出現了,來解決我們這些一套環境的問題。
什麼是docker
我們平時都在說開發應用程式,都是一種狹義的了解,到底何為應用應用程式?對于我們開發人員來說,可執行的war包,jar包,他算一個應用程式。他們又無法獨立運作,war包需要依賴tomcat提供的web環境,jar包需要jdk提供的api和環境支援。tomcat,jdk本身不是終端環境,他們又需要依附于作業系統。再往下走硬體環境又是對作業系統的支撐。
docker擴充了應用程式的概念,從狹義上的概念,擴充為廣義上。war包、jar包、Tomcat容器、MySQL資料庫隻能屬于狹義上的應用程式,而廣義上的應用程式應該包含可以支撐起他的整個依賴環境與配置。
前陣子我需要使用
ShowDoc
,百度安裝流程,缺發現他需要依賴
Nginx
做反向代理;同時有需要
Php環境
來動态生成靜态頁面。我明明隻想使用
ShowDoc
這個軟體,但是卻要這麼多的上層依賴,而docker認為單獨的一個完整的應用程式應該是:應用程式本身+其所有的依賴環境,docker把這一套東西,全部打包到一個
集裝箱
,我們拿到集裝箱後可以直接使用,而不需要再依賴于其他環境。
docker三要素
鏡像
鏡像簡單來說就是魔闆,Docker鏡像(image)就是一個隻讀的魔闆。鏡像可以用來建立Docker容器,一個鏡像可以建立很多容器。
docerk | 面向對象 |
---|---|
容器 | 對象 |
鏡像 | 類 |
User tig = new User();
User jay = new User();
User vae = new User();
容器
鏡像的執行個體,Docker利用容器獨立運作的一個或一組應用。容器是鏡像建立的運作執行個體。
它可以被啟動,開始,停止。每個容器都是互相隔離,保證安全的平台。
可以把容器看做是一個簡易版的Linux環境和運作在其中的應用程式
倉庫
倉庫(Repository)是幾種存放鏡像檔案的場所。
倉庫和倉庫注冊伺服器是由差別的。倉庫注冊伺服器上往往存放着多個倉庫,每個倉庫中又包含多個鏡像,每個鏡像有不同的标簽(tag)