容器霸業:5 比武大會

武道會

天下第一容器武道會即將召開,作為初入容器功法的門派,掌門希望選派優秀的弟子前去參會。掌門和幾位長老商議后,決定派遣大師兄和三位優秀的弟子前往。

眾弟子聽聞,紛紛自薦要求前往。掌門見大家如此積極,甚是欣慰,但是名額有限,所以決定舉辦門派內部的容器功法比試,選出最優秀的三名弟子。

小刀也是心潮澎湃,非常想去,但是想到自己資歷太淺,恐怕連內部比試登臺的機會都沒有。

這天,小刀仍舊像往常一樣早起練功。大師兄和陸師兄一道路過,小刀趕緊收功問好,大師兄問道:“小刀,早啊!又在勤奮苦練了啊,是在準備比試嗎?”

“嗯~哦,沒,沒有,大師兄,我的功力太淺,沒有報名。”小刀支支吾吾地說。

“嗯?為什么不報名試試呢?”大師兄問道。

“小刀這樣做還是對的,比試沒有什么勝算,還是專心練功,爭取下次再去。”陸師兄說到。

大師兄遲疑了一會,說到,“這次機會難得,不過門派內部確實競爭激烈?!?/p>

“可不是嘛!你知道嗎?”陸師兄忿忿地說到,“就連剛來的幾個弟子都爭著報名了,不知道他們能有什么資格!”

“掌門的意思,大家都有機會嘛。”大師兄說到。

小刀一直默默地站在原地,不敢搭話,目送兩位師兄走遠。

“誒~還是專心練功吧!”小刀心想,“我也是剛來沒多久,肯定是輪不上我的。”

上吧,小刀

“小刀,大師兄找你!”小胖沖進來就喊,“在干嘛呢?”

小刀一臉詫異的看著氣喘吁吁的小胖,這小胖是和他一起入門的弟子,平時憨憨的,剛入門的時候兩人就互相幫助,因此關系最好。

“還在磨嘰啥啊?快,大師兄剛找你呢!”小胖邊說邊拉著小刀就往外走。

“大師兄找我干啥呀?”小刀很疑惑。

“我哪知道,剛開完會就說要找你?!毙∨趾俸僖恍?,“你小子的鴻運要來了唄!”

大師兄見小胖和小刀走來,放下手中的書稿,起身說到:“小刀,小胖,來的正好,我有話要說?!?/p>

小刀和小胖趕緊作揖。來的路上,小刀就感覺有些心慌,“大師兄為什么突然找我,難道是我做錯了什么?”

“門派比試你們都知道吧,掌門的意思是人人都可參與。小刀,你不是對容器功法很有興趣么,我看你可沒報名???”大師兄問道。

“我才疏學淺,就不去給大家添亂了。”小刀回道。

“怎么能說添亂?你不要聽那些人瞎說?!贝髱熜终f到,“掌門還問我,新來的弟子中,可有潛力不錯的?”

大師兄停頓了一會,繼續說到,“我當時想到的就是你啊,小刀?!?/p>

“?。??感謝大師兄厚愛?!毙〉队悬c受寵若驚。

“誒,你的努力大家都看到的?!贝髱熜终f到,“其實掌門也是有意培養新人,我覺得你可以報名一試,沒選上也不丟人,也可以在大家面前展示一下。”

“這......”小刀還是有些遲疑。

“好了,去報個名吧,不要讓我失望,我很看好你。”說罷,大師兄就轉身離開了。

“兄弟,我說你的鴻運來了吧!”小胖見大師兄走遠,手肘一推小刀。

“我還有點懵~”小刀看著小胖,他也不知道自己為什么會被大師兄看好。

“還想什么,趕緊去報名吧!上吧,小刀!”說著,小胖又拉上小刀就走,“就我這水平,也報名陪你,你看,夠意思吧!”

內部比試

門派內部比試大會,掌門和幾位長老坐在比武臺中央,眾多參賽的弟子在比武臺兩邊緊張的準備著,整個比武臺被圍觀的弟子圍的水泄不通。

小刀也非常緊張,在場邊不斷地走來走去。

“別走了!”小胖不耐煩地說,“太晃眼了,能不能坐下來?!?/p>

“嗯~行吧。”小刀坐了下來,卻仍舊如坐針氈。

“首先上場的是我們的黃師兄!”主持人擲地有聲的說到,“黃師兄可是門派的老油條~啊,不,是老人了,跟著掌門也是經歷了大大小小數十戰役,功不可沒啊。下面有請~黃師兄登場!”

“哈哈!主持人可真幽默。不過當初我跟掌門,那是什么刀山火海沒去過。不說了,不說了,來,看!先來個 Nginx 容器給大家看看。”黃師兄說著,起勢運功,一個容器出現在左手。

“嗯,把數據庫、后端 API、前端 Nginx 都上了吧?!闭崎T出題了。

“好嘞!”黃師兄心想,“這也太簡單了!”說罷,左手收起容器,“看我運功!”一陣哼哼哈嘿之后,又一個全新的容器出現在黃師兄的左手。

“這個就是全新的包含數據庫、后端 API 和前端 Nginx 的容器?!秉S師兄得意的說道。

“現在后端 API 更新了,該如何操作呢?”一位白胡子的長老問道。

“這個容易,看我再來一次!”說罷,黃師兄又收容器,繼續運功。

只見白胡子的長老搖了搖頭,小胖問小刀:“誒,怎么感覺不是很滿意啊,你說,黃師兄做的有什么破綻嗎?”

“黃師兄的這種容器,俗話叫做「胖容器」?!毙〉缎÷曊f道,“所有的服務都在一個容器中,這樣的容器就很「胖」。每個服務的修改必須要全部重來一次,一個服務掛掉,整個容器就可能廢掉,負擔很大,違背了容器輕量的初衷?!?/p>

“???這樣啊,那應該怎么搞?”小胖問道。

“容器就應該輕量化,理論上就應該是一個進程。”小刀說道,“噓,小聲點,你看,陸師兄上場了?!?/p>

“掌門,各位長老,各位師兄弟,大家好!”陸師兄自信滿滿的說,“陸某這就開始了!”

說罷,陸師兄雙手運功,匯聚真氣于左手,一個數據庫容器出現在了左手掌心。然后匯聚真氣于右手,一個后端 API 容器出現在了右手。接著,雙手合,一個前端容器出現在雙手之間。

docker run -d --name db --publish 3306:3306 mysql
docker run -d --name backend --publish 8080:8080 --link db backend
docker run -d --name frontend --publish 80:80 --link backend frontend

“好!”臺下一片鼓掌聲。白胡子長老似乎露出了一絲微笑。

三個容器在陸師兄的身邊快速的旋轉起來,陸師兄也從容不迫的不斷地替換著容器。

“哇哦!這是怎么辦到的?!毙∨煮@呼起來,意識到有些失態,趕緊用手捂住嘴。

“不要大驚小怪的。”小刀趕緊對他說。

“太神奇了吧,這就是所謂的「不胖」的容器了?”小胖輕聲詢問了小刀。

“對啊,陸師兄的這種,就算是「瘦」容器了。”小刀答道,“每個容器只有一個主進程,對應一個服務,每個服務更新,只要修改對應的容器即可,對其他容器沒有影響?!?/p>

“那這三個容器是怎么交互的?”小胖追問。

“陸師兄用 --publish 參數將每個容器的端口都暴露到了宿主機上,這樣可以直接通過宿主機的端口直接訪問?!毙〉独^續說道,“同時,他還使用了 --link 參數,這可以直接在容器中做 hosts 映射,通過 Docker 網橋,而不必暴露端口到宿主機上?!?/p>

“那他到底用的是哪種?”小胖不解。

“這就要看他的容器中是如何連接了,兩種方式都已經打通了網絡?!毙〉墩f道,“在后端 API 的容器中,即可以用宿主機IP:3306 訪問數據庫,也可以通過 db:3306 訪問,還可以通過 Docker 的虛擬網卡,例如 172.17.0.1:3306 訪問到?!?/p>

“這么厲害,那陸師兄豈不是贏定了!”小胖驚呼。

陸師兄得意地看著臺下驚呼的師弟,收功收勢,似乎拿了冠軍一樣接受著臺下的歡呼。

“小聲點,這還是有很多問題的?!毙〉稖惖叫∨侄裕p聲說道,“每次更新容器都要重新運功,再開,還是麻煩,時間一長,就記不得,而且網絡上也沒有隔離?!?/p>

“哦,對哦,那還有更好的方法?”小胖問道。

“下面這位,是我們門派新進弟子中的后起之秀,讓我們歡迎——小刀!”主持人嗓音洪亮,小刀也被嚇了一跳。

“額~掌門,各位,各位長老,師兄們,大家好!”小刀略有些緊張,眼睛瞟著比武臺邊緣,不敢直視前方。

“啪!啪!啪!”一陣掌聲打破了沉默,只見大師兄雙手鼓掌,眼神中充滿了期待。其余弟子見狀,也跟著鼓起掌來。

“我入門不久,給大家獻丑了?!毙〉豆钠鹩職猓f罷,右手伸出,只見三個容器瞬間出現在了掌心。

“哇哦~”臺下一陣驚呼。“他是怎么辦到的,怎么這么快,就啟動了三個容器!”

“大驚小怪。”人群中,一個身著灰色長袍,頭戴的淺黑色發帶的弟子說道。只見他嘴角微微上揚,輕蔑地說道,“一群草包?!?/p>

“他誰啊?”離他最近的弟子聽到這話,很是不滿,想去理論,但是被他身邊的弟子拉住,“算了算了,你不知道啊,他可是人稱「灰狼」的伍三,直接向掌門匯報,很多人都沒見過他?!?/p>

又一陣掌聲襲來,他們無暇管這個怪人,只有好奇,這個新來的弟子,又展示了什么新的功法。

“其實,我這是投機取巧,用了 docker-compose 法器,提前把容器的信息記下,直接用法器運功即可。”小刀解釋道。

如何安裝?請見參考。

配置文件 docker-compose.yml 如下

version: '3'
services:
    db:
        image: mysql
    backend:
        image: backend
        links:
        - db
    frontend:
        image: frontend
        links:
        - backend

配置完成后,直接運功

docker-compose up -d

或者直接收功

docker-compose down

容器更新,直接可以修改配置文件,繼續運功即可。

docker-compose up -d

然后,就可以查看所有相關的容器。

docker-compose ps

停止一個服務

docker-compose stop frontend

啟動一個服務

docker-compose start frontend

還可以簡單快速的擴容

docker-compose scale backend=3 forntend=3

docker-compose.yml 配置文件的結構主要如下,

  • version:指定 docker-compose 的版本,最新為 3
  • services:所有服務的定義,每個子鍵即為一個服務,類似 docker run 啟動容器
  • networks:自定義網絡隔離和配置,類似 docker network create 創建網絡
  • volumes:自定義 docker volume 配置,類似 docker volume create 創建存儲盤

使用 docker-compose,可以自動化打包構建和部署,管理服務依賴,快速啟動停止服務,且可以使用配置文件進行版本控制。

詳細配置項可查詢官方文檔,詳見參考。

“不錯不錯?!卑缀拥拈L老拍手道,“這個法器用起來確實很方便,但是我還有一個問題:這是單機的情況,如果我有多臺物理機或虛擬機,又該如何操作呢?”

后記

單機編排用 docker-compose,那多機的情況怎么辦?

欲知后事如何,請關注「容器霸業」,知乎專欄同步更新。

上一章:容器霸業:4 運行時

下一章:容器霸業:6 新征程

參考

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。