02.27 Linux容器技術原理和使用

點擊上方 "程序員小樂"關注, 星標或置頂一起成長

每天凌晨00點00分, 第一時間與你相約


每日英文

Everyone's got a life that no one else knows about.

每個人都有自己的人生,冷暖自知。


每日掏心話

若要自由,就得犧牲安全。若要閒散,就不能獲得別人評價中的成就。若要愉悅,就無須計較身邊的人給予的態度。


來自:mariolu | 責編:樂樂

鏈接:cloud.tencent.com/developer/article/1539709

Linux容器技術原理和使用

程序員小樂(ID:study_tech)第 787 次推文 圖片來自Pexels


往日回顧:流行的Spring Boot + Vue架構整合開發的網易雲+QQ音樂(附源碼)!


正文


1.1 隔離和共享

在一個多員共用的開發環境或者一臺服務器運行多個邏輯隔離的服務器進程。誰的運行環境也不希望影響到另一個誰。也就是一個物理機器需要虛擬化出多個環境或者容器。通過提供一種創建和進入容器的方式,操作系統讓應用程序就像在獨立的機器上運行一樣,但又能共享很多底層的資源。

1.2 虛擬化vs容器

傳統的虛擬化技術是通過硬件模擬或者操作系統軟件實現,而容器技術可以比傳統虛擬化更輕量級。

容器在提供隔離的同時,還通過共享這些資源節省開銷,這意味著容器比真正的虛擬化的開銷要小得多。例如,可以有效地共享公共文件(比如 glibc)的頁緩存,因為所有容器都使用相同的內核,而且所有容器還常常共享相同的 libc 庫(取決於容器配置)。這種共享常常可以擴展到目錄中其他不需要寫入內容的文件。

和傳統虛擬化相比,容器啟動很快,由於共享系統資源,一臺主機可以運行上千個容器,並且容器鏡像用類似git分發思想,用戶更容易創建,分發,更新存儲這些鏡像。

1.3 前世和今生

今生是docker大流行的時代,而前世就是早於1982年的chroot工具,以及後面經過改進並且現在還在使用的lxc技術。早期的docker的代碼實現基於LXC(0.9之前)。

Linux容器功能是基於 cgroups 和 Namespace 來實現的. 所以要了解 Linux 容器必須先了解 cgroup 和 Namespace.

2.1、cgroups(控制組)

cgroups 是將進程分組管理的內核功能.通過cgroups可以隔離進程, 同時還可以控制進程的資源佔用(CPU, 內存等等)情況在操作系統底層限制物理資源,起到 Container 的作用。進程可用的cpu資源由cpuset指定。

2.2、Namespace (命名空間)

Namespace讓每個進程組有獨立的PID, IPC和網絡空間.Namespace通過 clone系統調用來實現的.

clone系統調用的第3個參數flags就是通過設置Namespace來劃分資源的.

LXC依賴於epel-release的安裝,EPEL(Extra Packages for Enterprise Linux)是Fedora 社區打造提供高質量軟件包的項目,相當於一個第三方源。



  • yum install epel-release -y



然後再安裝LXC相關的工具包,和創建容器所需要的模板lxc-templates



  • yum install lxc lxc-templates -y



安裝完使用lxc-checkconfig檢查下操作系統對容器技術的支持

Linux容器技術原理和使用

3.1 LXC工具包概覽

LXC所有的操作工具api都在這裡,可以對LXC進行相應的操作。

Linux容器技術原理和使用
LXC所有命令

3.2 創建一個容器

使用預定義的模板創建一個容器。它會根據模板設置自動下載依賴環境包並安裝。




  • lxc-create -n 容器名稱 -t 模板(不需要加 lxc)lxc-create -n mariolu-console -t centos


  • 模板就是第3節安裝的lxc-templates工具包。所有模板放在這個目錄下/usr/share/lxc/templates/

  • Linux容器技術原理和使用
  • LXC的所有模板


跟chroot思想一樣,安裝完容器,所有的主機文件夾根目錄被重定義到/var/lib/lxc/mariolu-console

Linux容器技術原理和使用

重新定義的root路徑

3.3 啟動容器

就像安裝完機器後,我們要開機啟動服務器。Lxc也有相應的步驟就是



  • lxc-start -n mariolu-console



Linux容器技術原理和使用

啟動界面

但是我們很快就發現,啟動需要密碼,但是使用容器創建沒有輸入密碼,難道是有什麼默認密碼嗎

Linux容器技術原理和使用

在這裡並不能看到root密碼,密碼或者被用x字符替代,或者是一串hash碼。




  • cat /var/lib/lxc/mariolu-console/rootfs/etc/shadowchroot /var/lib/lxc/mariolu-console/rootfs passwd



網絡搜索沒找到默認密碼,但是找到了這麼一句話:

The root password is set up as expired and will require it to be changedat first login, which you should do as soon as possible. If you lose the root password or wish to change it without starting the container, you can change it from the host by running the following command (which will also reset the expired flag)


  • chroot /var/lib/lxc/sspl-test/rootfs passwd



YES! Give Me Five! 這個告訴我們重置密碼的命令。我們新開一個窗口,完成密碼的重置,然後重新切換回原來的窗口,這時候就可以用密碼愉快的登陸了。

Linux容器技術原理和使用

Linux容器技術原理和使用

登錄成功


Linux容器技術原理和使用

歡迎在留言區留下你的觀點,一起討論提高。如果今天的文章讓你有新的啟發,學習能力的提升上有新的認識,歡迎轉發分享給更多人。


猜你還想看


阿里、騰訊、百度、華為、京東最新面試題彙集

Java 多態的實現機制,看了都說好!

中央政治局會議:疫情防控工作取得階段性成效,但拐點尚未到來

在Spring Boot項目中整合使用Activiti

關注訂閱號「程序員小樂」,收看更多精彩內容
嘿,你在看嗎?


分享到:


相關文章: