對docker的簡單理解

2022-09-22 04:36:09 字數 2207 閱讀 3573

依照慣例,在寫每一篇帖子之前,筆者都會遵循以下幾點原則:

1、如果乙個什麼都不懂的人都能把這篇文章看懂,那就說明這篇部落格通俗易懂

2、盡量保持排版整齊,讓讀者閱讀起來不是那麼累,簡單舒服即可

3、盡可能的保證所寫的東西是正確的,若能幫到疑惑中的你一點點小作用,是筆者堅持寫下去的動力

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

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

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

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

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

運維:。。。。。(心裡罵著一萬個草泥馬)

開發:肯定是運維的問題,要麼資料庫沒連好,要麼配置檔案沒有配好,要麼對應的環境沒有新增好,要麼包含的文件檔案有問題,要麼......

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

開發:。。。。。。。

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

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

先丟擲乙個問題:為什麼會有docker出現?

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

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

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

一句話:解決了執行環境和配置問題軟體容器,方便做持續整合並有助於整體發布的容器虛擬化技術

①docker 和傳統虛擬化方式的不同之處

*傳統虛擬機器技術是虛擬出一套硬體後,在其上執行乙個完整作業系統,在該系統上再執行所需應用程序

*而容器內的應用程序直接執行於宿主機的核心,容器內沒有自己的核心,而且也沒有進行硬體虛擬,因為,容器要比傳統虛擬機器更為輕便

*每個容器之間互相隔離,每個容器都有自己的檔案系統,容器之間程序不會互相影響,能區分計算資源

②傳統虛擬機器的缺點:

資源占用多,冗餘步驟多,啟動慢

③docker的優勢:

輕量、秒級的快速啟動速度

簡單,易用

標準統一的打包/部署/執行方案

映象支援增量分發,易於部署

易於構建,適合自動化測試和持續整合

docker官網:

docker中文**:

自學的話,下乙個社群版就可以,免費使用就行

映象、容器、倉庫,怎麼來理解這三個概念?

①映象就是乙個唯讀的模板,映象可以用來建立docker容器,乙個映象可以建立很多個容器

②容器是映象建立出來的例項,它可以被啟動、開始、停止、刪除。每個容器都是相互隔離的、保證安全的平台。可以把容器看作是乙個簡易版的linux環境

對buffer的簡單理解

定義了乙個bufffer byte buf new byte 0x100000 說明 首先定義乙個buffer,說白了就是申請一塊記憶體空間,new返回的是乙個指標,所以這裡的宣告有錯的,應該這樣 byte pbuf new byte 0x100000 如果申請成功,則返回了該記憶體空間的首位址,如...

對for迴圈的簡單理解

初步的了解了while迴圈的過程,感覺每次執行while語句都需要測試val的值,測試太頻繁了 然而for語句可以簡化並管理迴圈變數,一句話。哈哈 還是同樣的條件,0遞加到10的和,現在用for語句實現 include int main using namespace std 這個是命名庫,以前沒有...

對委託的簡單理解

在程式設計過程中,我們習慣把資料作為引數傳遞給方法 例 int a int.parse 20 是否能將乙個方法傳遞給另乙個方法呢?是不是聽起來有點奇怪!執行緒大家應該熟悉吧,在計算機中並行執行新的執行序列同時執行當前的任務,這個新的序列就是執行緒。在thread 的乙個例項上使用方法start 就可...