對docker的簡單理解

依照慣例,在寫每一篇帖子之前,筆者都會遵循以下幾點原則:
  1、如果一個什麼都不懂的人都能把這篇文章看懂,那就說明這篇博客通俗易懂
  2、儘量保持排版整齊,讓讀者閱讀起來不是那麼累,簡單舒服即可
  3、儘可能的保證所寫的東西是正確的,若能幫到疑惑中的你一點點小作用,是筆者堅持寫下去的動力

在我們的項目從立項到研發到交付的這一系列過程中,總會有下面的情形,看是否你遇到過:

開發:我把全部代碼打包發給你,你去部署

運維:好的,我等你的部署包

運維:你的代碼是不是有問題啊,我這邊怎麼跑不起來

開發:在我的本地電腦上沒有問題呀,是不是你部署時,沒有配置好,再檢查一下

運維:。。。。。(心裏罵着一萬個草泥馬)

開發:肯定是運維的問題,要麼數據庫沒連好,要麼配置文件沒有配好,要麼對應的環境沒有添加好,要麼包含的文檔文件有問題,要麼......

運維:我都把配置文件和環境重新弄了好幾次,還是不行,就是你這邊開發的問題

開發:。。。。。。。

運維:。。。。。。。。。。

相信,正在看這篇博客的你深有體會或者已經腦補畫面能想象了。所以-----

先拋出一個問題:爲什麼會有docker出現?

  一款產品從開發到上線,從操作系統,到運行環境,再到應用配置。作爲開發+運維之間的協作,我們需要關心很多東西,這也是很多互聯網公司都不得不面對的問題,特別是各種版本的迭代之後,不同版本環境的兼容,對運維人員都是考驗。環境配置如此麻煩,換一臺機器,就要重來一次,費時費力。很多人就在想,能不能從根本上解決問題,軟件可以帶環境安裝?也就是說,安裝的時候,把原始環境一摸一樣的複製過來。開發人員利用docker可以消除協作編碼時“在我電腦上是正常的呀”的問題

Docker之所以發展如此迅速,也是因爲它對此給出了一個標準化的解決方案

  之前在服務器配置一個應用的運行環境,要安裝各種軟件,比如,java/tomcat/mysql/jdbc驅動包等等,還有各種中間件mqtt,zookeeper等等,安裝和配置這些東西有多麻煩就不說了,它還不能跨平臺。假如我們是在windows上安裝的這些環境,到了linux又得重新安裝。況且就算不跨操作系統,換另一臺同樣操作系統的服務器,要移植應用也是非常麻煩,相當於又要重複的部署。幾臺服務器還好說,萬一哪天領導安排一項任務,運維的同事要在40臺服務器上部署應用,每一臺都重新配置搞環境,豈不是忙不過來;假設,有一套已配置好的全家桶,直接放在每一臺服務器上就可以跑起來正常使用,那就方便多了。傳統上認爲,軟件編碼開發並測試結束後,所產出的成果即程序。而爲了讓這些程序可以順利執行,開發團隊也得準備完整的部署文件,讓運維團隊得以部署應用程序。開發需要清楚的告訴運維部署團隊,用的全部的配置文件+所有軟件環境。不過即便如此,也仍然常常發生部署失敗的狀況。Docker鏡像的設計,使得docker打破過去的舊觀念。透過鏡像(images)將作業系統核心除外,運作應用程序所需要的系統環境,由下而上打包,達到應用程序跨平臺間的無縫接軌運作

一、docker的基本概念

1.1 docker是什麼?

①Docker是基於Go語言實現的雲開源項目
②Docker的主要目標是“Build,Ship and Run Any App,Anywhere ”,構建、安裝、運行任何應用在任何平臺;也就是通過對應用組建的封裝、分發、部署、運行等生命週期的管理,使用戶的APP及其運行環境能夠做到“一次封裝,到處運行
③Linux容器技術的出現就解決了這樣的一個問題,而docker就是在它的基礎上發展過來的,將應用運行在docker容器上面,而docker容器在任何操作系統上都是一致的,這就實現了跨平臺、跨服務器。只需要一次配置好環境,換到別的機子上就可以一鍵部署,大大簡化了操作
一句話:解決了運行環境和配置問題軟件容器,方便做持續集成並有助於整體發佈的容器虛擬化技術

1.2 docker能幹什麼?

①Docker 和傳統虛擬化方式的不同之處
*傳統虛擬機技術是虛擬出一套硬件後,在其上運行一個完整操作系統,在該系統上再運行所需應用進程
*而容器內的應用進程直接運行於宿主機的內核,容器內沒有自己的內核,而且也沒有進行硬件虛擬,因爲,容器要比傳統虛擬機更爲輕便
*每個容器之間互相隔離,每個容器都有自己的文件系統,容器之間進程不會互相影響,能區分計算資源
②傳統虛擬機的缺點:
    資源佔用多,冗餘步驟多,啓動慢
③Docker的優勢:
    輕量、秒級的快速啓動速度
    簡單,易用
    標準統一的打包/部署/運行方案
    鏡像支持增量分發,易於部署
    易於構建,適合自動化測試和持續集成

1.3 docker去哪裏下載?

  docker官網:http://www.docker.com
  Docker中文網站:https://www.docker-cn.com/
  自學的話,下一個社區版就可以,免費使用就行

1.4 docker的三要素:鏡像、容器、倉庫

鏡像、容器、倉庫,怎麼來理解這三個概念?
①鏡像就是一個只讀的模板,鏡像可以用來創建docker容器,一個鏡像可以創建很多個容器
②容器是鏡像創建出來的實例,它可以被啓動、開始、停止、刪除。每個容器都是相互隔離的、保證安全的平臺。可以把容器看作是一個簡易版的Linux環境
③倉庫是集中存放鏡像文件的場所;倉庫和倉庫註冊服務器是有區別的。倉庫註冊服務器上往往存放着多個倉庫,每個倉庫中又包含了多個鏡像,每個鏡像有不同的標籤,
倉庫分爲公開倉庫和私有倉庫兩種形式,最大的公開倉庫是https://hub.docker.com/,裏面存放着數量龐大的鏡像供用戶下載。國內的公開倉庫包括阿里雲,網易雲等等。
---------需要正確理解以上三個要素的概念----------:
Docker本身就是一個容器運行載體或者稱之爲管理引擎。我們把應用程序和配置依賴打包好形成一個可交付的運行環境,這個打包好的運行環境就似乎image鏡像文件,只有通過這個鏡像文件才能生成Docker容器,image文件可以看作是容器的模板,docker根據image文件生成容器的實例同一個image文件,可以生產多個同時運行的容器實例。
*image文件生成的容器實例,本身也是一個文件,成爲鏡像文件
*一個容器運行一種服務,當我們需要的時候,就可以通過docker客戶創建一個對應的運行實例,也就是我們的容器
*至於倉儲,就是放了一堆鏡像的地方,我們可以把鏡像發佈到倉儲中,需要的時候,從倉儲中拉下來就可以了。

友情提示:Docker在windows系統下也能用

下一篇博客開始講怎麼安裝docker,有興趣的同學可以持續關注一下。

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