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