手動建立 LXC (Linux Container)

LXC 已經是目前工作上很常用到的技術了,不過都是基於 proxmox pve 的web介面來管理。換個 distribution 用 cli 來使用,我還真的不會。所以最近要在 Ubuntu 上弄 LXC,只好認真的試了一下。

本篇文章是參考 ubuntu 18.04 上的陽春 lxc 3.0 筆記 所做的整理而來的。

我們這邊講的是 unpriviledge 的模式,也就是讓一般 user 也可以使用 lxc。若用 root 的話,可能也是大同小異。

套件安裝與設定

首先安裝下列套件

接著編輯 /etc/lxc/lxc-usernet,將用戶名稱與綁定的橋接器設定起來。

此時系統應該已把用戶名稱加到 /etc/subuid /etc/subgid 這兩個檔案裡,可以用grep命令確定一下。這邊我猜測是當 lxc-usernet 變更時,會觸發自動更新,而且連 bridge 都建立起來了。

接著以下列指令,來初始化用戶的 lxc 設定檔。最後2行關於 idmap 的設定,可能要與上面的 subuid 與 subgid 對應上。

最後在開始要執行 lxc 前,請先重開機一次,以確保變更能夠都套用。

下載及安裝樣板

要列出可用的 LXC 樣板,可用 lxc-download -l 命令列出

這邊我就安裝 ubuntu focal(20.04) amd64 版本,下達以下的命令。就會下載並建立該 lxc

所有的 lxc 資料都會放在 ~/.local/share/lxc/ 內,而各別的 lxc 裡會有 config 檔案與 rootfs

啟動 LXC

接著就是要啟動並進入 LXC

  • lxc-start -n mylxc: 啟動 mylxc 這個 container
  • lxc-attach -n mylxc: 以root身份進入 container,此時網路已可使用,apt 也是已設定好。我習慣用ifconfig,所以都會先安裝 net-tools套件。要離開的話,只要按 Ctrl+D就會離開。另外這裡先建立 /lxc_dir 目錄,待會可以用為共用資料夾展示。
  • lxc-stop -n mylxc: 停止 container

另外有幾個指令也用得到

  • lxc-ls: 列出所有的 container
  • lxc-info XXX: 列出 container 的狀態,lxc-ls 只列出可用的,但並不知其狀態
  • lxc-start -n mylxc -F: 若 container 無法啟動,可以用前景(-F)來觀查更多的訊息。但這種方式無法用 Ctrl+D 來離開,要另開一個 terminal,使用 lxc-stop 將其停止

 

共用資料夾

若要設定 container 來使用 host 的資料夾,可在其設定檔 config 裡加一行。

這樣就可以把主機的 /host_dir 目錄 mount 到客機內的 /lxc_dir 目錄了。但是在加這行之前,要先進 container 內創建 /lxc_dir 目錄,否則啟動會失敗。

結語

這只是初步的 unpriviledge lxc 的使用。其實還有些問題,主要是無法備份。因為其是以另一個uid身份建立檔案,所以備份/還原會有問題,還是得靠 root 身份來做這個工作。應該是有解決方法,只是目前還沒研究到,有找到再補上了。

另一點是本來是想用 container 來做 cuda 運算,但現在也還沒找到正確的方法。只能說學AI一下太多東西,無法整理的很好,只能先記下來了。

 

Leave a Reply(Name請以user_開頭,否則會被判定會垃圾息)

請輸入答案 + 44 = 48