宋寶華:用systemd-nspawn執行最輕量級容器
systemd-nspawn可以建立最輕量級的容器(ns的意思就是namespace),本文的實驗平臺是Ubuntu 16.04,x86_64機器。本文的目的是:在Ubuntu中用systemd-nspawn啟動一個容器,執行Debian作業系統(Jessie),並在主機使用machinectl進行管理。
本文閱讀難度:低
本文整體質量:低
閱讀時間: 5分鐘
關注Linuxer,關注原創技術文章
安裝
systemd-container包含所有用於啟動和管理容器和虛擬機器的工具;而debootstrap則是debian/ubuntu下用於構建一套基本的根檔案系統的工具。
sudo apt install debootstrap
sudo apt install systemd-container
建立基本檔案系統
debootstrap生成的根檔案系統符合Linux檔案系統標準(FHS),包含了/boot、/etc、/bin、/usr等目錄。
sudo debootstrap --arch=amd64 jessie /var/lib/machines/container-deb/
不翻牆超級慢(10幾分鐘只下載1MB),如果能翻牆是最好的:
proxychains debootstrap --arch=amd64 jessie /var/lib/machines/container-deb/
中途會下載各種構建基本檔案系統要的包:
最後得到的檔案系統的size如下:
[email protected]:/var/lib/machines/container-deb# du -sh
295M.
執行容器
# systemd-nspawn -D /var/lib/machines/container-deb/ --machine deb_container
Spawning container deb_container on /var/lib/machines/container-deb.
...
[email protected]_container:~#
這樣我們就把容器deb_container執行在了/var/lib/machines/container-deb/這個檔案系統上了。
在容器內執行ps,發現容器內只有bash一個程序。
[email protected]_container:~# ps aux
USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND
root 1 0.0 0.1 20264 3316 ? Ss 05:00 0:00 -bash
root 5 0.0 0.0 17500 2044 ? R+ 05:00 0:00 ps aux
按下ctrl+]]]退出這個容器,再次啟動容器,設定passwd:
按下ctrl+]]]退出容器,並用-b引數重新啟動之:
# systemd-nspawn -D /var/lib/machines/container-deb/ --machine deb_container -b
Spawning container deb_container on /var/lib/machines/container-deb.
...
Detected virtualization 'systemd-nspawn'.
Detected architecture 'x86-64'.
[ OK ] Reached target Remote File Systems (Pre).
[ OK ] Reached target Encrypted Volumes.
[ OK ] Reached target Paths.
...
[ OK ] Started Update UTMP about System Runlevel Changes.
Debian GNU/Linux 8 ubuntu console
用root賬戶和上一步設定的密碼login:
ubuntu login: root
Password:
Linux ubuntu 4.4.0-101-generic #124-Ubuntu SMP Fri Nov 10 18:29:59 UTC 2017 x86_64
...
用-b會導致容器內也啟動systemd:
[email protected]:/proc# ps aux
USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND
root 1 0.0 0.1 27872 4180 ? Ss 04:57 0:00 /lib/systemd/systemd
root 17 0.0 0.2 32964 6208 ? Ss 04:57 0:00 /lib/systemd/systemd-journald
root 55 0.0 0.0 25904 2320 ? Ss 04:57 0:00 /usr/sbin/cron -f
root 57 0.0 0.1 262884 3420 ? Ssl 04:57 0:00 /usr/sbin/rsyslogd -n
root 60 0.0 0.0 63316 2840 console Ss 04:57 0:00 /bin/login --
root 67 0.0 0.1 20232 3256 console S 04:57 0:00 -bash
root 76 0.0 0.0 17500 2112 console R+ 04:59 0:00 ps aux
管理容器
在主機的另外一個terminal中檢視容器的狀態:
[email protected]:~# machinectl list
MACHINE CLASS SERVICE
deb_container container systemd-nspawn
1 machines listed.
[email protected]:~# machinectl status deb_container
deb_container
Since: Thu 2017-12-07 05:00:10 PST; 2min 7s ago
Leader: 28524 (bash)
Service: systemd-nspawn; class container
Root: /var/lib/machines/container-deb
OS: Debian GNU/Linux 8 (jessie)
Unit: machine-deb_container.scope
└─28524 -bash
Dec 07 05:00:10 ubuntu systemd[1]: Started Container deb_container.
蘋果使用者打賞
安卓使用者打賞
相關推薦
宋寶華:用systemd-nspawn執行最輕量級容器
systemd-nspawn可以建立最輕量級的容器(ns的意思就是namespace),本文的實驗平臺是Ubuntu 16.04,x86_64機器。本文的目的是:在Ubuntu中用systemd-nspawn啟動一個容器,執行Debian作業系統(Jessie),並在主機使用machinectl進行管理。
宋寶華: 關於Linux進程優先級數字混亂的徹底澄清
自己 olt vp8 自己的 進程的優先級 內核 在一起 top命令 eol 宋寶華: 關於Linux進程優先級數字混亂的徹底澄清 原創: 宋寶華 Linux閱碼場 9月20日 https://mp.weixin.qq.com/s/44Gamu17Vkl77OGV2KkRm
宋寶華: CPU是如何訪問到記憶體的?--MMU最基本原理
原帖地址: 假設頁表只有一級 對於一個有MMU的CPU而言,MMU開啟後,CPU是這樣定址的:CPU任何時候,一切時候,發出的地址都是虛擬地址,這個虛擬地址發給MMU後,MMU通過頁表來在頁表裡面查出來這個虛擬地址對應的實體地址是什麼,從而去訪問外面的記憶體條。MMU裡面的頁表地址暫
宋寶華: Linux中的1024——給閱碼場Linuxer們的節日祝福
1024是程式設計師的狂歡節。基於二進位制的原理,程式設計師通常會把1024當做一個整數而不是1000。程式設計師這個行業處理“bit”,當然這個行業“苦逼”,這也讓我輕鬆地記住了一個單詞——bitter。bitter的意思就是“苦的”,bit後面加er字尾,是人,這裡只是會
宋寶華:Docker 最初的2小時(Docker從入門到入門)
最初的2小時,你會愛上Docker,對原理和使用流程有個最基本的理解,避免滿世界無頭蒼蠅式找資料。本人反對暴風驟雨式多管齊下狂轟濫炸的學習方式,提倡迭代學習法,就是先知道怎麼玩,有個感性認識,再深入學習高階用法,深層原理,一輪輪迭代。堅決反對一上來就搞幾百頁厚的東西把人腦子弄
宋寶華:Docker 最初的2小時(Docker從入門到入門)【轉】
最初的2小時,你會愛上Docker,對原理和使用流程有個最基本的理解,避免滿世界無頭蒼蠅式找資料。本人反對暴風驟雨式多管齊下狂轟濫炸的學習方式,提倡迭代學習法,就是先知道怎麼玩,有個感性認識,再深入學習高階用法,深層原理,一輪輪迭代。堅決反對一上來就搞幾百頁厚的東西把人腦子弄亂。 Docker是什麼? K
宋寶華:關於Ftrace的一個完整案例【轉】
Ftrace簡介 Ftrace是Linux進行程式碼級實踐分析最有效的工具之一,比如我們進行一個系統呼叫,出來的時間過長,我們想知道時間花哪裡去了,利用Ftrace就可以追蹤到一級級的時間分佈。 Ftrace案例 寫一個proc模組,包含一個proc的讀和寫的入口。test_proc_show()故意呼
宋寶華: 迭代螺旋法——關於Linux學習方法的血淚建議
在下是一個碼農,也號稱是一個老溼,平生閱碼農無數(吹牛的 ^-^)。經由大量的案例,我能夠理解了為什麼很多碼農學了很多年Linux,還是感覺沒有掌握要領,仍然內心崩潰,最終對Linux吐血而亡,正所謂:人世間最大的痛苦,莫過於,碼農落花有意,而Linux流水無情.....
宋寶華:關於DMA ZONE和dma_alloc_coherent若干誤解的澄清
在32位X86計算機的條件下,ISA實際只可以訪問16MB以下的記憶體。那麼ISA上面假設有個網絡卡,要DMA,超過16MB以上的記憶體,它根本就訪問不到。所以Linux核心乾脆簡單一點,把16MB砍一刀,這一刀以下的記憶體單獨管理。如果ISA的驅動要申請DMA buffer,你帶一個GFP_DMA標記來表明
宋寶華:關於罪與慾望的深淵
《人民的名義》無疑是繼《潛伏》後最佳的國產電視劇,沒有之一。我們拋開它的反腐敗政治目的不談,電視劇本身關於罪與慾望,關於最深層次人性的揭祕,也深深地震撼每一個人。我反覆地問自己一個問題,如果也同樣置身在這汙穢的官場,我會是誰,我又會走向何處?說白了,我們大多數人都不過是一個凡
宋寶華:Linux裝置驅動框架裡的設計模式之——模板方法(Template Method)
本文系轉載,著作權歸作者所有。商業轉載請聯絡作者獲得授權,非商業轉載請註明出處。 作者: 宋寶華 來源: 微信公眾號linux閱碼場(id: linuxdev) 前言 《設計模式》這本經典的書裡面定義了20多種設計模式,雖然都是面向物件的,似乎需要C++、Java這樣的語言才能實現,但是根據筆者前面反覆
ARM Linux 3.x的設備樹(Device Tree)宋寶華
3rd else 命名 number 部分 kernel 傳統 rtc trigge 1. ARM Device Tree起源 Linus Torvalds在2011年3月17日的ARM Linux郵件列表宣稱“this whole ARM thing is a f*
C語言大型軟體設計的面向物件-宋寶華-專題視訊課程
C語言大型軟體設計的面向物件—369人已學習 課程介紹 C語言程式碼一旦達到一定規模,就特別強調良好的架構設計,以保證程式碼的可讀性好、程式碼簡潔以及可複用。此時,軟體設計師勢必要用C語言來做面向物件的設計。不能克服面向物件這一關,也是很多人無法讀懂Linux核
深入探究Linux/VxWorks裝置樹視訊教程-宋寶華-專題視訊課程
深入探究Linux/VxWorks裝置樹視訊教程—5116人已學習 課程介紹 很多人看了很Linux多裝置樹的資料後,還是不會用裝置樹。該Linux裝置樹視訊課程假設一個全新的電路板,上面有4個ARM核,一片中斷控制器、一個UART、一個GPIO控制器、一個I2
宋寶華- Linux namespace
名稱空間是在OS之上實現容器與主機隔離,以及容器之間互相隔離的Linux核心核心技術。根據《Docker 最初的2小時(Docker從入門到入門)》一文,名稱空間本質上就是在不同的工作組裡面封官許願,讓大家在各自的部門裡面都是manager,而且彼此不衝突。本文接下來從細節做
宋寶華《Linux裝置驅動開發詳解》——sysfs檔案系統與linux裝置模型(5.4.2)
以下讀書筆記內容,摘自宋寶華《Linux裝置驅動開發詳解》一書。 1、sysfs檔案系統的簡介 (1)linux2.6以後的核心引進syfs檔案系統,是虛擬檔案系統; (2)產生一個包括所有系統硬體
宋寶華- KVM最初的2小時(KVM從入門到入不了門)
接著《Docker最初的2小時(Docker從入門到入門)》繼續聊,再花10個小時寫出《KVM最初的2小時(KVM從入門到入不了門)》。坦白講,由於KVM遠遠比Docker要複雜,還是要2小時愛上KVM,這絕非難事,所以很可能入不了門。原則上,我們繼續迭代學習,
宋寶華《linux裝置驅動開發詳解》——platform裝置驅動(12.2)
以下讀書筆記,整理於宋寶華《linux裝置驅動開發詳解》一書。 1、piatform匯流排出現的原因 在SOC整合的獨立外設控制器、掛接在soc記憶體空間的外設不依附與此類匯流排(PCI、USB、I
使用jmeter+ant進行接口自動化測試(數據驅動)之二:利用apache-ant執行測試用例並生成HTML格式測試報告
extras true -c 註釋符 www 文件的 介紹 ntc encoding 在 使用jmeter+ant進行接口自動化測試(數據驅動)之一 介紹了如何使用csv文件來批量管理接口 本次接著介紹如何利用apache-ant執行測試用例並生成HTML格式測試報告 ①下
python:discover()方法批量執行用例
runner 收集 使用 子目錄 utils 每次 框架 ner docs 自動化測試過程中,自動化覆蓋的功能點和對應測試用例之間的關系基本都是1 VS N,如果每次將測試用例一個個單獨執行,不僅效率很低, 無法快速反饋測試結果,而且維護起來很麻煩。在python的單元測試