日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

【科普】什么是Docker?看这一篇干货文章就够了!

發布時間:2025/3/8 编程问答 19 豆豆
生活随笔 收集整理的這篇文章主要介紹了 【科普】什么是Docker?看这一篇干货文章就够了! 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

作為程序員我們應怎樣理解docker?

容器技術的起源

假設你們公司正在秘密研發下一個“今日頭條”APP,我們姑且稱為明日頭條,程序員自己從頭到尾搭建了一套環境開始寫代碼,寫完代碼后程序員要把代碼交給測試同學測試,這時測試同學開始從頭到尾搭建這套環境,測試過程中出現問題程序員也不用擔心,大可以一臉無辜的撒嬌,“明明在人家的環境上可以運行的”。

測試同學測完后終于可以上線了,這時運維同學又要重新從頭到尾搭建這套環境,費了九牛二虎之力搭建好環境開始上線,糟糕,上線系統就崩潰了,這時心理素質好的程序員又可以施展演技了,“明明在人家的環境上可以運行的”。

從整個過程可以看到,不但我們重復搭建了三套環境還要迫使程序員轉行演員浪費表演才華,典型的浪費時間和效率,聰明的程序員是永遠不會滿足現狀的,因此又到了程序員改變世界的時候了,容器技術應運而生。

有的同學可能會說:“等等,先別改變世界,我們有虛擬機啊,VMware好用的飛起,先搭好一套虛擬機環境然后給測試和運維clone出來不就可以了嗎?”

在沒有容器技術之前,這確實是一個好辦法,只不過這個辦法還沒有那么好。

先科普一下,現在云計算其底層的基石就是虛擬機技術,云計算廠商買回來一堆硬件搭建好數據中心后使用虛擬機技術就可以將硬件資源進行切分了,比如可以切分出100臺虛擬機,這樣就可以賣給很多用戶了。

你可能會想這個辦法為什么不好呢?

容器技術 vs 虛擬機

我們知道和一個單純的應用程序相比,操作系統是一個很重而且很笨的程序,簡稱笨重,有多笨重呢?

我們知道操作系統運行起來是需要占用很多資源的,大家對此肯定深有體會,剛裝好的系統還什么都沒有部署,單純的操作系統其磁盤占用至少幾十G起步,內存要幾個G起步。

假設我有一臺機器,16G內存,需要部署三個應用,那么使用虛擬機技術可以這樣劃分:

在這臺機器上開啟三個虛擬機,每個虛擬機上部署一個應用,其中VM1占用2G內存,VM2占用1G內存,VM3占用了4G內存。

我們可以看到虛擬本身就占據了總共7G內存,因此我們沒有辦法劃分出更多虛擬機從而部署更多的應用程序,可是我們部署的是應用程序,要用的也是應用程序而不是操作系統

如果有一種技術可以讓我們避免把內存浪費在“無用”的操作系統上豈不是太香?這是問題一,主要原因在于操作系統太重了。

還有另一個問題,那就是啟動時間問題,我們知道操作系統重啟是非常慢的,因為操作系統要從頭到尾把該檢測的都檢測了該加載的都加載上,這個過程非常緩慢,動輒數分鐘,因此操作系統還是太笨了。

那么有沒有一種技術可以讓我們獲得虛擬機的好處又能克服這些缺點從而一舉實現魚和熊掌的兼得呢?

答案是肯定的,這就是容器技術。

什么是容器

容器一詞的英文是container,其實container還有集裝箱的意思,集裝箱絕對是商業史上了不起的一項發明,大大降低了海洋貿易運輸成本。讓我們來看看集裝箱的好處:

  • ?集裝箱之間相互隔離

  • ?長期反復使用

  • ?快速裝載和卸載

  • ?規格標準,在港口和船上都可以擺放

回到軟件中的容器,其實容器和集裝箱在概念上是很相似的。

現代軟件開發的一大目的就是隔離,應用程序在運行時相互獨立互不干擾,這種隔離實現起來是很不容易的,其中一種解決方案就是上面提到的虛擬機技術,通過將應用程序部署在不同的虛擬機中從而實現隔離。

但是虛擬機技術有上述提到的各種缺點,那么容器技術又怎么樣呢?

與虛擬機通過操作系統實現隔離不同,容器技術只隔離應用程序的運行時環境但容器之間可以共享同一個操作系統,這里的運行時環境指的是程序運行依賴的各種庫以及配置。

從圖中我們可以看到容器更加的輕量級且占用的資源更少,與操作系統動輒幾G的內存占用相比,容器技術只需數M空間,因此我們可以在同樣規格的硬件上大量部署容器,這是虛擬機所不能比擬的,而且不同于操作系統數分鐘的啟動時間容器幾乎瞬時啟動,容器技術為打包服務棧提供了一種更加高效的方式,So cool。

那么我們該怎么使用容器呢?這就要講到docker了。

注意,容器是一種通用技術,docker只是其中的一種實現。

什么是docker

docker是一個用Go語言實現的開源項目,可以讓我們方便的創建和使用容器,docker將程序以及程序所有的依賴都打包到docker container,這樣你的程序可以在任何環境都會有一致的表現,這里程序運行的依賴也就是容器就好比集裝箱,容器所處的操作系統環境就好比貨船或港口,程序的表現只和集裝箱有關系(容器),和集裝箱放在哪個貨船或者哪個港口(操作系統)沒有關系

因此我們可以看到docker可以屏蔽環境差異,也就是說,只要你的程序打包到了docker中,那么無論運行在什么環境下程序的行為都是一致的,程序員再也無法施展表演才華了,不會再有“在我的環境上可以運行”,真正實現“build once, run everywhere”。

此外docker的另一個好處就是快速部署,這是當前互聯網公司最常見的一個應用場景,一個原因在于容器啟動速度非常快,另一個原因在于只要確保一個容器中的程序正確運行,那么你就能確信無論在生產環境部署多少都能正確運行。

如何使用docker

docker中有這樣幾個概念:

  • dockerfile

  • image

  • container

實際上你可以簡單的把image理解為可執行程序,container就是運行起來的進程。

那么寫程序需要源代碼,那么“寫”image就需要dockerfile,dockerfile就是image的源代碼,docker就是"編譯器"。

因此我們只需要在dockerfile中指定需要哪些程序、依賴什么樣的配置,之后把dockerfile交給“編譯器”docker進行“編譯”,也就是docker build命令,生成的可執行程序就是image,之后就可以運行這個image了,這就是docker run命令,image運行起來后就是docker container。

具體的使用方法就不再這里贅述了,大家可以參考docker的官方文檔,那里有詳細的講解。

docker是如何工作的

實際上docker使用了常見的CS架構,也就是client-server模式,docker client負責處理用戶輸入的各種命令,比如docker build、docker run,真正工作的其實是server,也就是docker demon,值得注意的是,docker client和docker demon可以運行在同一臺機器上。

接下來我們用幾個命令來講解一下docker的工作流程:

1,docker build

當我們寫完dockerfile交給docker“編譯”時使用這個命令,那么client在接收到請求后轉發給docker daemon,接著docker daemon根據dockerfile創建出“可執行程序”image。

2,docker run

有了“可執行程序”image后就可以運行程序了,接下來使用命令docker run,docker daemon接收到該命令后找到具體的image,然后加載到內存開始執行,image執行起來就是所謂的container。

3,docker pull

其實docker build和docker run是兩個最核心的命令,會用這兩個命令基本上docker就可以用起來了,剩下的就是一些補充。

那么docker pull是什么意思呢?

我們之前說過,docker中image的概念就類似于“可執行程序”,我們可以從哪里下載到別人寫好的應用程序呢?很簡單,那就是APP Store,即應用商店。與之類似,既然image也是一種“可執行程序”,那么有沒有"Docker Image Store"呢?答案是肯定的,這就是Docker Hub,docker官方的“應用商店”,你可以在這里下載到別人編寫好的image,這樣你就不用自己編寫dockerfile了。

docker registry 可以用來存放各種image,公共的可以供任何人下載image的倉庫就是docker Hub。那么該怎么從Docker Hub中下載image呢,就是這里的docker pull命令了。

因此,這個命令的實現也很簡單,那就是用戶通過docker client發送命令,docker daemon接收到命令后向docker registry發送image下載請求,下載后存放在本地,這樣我們就可以使用image了。

最后,讓我們來看一下docker的底層實現。

docker的底層實現

docker基于Linux內核提供這樣幾項功能實現的:

  • NameSpace

    我們知道Linux中的PID、IPC、網絡等資源是全局的,而NameSpace機制是一種資源隔離方案,在該機制下這些資源就不再是全局的了,而是屬于某個特定的NameSpace,各個NameSpace下的資源互不干擾,這就使得每個NameSpace看上去就像一個獨立的操作系統一樣,但是只有NameSpace是不夠。

  • Control groups

    雖然有了NameSpace技術可以實現資源隔離,但進程還是可以不受控的訪問系統資源,比如CPU、內存、磁盤、網絡等,為了控制容器中進程對資源的訪問,Docker采用control groups技術(也就是cgroup),有了cgroup就可以控制容器中進程對系統資源的消耗了,比如你可以限制某個容器使用內存的上限、可以在哪些CPU上運行等等。

有了這兩項技術,容器看起來就真的像是獨立的操作系統了。

總結

docker是目前非常流行的技術,很多公司都在生產環境中使用,但是docker依賴的底層技術實際上很早就已經出現了,現在以docker的形式重新煥發活力,并且能很好的解決面臨的問題,希望本文能對大家理解docker有所幫助。

—————END—————

往期精彩回顧適合初學者入門人工智能的路線及資料下載機器學習及深度學習筆記等資料打印機器學習在線手冊深度學習筆記專輯《統計學習方法》的代碼復現專輯 AI基礎下載機器學習的數學基礎專輯獲取一折本站知識星球優惠券,復制鏈接直接打開:https://t.zsxq.com/662nyZF本站qq群1003271085。加入微信群請掃碼進群(如果是博士或者準備讀博士請說明):

總結

以上是生活随笔為你收集整理的【科普】什么是Docker?看这一篇干货文章就够了!的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 九九这里只有精品视频 | 国产精品jizz在线观看无码 | 国产jjizz一区二区三区视频 | 国产精品香蕉在线观看 | 瑟瑟视频在线免费观看 | 国产精品成人电影在线观看 | 欧美视频导航 | 国产精品美女av | 精品黑人一区二区三区观看时间 | 午夜视频入口 | 一女被多男玩喷潮视频 | 99精品欧美一区二区三区 | 亚洲欧美自拍偷拍 | 精品欧美一区二区精品少妇 | 一区二区久久久 | 成人国产亚洲 | 久久在线一区二区 | 爱爱的网站 | 国产大片在线观看 | 天天曰夜夜操 | 日韩欧美一区二 | 蜜桃av色偷偷av老熟女 | 老地方在线观看免费动漫 | 天天爽天天爽天天爽 | 97久久久久久 | 成人性生活免费视频 | 日韩一级网站 | 精品国产午夜福利在线观看 | 91偷拍富婆spa盗摄在线 | 综合久久亚洲 | 伊人91视频| 国产精品一区二三区 | 一区二区高清视频 | mm131在线 | 香蕉久操| 欧美高清hd18日本 | 日韩激情片| 日韩欧美在线不卡 | 亚洲av永久无码精品三区在线 | 日本夫妻性生活视频 | 在线永久看片免费的视频 | 韩国jizz| 人妻无码一区二区三区四区 | 绿帽视频 | 欧美丰满熟妇bbb久久久 | 亚洲熟妇国产熟妇肥婆 | 日本在线视频中文字幕 | 亚洲午夜片 | 天堂av.com| 国产精品久久久久久免费 | 欧美日韩中文字幕在线播放 | 欧美 亚洲 激情 一区 | 啪啪免费视频网站 | 一本久道视频一本久道 | 美女午夜影院 | 国产特黄一级片 | 欧美做爰全过程免费看 | 黄色免费网页 | 理论片午午伦夜理片影院99 | 国产免费av一区 | 精品一区二区在线观看视频 | 日韩一区二区三区四区五区 | 亚洲精选久久 | 18禁免费观看网站 | 欧美性大战久久久久久 | 蜜臀麻豆| 午夜视频大全 | 国产专区在线视频 | 美女露出让男生揉的视频 | 精品欧美一区二区三区久久久 | 污污免费视频 | 久久久久久国产精品免费免费 | 国产精品丝袜视频 | 亚洲人成无码网站久久99热国产 | 国产精品国产三级国产aⅴ浪潮 | 日韩操| 国产h自拍 | 亚洲插插插 | 国产免费一区二区三区在线播放 | 亚洲欲色| 欧美青青草 | 密臀av一区二区 | 中文字幕精品亚洲 | 九热视频在线观看 | 最新理伦片eeuss影院 | 日韩中文字幕免费观看 | 人人爱爱| 少妇大叫太粗太大爽一区二区 | 日本精品一区二区视频 | 国内精品久久久久久久久久久 | 亚洲激情久久 | 亚洲成人av中文字幕 | 欧美激情自拍 | 91香蕉视频黄 | 三级色视频 | 国产成人精品久久二区二区91 | 国产理论片在线观看 | 污视频网站免费在线观看 | 夜夜爽妓女8888视频免费观看 |