Docker中namespace隔離的實(shí)戰(zhàn)
namespace
namespace通過一種內(nèi)核技術(shù)來實(shí)現(xiàn),允許將不同的系統(tǒng)資源隔離和封裝到獨(dú)立的命名空間中。
為容器化、虛擬化和隔離提供強(qiáng)大的基礎(chǔ)。通過使用namespace技術(shù),Linux內(nèi)核可以創(chuàng)建多個(gè)獨(dú)立的命名空間,每個(gè)命名空間都可以擁有獨(dú)立的資源視圖和配置信息,使得不同進(jìn)程或容器可以在各自的獨(dú)立環(huán)境中運(yùn)行,而互不干擾。
操作系統(tǒng)利用進(jìn)程空間隔離來確保一個(gè)進(jìn)程的崩潰或異常不會(huì)影響其他進(jìn)程的穩(wěn)定性和可靠性。
namespace 隔離實(shí)戰(zhàn)
dd命令
是一個(gè)在Unix和類Unix系統(tǒng)中用于轉(zhuǎn)換和復(fù)制文件的命令行工具。
它常用于創(chuàng)建特定大小的文件、備份整個(gè)分區(qū)或磁盤、以及在不同格式之間轉(zhuǎn)換文件。
格式
dd if=<輸入文件> of=<輸出文件> [選項(xiàng)]
if:指定輸入文件。如果省略,默認(rèn)為標(biāo)準(zhǔn)輸入(stdin)。
of:指定輸出文件。如果省略,默認(rèn)為標(biāo)準(zhǔn)輸出(stdout)。
基本選項(xiàng)
- bs=<字節(jié)數(shù)>:設(shè)置讀寫的塊大?。╞ytes)。例如,bs=1M 表示每次讀寫 1 MB。
- count=<塊數(shù)>:僅復(fù)制指定數(shù)量的塊。
- skip=<塊數(shù)>:在輸入文件中跳過指定數(shù)量的塊。
- status=level:顯示命令的狀態(tài)。level 可以是 none(不顯示任何狀態(tài))、noxfer(不顯示傳輸速度)或 progress(顯示進(jìn)度)。
- conv=<轉(zhuǎn)換選項(xiàng)>:指定數(shù)據(jù)轉(zhuǎn)換選項(xiàng)。例如,conv=ascii 將數(shù)據(jù)從 EBCDIC 轉(zhuǎn)換為 ASCII,conv=swab 交換每對(duì)輸入字節(jié)。
測(cè)試一下:
dd if=/dev/zero of=test.img bs=8k count=1024 dd if=in.txt of=out.txt conv=ucase
- if=/dev/zero: if代表輸入文件(input file)。/dev/zero是一個(gè)特殊的文件,讀取它會(huì)產(chǎn)生無限的零(0x00字節(jié))。使用/dev/zero作為輸入源,dd命令會(huì)生成一個(gè)由零組成的文件。
- of=test.img: of代表輸出文件(output file)。這里指定輸出文件的名稱為test.img。
- bs=8k: bs代表塊大?。╞lock size)。這里設(shè)置為8k,意味著每次讀寫操作的塊大小為8KB(8192字節(jié))。
- count=1024: count代表要復(fù)制的塊的數(shù)量。這里設(shè)置為1024,由于每個(gè)塊大小為8KB,所以總共會(huì)復(fù)制1024個(gè)8KB的塊,即總大小為8192KB(8MB)。
mkfs命令
mkfs命令是Linux系統(tǒng)中用于在特定的分區(qū)上建立Linux文件系統(tǒng)的命令,全稱為“make filesystem”。
mkfs命令主要用于在設(shè)備上構(gòu)建Linux文件系統(tǒng),通常是硬盤分區(qū)。通過該命令,用戶可以在指定的分區(qū)上創(chuàng)建不同類型的文件系統(tǒng),如ext2、ext3、ext4、ms-dos、vfat、xfs等。默認(rèn)情況下,如果不指定文件系統(tǒng)類型,mkfs會(huì)創(chuàng)建ext2文件系統(tǒng)。
基本格式:
mkfs [options] [-t <type>] [fs-options] <device> [<size>]
常用選項(xiàng)
- -V或–verbose:詳細(xì)顯示命令執(zhí)行過程。
- -t或–type=:指定要?jiǎng)?chuàng)建的文件系統(tǒng)類型。
- -c:在創(chuàng)建文件系統(tǒng)前,檢查分區(qū)是否有壞軌。
- -l bad_blocks_file:將有壞軌的block資料加到指定的文件中。
- -b:指定新文件系統(tǒng)的塊大小。
- -i:指定文件系統(tǒng)上的i-nodes的初始數(shù)量(在創(chuàng)建日志文件系統(tǒng)時(shí)忽略此標(biāo)記)。
- -o:指定用逗號(hào)分隔的虛擬文件系統(tǒng)實(shí)現(xiàn)細(xì)節(jié)選項(xiàng)列表。
測(cè)試一下:
mkfs -t ext4 ./test.img
df命令
df命令是Linux系統(tǒng)中用于顯示文件系統(tǒng)的磁盤空間使用情況的命令。
df [選項(xiàng)] [文件或目錄...]
基本選項(xiàng)
- -h或–human-readable:以易讀的格式(如K、M、G)顯示磁盤空間大小。
- -T或–print-type:顯示文件系統(tǒng)的類型。
- -i或–inodes:顯示inode(索引節(jié)點(diǎn))的使用情況,而不是塊使用情況。inode是Linux文件系統(tǒng)中用于存儲(chǔ)文件和目錄的元數(shù)據(jù)結(jié)構(gòu)。
- -a或–all:顯示所有文件系統(tǒng),包括虛擬文件系統(tǒng)(如proc、sysfs等)和沒有被掛載的文件系統(tǒng)。
- -l或–local:僅顯示本地文件系統(tǒng),不包括網(wǎng)絡(luò)文件系統(tǒng)(如NFS)。
- -t <文件系統(tǒng)類型>或–type=<文件系統(tǒng)類型>:僅顯示指定類型的文件系統(tǒng)的磁盤空間使用情況。
- -x <文件系統(tǒng)類型>或–exclude-type=<文件系統(tǒng)類型>:排除指定類型的文件系統(tǒng)。
- -P或–portability:使用POSIX的輸出格式。
- -k或–kilobytes:以KB為單位顯示磁盤空間使用情況。
- -m或–megabytes:以MB為單位顯示磁盤空間使用情況。
mount命令
mount命令在Linux系統(tǒng)中用于掛載文件系統(tǒng),即將存儲(chǔ)設(shè)備(如硬盤分區(qū)、CD-ROM、USB驅(qū)動(dòng)器或網(wǎng)絡(luò)共享)的文件系統(tǒng)關(guān)聯(lián)到當(dāng)前文件系統(tǒng)的某個(gè)目錄上,以便用戶可以通過該目錄訪問存儲(chǔ)設(shè)備中的數(shù)據(jù)。
格式
mount [-選項(xiàng)] 設(shè)備名 掛載點(diǎn)
常用選項(xiàng)
- -a:掛載/etc/fstab文件中定義的所有未掛載的文件系統(tǒng)。
- -f:不實(shí)際執(zhí)行掛載操作,通常與-v一起使用來測(cè)試或調(diào)試掛載命令。
- -F:結(jié)合-a使用時(shí),對(duì)于每一個(gè)掛載動(dòng)作產(chǎn)生一個(gè)子進(jìn)程執(zhí)行掛載,有助于加快大量掛載操作的速度。
- -h:顯示幫助信息。
- -n:不將掛載信息寫入/etc/mtab文件,這個(gè)選項(xiàng)在某些特殊情況下,例如沒有可寫文件系統(tǒng)時(shí)有用。
- -r:以只讀模式掛載文件系統(tǒng)。
- -t vfstype:指定文件系統(tǒng)的類型,例如ext4、xfs、nfs、cifs等。
設(shè)備名:要掛載的物理設(shè)備或遠(yuǎn)程資源的路徑,如/dev/sda1或/server/share。
掛載點(diǎn):掛載設(shè)備的本地目錄,即希望訪問設(shè)備內(nèi)容的位置,如/mnt/mydrive。在掛載之前,需要確保掛載點(diǎn)目錄已經(jīng)存在。
測(cè)試一下:
sudo mount ./test.img /data/testymount
unshare命令
unshare命令允許用戶指定不共享父進(jìn)程中的某些命名空間,并在新的命名空間中運(yùn)行指定的程序。這可以用于實(shí)現(xiàn)進(jìn)程和資源的隔離,類似于Linux容器的工作方式。
格式
unshare [options] [command [arguments]]
基本選項(xiàng)
- -m 或 --mount:創(chuàng)建一個(gè)新的掛載命名空間。在該命名空間中,進(jìn)程將有自己獨(dú)立的文件系統(tǒng)視圖。
- -n 或 --net:創(chuàng)建一個(gè)新的網(wǎng)絡(luò)命名空間。這允許進(jìn)程在獨(dú)立的網(wǎng)絡(luò)環(huán)境中運(yùn)行。
- -p 或 --pid:創(chuàng)建一個(gè)新的進(jìn)程命名空間。在該命名空間中,進(jìn)程將擁有自己獨(dú)立的進(jìn)程號(hào)空間。
- -u 或 --user:創(chuàng)建一個(gè)新的用戶命名空間。這可以用于隔離用戶ID和組ID。
- -U 或 --uts:創(chuàng)建一個(gè)新的UTS命名空間。UTS命名空間用于隔離主機(jī)上的主機(jī)名和域名。
- -i 或 --ipc:創(chuàng)建一個(gè)新的IPC(進(jìn)程間通信)命名空間。這用于隔離進(jìn)程間通信資源,如消息隊(duì)列、信號(hào)量和共享內(nèi)存。
- –fork:在新的命名空間中啟動(dòng)一個(gè)新的子進(jìn)程來運(yùn)行指定的程序,而不是直接運(yùn)行它。這對(duì)于創(chuàng)建新的PID命名空間特別有用。
測(cè)試一下:
sudo unshare -u /bin/bash
PID隔離
sudo unshare -p /bin/bash
sudo unshare -p --fork /bin/bash sudo unshare -p --fork --mount-proc /bin/bash
mount隔離
unshare --mount --fork /bin/bash mount -t ext4 data2.img /data/maxhou/data2mount
到此這篇關(guān)于Docker中namespace隔離的實(shí)戰(zhàn)的文章就介紹到這了,更多相關(guān)Docker namespace隔離內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
docker的基本使用及使如何用Docker 運(yùn)行D435i
這篇文章主要介紹了docker的基本使用及使如何用Docker 運(yùn)行D435i,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友參考下吧2023-11-11使用Docker Compose部快速署ELK(親測(cè)有效)
這篇文章主要介紹了Docker Compose部署ELK的詳細(xì)過程,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2021-08-08portainer連接遠(yuǎn)程docker的實(shí)現(xiàn)示例
本文主要介紹了portainer連接遠(yuǎn)程docker的實(shí)現(xiàn)示例,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2022-05-05Docker網(wǎng)絡(luò)之單host網(wǎng)絡(luò)及使用案例
本文重點(diǎn)給大家講解Docker單主機(jī)網(wǎng)絡(luò)的相關(guān)知識(shí)及使用案例,重點(diǎn)是使用案例,感興趣的朋友一起看看吧2017-08-08docker 基于golang鏡像構(gòu)建 ssh服務(wù)的方法
這篇文章主要介紹了docker 基于golang鏡像構(gòu)建 ssh服務(wù)的方法,添加goland環(huán)境變量的方法及centos下sshd和goland環(huán)境的docker文件配置方法,需要的朋友可以參考下2021-07-07Docket Desktop安裝redis并設(shè)置密碼方式
在DockerDesktop中安裝Redis并設(shè)置密碼的步驟包括啟動(dòng)Docker、拉取Redis鏡像、創(chuàng)建并運(yùn)行Redis容器設(shè)置密碼、驗(yàn)證容器運(yùn)行、連接并驗(yàn)證密碼,以及可選的持久化數(shù)據(jù)設(shè)置2025-03-03