Docker 的神秘世界

2022-03-09 18:14:43 字數 2288 閱讀 9269

上圖就是 docker **的首頁,看了這簡短的解釋,相信你還是不知道它是何方神聖。

為了更好的理解 docker 是什麼,先來講個故事:

我需要蓋乙個房子,於是我搬石頭、砍木頭、畫圖紙、蓋房子。一頓操作,終於把這個房子蓋好了。

結果,住了一段時間,心血來潮想搬到海邊去。這時候按以往的辦法,我只能去海邊,再次搬石頭、砍木頭、畫圖紙、蓋房子。

煩惱之際,跑來乙個魔法師教會我一種魔法。這種魔法可以把我蓋好的房子複製乙份,做成「映象」,放在我的揹包裡。

等我到了海邊,就用這個「映象」,複製一套房子,拎包入住。

是不是很神奇?對應到我們的專案中來,房子就是專案本身,映象就是專案的複製,揹包就是映象倉庫。如果要動態擴容,從倉庫中取出專案映象,隨便複製就可以了。

build once,run anywhere! 一次搭建,處處執行。

不用再關注版本、相容、部署等問題,徹底解決了「上線即崩,無休止構建」的尷尬。

乙個做好的應用容器長得就好像乙個裝好了一組特定應用的虛擬機器一樣。

比如我現在想用 mysql 那我就找個裝好 mysql 的容器,執行起來,那麼我就可以使用 mysql 了。

那麼我直接裝個 mysql不就好了,何必還需要這個容器這麼詭異的概念?

話是這麼說,可是你要真裝 mysql 的話可能要再裝一堆依賴庫,根據你的作業系統平台和版本進行設定,有時候還要從源**編譯報出一堆莫名其妙的錯誤,可不是這麼好裝。而且萬一你機器掛了,所有的東西都要重新來,可能還要把配置在重新弄一遍。但是有了容器,你就相當於有了乙個可以執行起來的虛擬機器,只要你能執行容器,mysql 的配置就全省了。而且一旦你想換台機器,直接把這個容器端起來,再放到另乙個機器就好了。硬體,作業系統,執行環境什麼的都不需要考慮了。

在公司中的乙個很大的用途就是可以保證線下的開發環境、測試環境和線上的生產環境一致。

我們經常碰到這樣的事情,開發把東西做好了給測試去測,一般會給一坨**和乙個介紹上線步驟的上線單。結果**在測試機跑不起來,開發就跑來跑去看問題,一會兒啊這個配置檔案忘了提交了,一會兒啊這個上線命令寫錯了。找到了乙個 bug 提上去,開發一看,啊我怎麼又忘了把這個命令寫在上線單上了。類似的事情在上線的時候還會發生,變成啊你這個軟體的版本和我機器上的不一樣,所以上線的時候大家總是膽戰心驚。

如果利用容器的話,那麼開發直接在容器裡開發,提測的時候把整個容器給測試,測好了把改動改在容器裡再上線就好了。通過容器,整個開發、測試和生產環境可以保持高度的一致。

此外容器也和 vm(虛擬機器)一樣具有著一定的隔離性,各個容器之間的資料和記憶體空間相互隔離,可以保證一定的安全性。

那麼既然容器和 vm 這麼類似為啥不直接用 vm 還要整出個容器這麼個概念來呢?

docker 容器相對於 vm 有以下幾個優點:

為啥相似的功能在效能上會有如此巨大的差距呢,其實這和他們的設計的理念是相關的。

vm(虛擬機器) 的設計圖如下:

vm(虛擬機器)的 hypervisor 需要實現對硬體的虛擬化,並且還要搭載自己的作業系統,自然在啟動速度和資源利用率以及效能上有比較大的開銷。

而 docker 的設計圖是這樣的:

docker 幾乎就沒有什麼虛擬化的東西,並且直接復用了 host 主機的 os,在 docker engine 層面實現了排程和隔離重量一下子就降低了好幾個檔次。 docker 的容器利用了 lxc,管理利用了 namespaces 來做許可權的控制和隔離, cgroups 來進行資源的配置,並且還通過 aufs 來進一步提高檔案系統的資源利用率。

docker 是 用 go 語言編寫的,源**託管在 github 而且居然只有 1w 行就完成了這些功能。

docker 是一種容器技術,相比 vm 而言,屬於輕量級的虛擬化。

docker 技術的三大核心概念,分別是:映象 image、容器 container、倉庫 repository。

通過 docker 技術可以做到搭建一次環境或安裝一次軟體,將其打包為 docker 映象,就可以在任意地方直接執行,而且環境和之前完全一致,執行結果相同。

有了 docker 後,再也不用擔心開發環境、測試環境以及部署上線環境存在環境不一致的問題了。

開啟神秘程式設計世界的大門

從 2000 年畢業,我做這行已經超過十二年了。最初接觸電腦程式,還是 dos 下的 qbasic 那已經離現在有接近二十年了。最初,我只是會照貓畫虎,按照老師的程式抄個素數數列,或者列印個三角形什麼的。初步理解程式的結構和意義,要等到讀大學以後了。那個時候在老師的鼓勵下,自己買書學習 delphi...

進入docker的世界

最近學習machine learning發現好多人都用docker,之前一直聽說但是感覺和自己無關。但是現在發現原來docker是個這麼方便的東西,可以跨平台 不分什麼版本的linux,甚至mac和windows也行 執行。所以這裡開一篇來記錄學習感受。參考 docker 完全指南 參考 gitbo...

神秘的Docker安裝加簡單映象安裝

先整個vmwork 裝個centos7 然後再裝個圖形化介面 配置nat模式 修改 dns114.114.114.114或者8.8.8.8 設定靜態ip就是那個啥 bootproto static 然後設定網段和本機一樣的192.168.239.66 最後在linux開啟命令視窗 ping www....