namespace 的創建
為容器創建 namespace 完全是 docker daemon 的職責範疇,docker daemon 壹方面從自身所在 namespace 創建新的 namespace 服務於容器,另壹方面在 namespace 之外,為容器配置 namespace 之內所需的命名空間資源。libcontainer 的源碼中,內部定義的 exec 函數實現了這部分內容。
libcontainer 中 namespace 的 exec 實現,具體完成的主要工作有:
創建 syncpipe,以便後續 docker daemon 與容器進程跨 namespace 進行信息傳遞;
創建容器內部第壹個進程的可執行命令;
啟動該命令實現 namespace 的創建;
為容器第壹個進程進行 cgroup 的限制;
在 docker daemon 所在 namespace 中初始化容器內部所需的網絡資源,以便後續通過管道的形式將資源傳遞至容器內部。
通過管道跨 namespace 將網絡資源傳遞至容器進程。