Docker的思想來自于 集裝箱,集裝箱解決了什么問題?在一艘大船上,可以把貨物規整的擺放起來,并且各種各樣的貨物被集裝箱標準化了,集裝箱和集裝箱之間不會互相影響,那么我就不需要專門運送水果的船和專門運送化學品的船了,只要這些貨物在集裝箱里封裝的好好的,那我就可以用一艘大船把他們都運走,
docker就是類似的理念,現在都流行云計算了,云計算就好比大貨輪,docker就是集裝箱,
1.不同的應用程式可能會有不同的應用環境,比如.net開發的網站和php開發的網站依賴的軟體就不一樣,如果把他們依賴的軟體都安裝在一個服務器上就要除錯很久,而且很麻煩,還會造成一些沖突,比如IIS和Apache訪問埠沖突,這個時候你就要隔離.net開發的網站和php開發的網站,常規來講,我們可以在服務器上創建不同的虛擬機在不同的虛擬機上放置不同的應用,但是虛擬機開銷比較高,docker可以實作虛擬機隔離應用環境的功能,并且開銷比虛擬機小,小就意味著省錢了,
2.你開發軟體的時候用的是Ubuntu,但是運維管理的都是centos,運維在把你的軟體從開發環境轉移到生產環境的時候就會遇到一些Ubuntu轉centos的問題,比如:有個特殊版本的資料庫,只有Ubuntu支持,centos不支持,在轉移的程序當中運維就得想辦法解決這樣的問題,這時候要是有docker你就可以把開發環境直接封裝轉移給運維,運維直接部署你給他的docker就可以了,而且部署速度快,
3.在服務器負載方面,如果你單獨開一個虛擬機,那么虛擬機會占用空閑記憶體的,docker部署的話,這些記憶體就會利用起來,
總之docker就是集裝箱原理,
Java號稱“一次編譯,到處運行”,因為java虛擬機解決平臺的兼容性問題,所以有java虛擬機的地方就能跑java代碼;
Docker是:“一次封裝,到處運行”,因為docker解決了應用環境的問題,安裝了docker的平臺就能跑“docker包”,這樣就決絕了“開發環境能跑,一上線就崩”的尷尬,
二:為什么用docker
作為一種新興的虛擬化方式,Docker 跟傳統的虛擬化方式相比具有眾多的優勢,
Docker 在如下幾個方面具有較大的優勢:
更快速的交付和部署
Docker在整個開發周期都可以完美的輔助你實作快速交付,Docker允許開發者在裝有應用和服務本地容器做開發,可以直接集成到可持續開發流程中,
例如:開發者可以使用一個標準的鏡像來構建一套開發容器,開發完成之后,運維人員可以直接使用這個容器來部署代碼, Docker 可以快速創建容器,快速迭代應用程式,并讓整個程序全程可見,使團隊中的其他成員更容易理解應用程式是如何創建和作業的, Docker 容器很輕很快!容器的啟動時間是秒級的,大量地節約開發、測驗、部署的時間,
高效的部署和擴容
Docker 容器幾乎可以在任意的平臺上運行,包括物理機、虛擬機、公有云、私有云、個人電腦、服務器等, 這種兼容性可以讓用戶把一個應用程式從一個平臺直接遷移到另外一個,
Docker的兼容性和輕量特性可以很輕松的實作負載的動態管理,你可以快速擴容或方便的下線的你的應用和服務,這種速度趨近實時,
更高的資源利用率
Docker 對系統資源的利用率很高,一臺主機上可以同時運行數千個 Docker 容器,容器除了運行其中應用外,基本不消耗額外的系統資源,使得應用的性能很高,同時系統的開銷盡量小,傳統虛擬機方式運行 10 個不同的應用就要起 10 個虛擬機,而Docker 只需要啟動 10 個隔離的應用即可,
更簡單的管理
使用 Docker,只需要小小的修改,就可以替代以往大量的更新作業,所有的修改都以增量的方式被分發和更新,從而實作自動化并且高效的管理,
三:Docker引擎
docker引擎是一個c/s結構的應用,主要組件見下圖:
Server是一個常駐行程
REST API 實作了client和server間的互動協議
CLI 實作容器和鏡像的管理,為用戶提供統一的操作界面
四:Docker構架
Docker使用一個客戶端服務器c/b架構,Docker客戶端和Docker守護行程交流,Docker守護行程做非常重要的作業,構建,運行和分發你的Docker容器,Docker客戶端和守護行程可以運行在同樣的系統上,或者是你可以連接一個Docker客戶端到一個遠程Docker守護行程中,Docker客戶端和守護行程通過sockets或通過RESTful API進行溝通交流,
五:核心概念
鏡像(image)
Docker 鏡像(Image)就是一個只讀的模板,例如:一個鏡像可以包含一個完整的作業系統環境,里面僅安裝了 Apache 或用戶需要的其它應用程式,鏡像可以用來創建 Docker 容器,一個鏡像可以創建很多容器,Docker 提供了一個很簡單的機制來創建鏡像或者更新現有的鏡像,用戶甚至可以直接從其他人那里下載一個已經做好的鏡像來直接使用,
鏡像(Image)就是一堆只讀層(read-only layer)的統一視角,也許這個定義有些難以理解,看看下面這張圖:
右邊我們看到了多個只讀層,它們重疊在一起,除了最下面一層,其它層都會有一個指標指向下一層,這些層是Docker內部的實作細節,并且能夠在docker宿主機的檔案系統上訪問到,統一檔案系統(Union File System)技術能夠將不同的層整合成一個檔案系統,為這些層提供了一個統一的視角,這樣就隱藏了多層的存在,在用戶的角度看來,只存在一個檔案系統,
倉庫(repository)
倉庫(Repository)是集中存放鏡像檔案的場所,有時候會把倉庫和倉庫注冊服務器(Registry)混為一談,并不嚴格區分,實際上,倉庫注冊服務器上往往存放著多個倉庫,每個倉庫中又包含了多個鏡像,每個鏡像有不同的標簽(tag),
倉庫分為公開倉庫(Public)和私有倉庫(Private)兩種形式,最大的公開倉庫是 Docker Hub,存放了數量龐大的鏡像供用戶下載,國內的公開倉庫包括 時速云 、網易云 等,可以提供大陸用戶更穩定快速的訪問,當然,用戶也可以在本地網路內創建一個私有倉庫,
當用戶創建了自己的鏡像之后就可以使用 push 命令將它上傳到公有或者私有倉庫,這樣下次在另外一臺機器上使用這個鏡像時候,只需要從倉庫上 pull 下來就可以了,
Docker 倉庫的概念跟 Git 類似,注冊服務器可以理解為 GitHub 這樣的托管服務,
容器(container)
Docker 利用容器(Container)來運行應用,容器是從鏡像創建的運行實體,它可以被啟動、開始、停止、洗掉,每個容器都是相互隔離的、保證安全的平臺,可以把容器看做是一個簡易版的 Linux 環境(包括root用戶權限、行程空間、用戶空間和網路空間等)和運行在其中的應用程式,
容器的定義和鏡像幾乎一模一樣,也是一堆層的統一視角,唯一區別在于容器的最上面那一層是可讀可寫的,
一個運行態容器被定義為一個可讀寫的統一檔案系統加上隔離的行程空間和包含其中的行程,下面這張圖片展示了一個運行中的容器,
正是檔案系統隔離技術使得Docker成為了一個非常有潛力的虛擬化技術,一個容器中的行程可能會對檔案進行修改、洗掉、創建,這些改變都將作用于可讀寫層,
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/499550.html
標籤:其他
下一篇:docker最詳細的簡介說明
