1. 程式人生 > >宋寶華:用systemd-nspawn執行最輕量級容器

宋寶華:用systemd-nspawn執行最輕量級容器

systemd-nspawn可以建立最輕量級的容器(ns的意思就是namespace),本文的實驗平臺是Ubuntu 16.04,x86_64機器。本文的目的是:在Ubuntu中用systemd-nspawn啟動一個容器,執行Debian作業系統(Jessie),並在主機使用machinectl進行管理。

本文閱讀難度:

本文整體質量:

閱讀時間: 5分鐘

關注Linuxer,關注原創技術文章

640?wx_fmt=png

安裝

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/

中途會下載各種構建基本檔案系統要的包:

0?wx_fmt=png

0?wx_fmt=png

最後得到的檔案系統的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:

0?wx_fmt=gif

按下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

...

[email protected]:~# 

用-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.

蘋果使用者打賞

0?wx_fmt=png

安卓使用者打賞

相關推薦

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格式測試報告 ①下

pythondiscover()方法批量執行

runner 收集 使用 子目錄 utils 每次 框架 ner docs 自動化測試過程中,自動化覆蓋的功能點和對應測試用例之間的關系基本都是1 VS N,如果每次將測試用例一個個單獨執行,不僅效率很低, 無法快速反饋測試結果,而且維護起來很麻煩。在python的單元測試