天天看點

自己動手寫容器(上)

自己動手寫容器(上)

這是本課程的第二部分:容器篇,共 8 篇,幫助大家由淺入深地認識和掌握容器。前面,我為你介紹了容器生命周期和資源管理相關的内容,讓你對容器有了更加靈活的控制。之後從程序的角度帶你認識了容器以及容器的兩項核心技術 cgroups 和 namespace。本篇,我們進入實踐環節,自己動手寫容器,以便讓你對容器有更加深刻的了解和認識。

經過了前面内容的學習,想必你對 Docker 容器已經不那麼陌生了。從容器的生命周期管理,到對容器的資源控制,以及從程序的角度對容器的剖析,再到前兩篇的 cgroups 和 namespace,你是否想更進一步地了解容器呢?

本篇内容會分上下兩篇,通過前面已經學習到的 namespace 和 cgroups 等知識,來自己實作容器。

容器的基本屬性

要自己實作容器,我們應該對容器進行更明确地定義,以便确認需求。

首先,容器一定是具有隔離性的,具備了隔離性才能稱之為“容器”;其次,容器的資源可以被管理;再者按照我們之前使用 Docker 容器的經驗來看,容器應該可以從“鏡像”啟動;還有啟動後的容器,應該可以具備網絡連接配接;最後,我們可以進入到容器中執行指令。

按照我們前面學到的内容,namespace 和 cgroups 肯定是實作資源的隔離和管理的關鍵技術;其他的問題就是鏡像以及和網絡相關的部分了。是不是這樣拆解後感覺蠻簡單的?我們開始逐漸去實作它。

建立隔離環境

上一篇已經介紹過,我們可以通過使用 unshare 這個工具來很簡單地達