什么是 docker?
來源:互聯(lián)網(wǎng)偵察
作者:channingbreeze

話說小史已經(jīng)接受了A廠的offer,這不,已經(jīng)在公司附近租好了房子,準(zhǔn)備搬家過去住了。
家里的東西真是多呀,小史的很多家具都是組裝起來的,現(xiàn)在都已經(jīng)拆散放到呂老師的車上了。
就這樣,呂老師開車帶著小史一起去了公司附近的新住址。
開了一個多小時,終于到了新住址。一進房間,小史就忙著把心愛的電腦桌拼起來。
但是電腦桌拆起來快,裝起來可不好裝,幾十個組件,一百多個螺絲釘,小史裝了一下午,最后還發(fā)現(xiàn)少了幾個螺絲釘。

【晚飯】
晚上,小史和呂老師一起吃飯。






【呂老師前傳】
呂老師以前還是程序員的時候,在B廠上班,有一次一個新項目要發(fā)布上線。結(jié)果測試環(huán)境跑得好好的,生產(chǎn)環(huán)境死活跑不起來。

【docker有啥好】

小史:docker我用過,不過當(dāng)時是因為視頻教程里用的docker部署的環(huán)境,所以我也就跟著做了,其實反而覺得更麻煩了,它到底哪里好呢?









呂老師:這方面docker做了很多事情,比如提供了基礎(chǔ)鏡像的方式,docker官方的鏡像倉庫里有很多鏡像,可以直接拉下來用,然后新的鏡像可以以它們?yōu)榛A(chǔ),在上面commit新的東西。


呂老師:同時,docker使用了鏡像分層的技術(shù),新的commit會產(chǎn)生新的層,可以復(fù)用一部分老的層。這樣一來制作新鏡像的速度還是挺快的。


小史:我明白你的意思,這樣確實制作鏡像的時候可以加快速度,但是假如我要把整個環(huán)境放到另外一個機器部署,還是要拷貝整個大的鏡像過去吧?

【dockerfile】

呂老師:你說的對,電腦桌不拆,直接放我車上放不下,那么能不能這樣,我們拆的時候,就把哪個螺絲在哪里這些細(xì)節(jié)記錄好,到時候裝的時候只要按照記錄順序安裝就好。







呂老師:你看,就這個簡單的文件。第一行它告訴你這個鏡像基于ubuntu基礎(chǔ)鏡像,第二行告訴你這個鏡像的維護者的信息,第三行的RUN就是要執(zhí)行的shell命令,比如這里,是在ubuntu的基礎(chǔ)鏡像上安裝一些額外的東西,第4行是鏡像啟動之后執(zhí)行的初始命令。



【docker最佳實踐】









呂老師:其實在網(wǎng)絡(luò)好的情況下,下載一個鏡像一般來說比重新打一個鏡像更快,所以最終部署都是基于鏡像去部署,不會重新打鏡像了。



【docker關(guān)鍵概念】





呂老師:你說的沒錯,其實鏡像有點像代碼,容器有點像進程。代碼是存放在硬盤上的東西,而把代碼運行起來,就會形成一個進程,進程才是跑起來的程序。

小史:對,你這個比喻真是貼切,鏡像和容器也是一樣,鏡像是存在硬盤上的東西,鏡像運行起來,就形成一個容器,容器才是真正跑起來的程序。只不過在docker中,我們可以進入容器,做一些操作,然后再把容器中的改動提交形成一個新的鏡像。


小史:如果說鏡像是代碼的話,鏡像倉庫就有點像github了,我們寫好的代碼會提交到github上面進行保存和管理,方便在其他地方也能下載代碼。鏡像倉庫也是類似的,制作好的鏡像,就把它放到鏡像倉庫,方便其他人直接用鏡像部署。

【筆記】
聊天結(jié)束后,小史悄悄在手機中記錄下了這次的筆記。
一、容器技術(shù)docker的思考方式是,將環(huán)境一起打包鏡像,避免部署時的環(huán)境問題。
二、dockerfile記錄鏡像的制作步驟
三、鏡像、容器、倉庫的概念可以類比代碼、進程、github
【飯后】
吃完晚飯,小史和呂老師走在大街上,望著天上的星空。





我整理了幾百本CS相關(guān)的電子書,全部都放在了這個Github:https://github.com/iamshuaidi/CS-Book(點擊閱讀原文直達(dá),電腦打開更佳)
推薦閱讀
全部文章分類與整理(算法+數(shù)據(jù)結(jié)構(gòu)+計算機基礎(chǔ)),持續(xù)更新
【吐血整理】那些讓你起飛的計算機基礎(chǔ)知識:學(xué)什么,怎么學(xué)?
寫公眾號15個月以來,這一路上的學(xué)習(xí)與收獲
2020 第一篇原創(chuàng) | 我是如何讓自己變的更加優(yōu)秀的?
