0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

簡(jiǎn)述Docker的底層技術(shù)原理之Namespace

阿銘linux ? 來(lái)源:今日頭條 ? 作者:云技術(shù)趣談 ? 2021-07-21 09:55 ? 次閱讀

Docker的空間隔離使用的是namespace(空間),它是內(nèi)核提供的一種空間隔離,在一個(gè)空間下,每個(gè)進(jìn)程看到的視圖是一致的,相應(yīng)的如果不在一個(gè)空間下看到資源視圖是不一致的,舉個(gè)例子,如果兩個(gè)進(jìn)程在同一個(gè)網(wǎng)絡(luò)命令空間下,那么他們看到的網(wǎng)絡(luò)信息(網(wǎng)卡、IP、路由等)是一樣的,可以通過(guò)localhost的方式互相訪問。常用的有6種namespace,在Linux 內(nèi)核4.6之后又添加了Cgroup這namespace,5.6 之后又添加了時(shí)鐘namespace。

Namespace系統(tǒng)調(diào)用參數(shù)隔離內(nèi)容

UTSCLONE_NEWUTS主機(jī)名與域名

IPCCLONE_NEWIPC信號(hào)量、消息隊(duì)列和共享內(nèi)存

PIDCLONE_NEWPID進(jìn)程編號(hào)

NetworkCLONE_NEWNET網(wǎng)絡(luò)設(shè)備、網(wǎng)絡(luò)棧、端口等等

MountCLONE_NEWNS掛載點(diǎn)(文件系統(tǒng))

UserCLONE_NEWUSER用戶和用戶組

CgroupCLONE_NEWCGROUPCgroup的根目錄

TimeCLONE_NEWTIME時(shí)鐘

這里有個(gè)小細(xì)節(jié),上面表格創(chuàng)建Mount Namespace的系統(tǒng)調(diào)用參數(shù)是CLONE_NEWNS,而不是CLONE_NEWMOUNT。從字面理解是創(chuàng)建一個(gè)命名空間的意思,這是由于歷史原因?qū)е碌?,因?yàn)镸ount Namespace是第一個(gè)namespace,內(nèi)核的開發(fā)者可能也沒有預(yù)料到后續(xù)還有其它的namespace的加入,所以就先把CLONE_NEWNS給占用了。

可見,namespace的隔離其實(shí)并不充分,除了上面的隔離能力,其他的都一樣。譬如,時(shí)鐘在內(nèi)核5.6版本之前,所有容器和操作系統(tǒng)都共享同一個(gè)時(shí)鐘,如果修改了操作系統(tǒng)的時(shí)間,所有容器都時(shí)間都會(huì)變化。

namespace實(shí)現(xiàn)原理也非常簡(jiǎn)單,每個(gè)進(jìn)程(task_struct)都有一個(gè)關(guān)于namespace的屬性nsproxy,表示自己所屬的namespace。

struct task_struct { 。。.

/* namespaces */

struct nsproxy *nsproxy;

。。.

}

其中的nsproxy就是指向各種namespace的一個(gè)代理。

當(dāng)新進(jìn)程被創(chuàng)建后會(huì)繼承其父進(jìn)程的namespace,這就是為啥一個(gè)容器里面的所有進(jìn)程都共享namespace。在Linux集群上面,通過(guò)讀取“/proc/進(jìn)程ID/ns/”下的文件可以獲取到每個(gè)進(jìn)程對(duì)應(yīng)的namespace。

文章轉(zhuǎn)載:https://os.51cto.com/art/202107/671347.htm

(版權(quán)歸原作者所有,侵刪)

編輯:jq

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • Docker
    +關(guān)注

    關(guān)注

    0

    文章

    446

    瀏覽量

    11738

原文標(biāo)題:Docker內(nèi)核技術(shù)原理之Namespace

文章出處:【微信號(hào):aming_linux,微信公眾號(hào):阿銘linux】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。

收藏 人收藏

    評(píng)論

    相關(guān)推薦

    ARM平臺(tái)實(shí)現(xiàn)Docker容器技術(shù)

    或網(wǎng)絡(luò)接口進(jìn)行通信。 圖1(2)Docker的作用更高效的利用系統(tǒng)資源:Docker對(duì)系統(tǒng)資源的利用率更高,無(wú)論是應(yīng)用執(zhí)行速度,內(nèi)存損耗或者文件存儲(chǔ)速度,都要比傳統(tǒng)虛擬機(jī)技術(shù)更高效。因此,相比虛擬機(jī)
    發(fā)表于 07-25 14:36

    ARM平臺(tái)實(shí)現(xiàn)Docker容器技術(shù)

    或網(wǎng)絡(luò)接口進(jìn)行通信。圖1(2)Docker的作用更高效的利用系統(tǒng)資源:Docker對(duì)系統(tǒng)資源的利用率更高,無(wú)論是應(yīng)用執(zhí)行速度,內(nèi)存損耗或者文件存儲(chǔ)速度,都要比傳統(tǒng)虛擬機(jī)技術(shù)更高效。因此,相比虛擬機(jī)
    發(fā)表于 07-17 11:05

    ARM平臺(tái)實(shí)現(xiàn)Docker容器技術(shù)

    什么是Docker? (1)Docker的架構(gòu) Docker是一個(gè)開源的應(yīng)用容器引擎,讓開發(fā)者可打包他們的應(yīng)用以及依賴包到一個(gè)可移植的鏡像中,然后發(fā)布到任何流行的Linux或Windows機(jī)器上
    的頭像 發(fā)表于 03-07 13:48 ?574次閱讀
    ARM平臺(tái)實(shí)現(xiàn)<b class='flag-5'>Docker</b>容器<b class='flag-5'>技術(shù)</b>

    如何利用樹莓派安裝DockerDocker-compose呢?

    本文主要演示了樹莓派如何安裝DockerDocker-compose的過(guò)程。
    的頭像 發(fā)表于 12-14 16:19 ?2327次閱讀
    如何利用樹莓派安裝<b class='flag-5'>Docker</b>和<b class='flag-5'>Docker</b>-compose呢?

    docker核心組件有哪些

    Docker 是一種開源的容器化平臺(tái),它能夠?qū)崿F(xiàn)將應(yīng)用程序及其依賴項(xiàng)打包到一個(gè)可移植的容器中,從而實(shí)現(xiàn)快速、可重復(fù)、可擴(kuò)展的部署和管理。Docker 的核心組件包括 Docker Engine
    的頭像 發(fā)表于 11-23 09:47 ?1492次閱讀

    docker進(jìn)入容器的方法有哪些

    Docker是一種流行的容器化平臺(tái),它能夠快速構(gòu)建、交付和運(yùn)行應(yīng)用程序。在使用Docker時(shí),我們經(jīng)常需要進(jìn)入容器進(jìn)行調(diào)試、管理和運(yùn)行命令等操作。本文將詳細(xì)介紹Docker進(jìn)入容器的各種方法,包括
    的頭像 發(fā)表于 11-23 09:45 ?8974次閱讀

    如何啟動(dòng)本機(jī)docker服務(wù)

    Docker是一個(gè)開源項(xiàng)目,可以幫助開發(fā)者打包應(yīng)用程序及其依賴,并且能夠?qū)⑵渥鳛楠?dú)立的容器來(lái)運(yùn)行。本文將詳細(xì)介紹如何在本機(jī)上啟動(dòng)Docker服務(wù)。 第一步:安裝Docker 在開始之前,首先需要
    的頭像 發(fā)表于 11-23 09:43 ?1502次閱讀

    linux關(guān)閉docker的命令

    在 Linux 系統(tǒng)中,關(guān)閉 Docker 的操作可以通過(guò)以下多種方式進(jìn)行。本文將詳細(xì)講解每一種方式,并提供示例代碼和命令,以幫助讀者更好地理解和實(shí)踐。 使用 docker 命令 最常用的方法
    的頭像 發(fā)表于 11-23 09:39 ?2389次閱讀

    Docker與虛擬機(jī)的區(qū)別

    Docker和虛擬機(jī)是兩種不同的虛擬化技術(shù),它們?cè)趯?shí)現(xiàn)方式、資源消耗、運(yùn)行性能等方面存在許多差異。本文將會(huì)詳細(xì)介紹它們的區(qū)別。 一、實(shí)現(xiàn)方式 1.1 虛擬機(jī) 虛擬機(jī)是通過(guò)在物理主機(jī)上模擬出多個(gè)獨(dú)立
    的頭像 發(fā)表于 11-23 09:37 ?6821次閱讀

    docker部署對(duì)性能的影響

    Docker 是一個(gè)流行的容器化平臺(tái),它提供了一種輕量級(jí)的虛擬化技術(shù),使得應(yīng)用程序可以在獨(dú)立的容器中運(yùn)行。然而,部署應(yīng)用程序到 Docker 容器中可能會(huì)對(duì)性能產(chǎn)生一些影響。在本文中,我們將探討
    的頭像 發(fā)表于 11-23 09:31 ?1277次閱讀

    docker部署mysql的壞處

    Docker 是一種虛擬化技術(shù),它允許開發(fā)人員在容器內(nèi)打包應(yīng)用程序及其所有依賴項(xiàng),從而實(shí)現(xiàn)在不同環(huán)境中運(yùn)行相同的應(yīng)用程序的能力。然而,在使用 Docker 部署 MySQL 時(shí),也存在一些潛在
    的頭像 發(fā)表于 11-23 09:29 ?1171次閱讀

    docker微服務(wù)架構(gòu)實(shí)戰(zhàn)

    隨著云計(jì)算和容器化技術(shù)的快速發(fā)展,微服務(wù)架構(gòu)在軟件開發(fā)領(lǐng)域中變得越來(lái)越流行。微服務(wù)架構(gòu)將一個(gè)大型的軟件應(yīng)用拆分成多個(gè)小型的、獨(dú)立部署的服務(wù),每個(gè)服務(wù)負(fù)責(zé)獨(dú)立的業(yè)務(wù)功能。其中,Docker作為一個(gè)流行
    的頭像 發(fā)表于 11-23 09:26 ?518次閱讀

    ArmSoM-W3應(yīng)用開發(fā)安裝docker

    使用docker2.Rockchip平臺(tái)系統(tǒng)運(yùn)行dockerDocker運(yùn)行對(duì)內(nèi)核配置有要求,需要kernel開啟cgroups、namespace、netfilter、overlayfs
    的頭像 發(fā)表于 11-20 10:05 ?339次閱讀
    ArmSoM-W3應(yīng)用開發(fā)<b class='flag-5'>之</b>安裝<b class='flag-5'>docker</b>

    Jenkins+Docker一鍵自動(dòng)化部署SpringBoot應(yīng)用最精簡(jiǎn)流程

    簡(jiǎn)述實(shí)現(xiàn)步驟:在docker安裝jenkins,配置jenkins基本信息,利用Dockerfile和shell腳本實(shí)現(xiàn)項(xiàng)目自動(dòng)拉取打包并運(yùn)行。
    的頭像 發(fā)表于 11-06 16:27 ?1972次閱讀
    Jenkins+<b class='flag-5'>Docker</b>一鍵自動(dòng)化部署SpringBoot應(yīng)用最精簡(jiǎn)流程

    如何使用 Docker容器化技術(shù)

    對(duì)于開發(fā)人員來(lái)說(shuō),Docker肯定都不陌生,今天小編帶大家重新學(xué)習(xí)一下Docker。 什么是 Docker 官話: Docker 是一種開源的容器化平臺(tái),它可以幫助開發(fā)者將應(yīng)用程序與其
    的頭像 發(fā)表于 09-30 11:24 ?1.6w次閱讀