2015-04-29

Ubuntu 用 LXD 建立 Container

阿舍之前在 Ubuntu 14.04 上直接用 apt-get 來安裝 LXD 的版本是 0.4 版的,之後,阿舍在 Ubuntu 15.04 上用 apt-get 安裝的版本則是 0.7 版的,比較新,所以,阿舍建議,如果想試試 LXD 的話,還是安裝個 Ubuntu 15.04 版的虛擬機器來試 LXD 會比較好哩 !



LXD 的安裝指令如下面這一行,安裝完成後,會自動建立一個叫做 lxd 群組,如果下面第二行的指令查不到 lxd 群組的話,請用下面第三行指令來新建這個 lxd 群組,而想要使用 LXD 的使用者都必須是 lxd 群組的成員,因此,請用下面第四行指令來將使用者加入 lxd 群組哩 !

# 安裝
$ sudo apt-get install lxd

  # 檢查 lxd 群組
$ cat /etc/group | grep lxd

# 新增 lxd 群組
$ newgrp lxd

# 將使用者加入 lxd 群組,以使用者帳號是 arthurtoday 為例
$ sudo adduser arthurtoday lxd

安裝完成並設定好群組之後,接下來,要手動將 LXD 服務給啟動,因為安裝程式不會自動啟動 LXD 服務,也不會將它設定成開機後自動啟動哩 ! 請執行下面這一行指令來啟動 LXD 服務哩 !

$ sudo service lxd start

在開始建立 Container 之前,還有幾個動作要做,因為 LXD 是以 Image 檔為基礎來建立 Container,所以,就要指定使用的 Image 檔來源伺服器,而目前,就只有 Ubuntu 官方提供的 images.linuxcontainers.org 這個,所以,請用下面這一行指令來將這個伺服器加入,要說明的是,指令中的 "ubn" 是用來當作這個來源的別名,所以,可以改成任何的名稱哩 !

$ lxc remote add ubn images.linuxcontainers.org

上面的指令執行後,有可能跑很久之後,就沒有出現任何東西,會發生這種原因的話,很可能是你的環境中有防火牆的關係,因為,上面這個指令會連到 images.linuxcontains.org 的 8443 埠,如果你的防火牆不能對外連 8443 埠的話,就會有問題哩 ! 另外,阿舍偶爾會遇到 images.linuxcontains.org 連不到的情形,就休息一下來連看看囉 !

讓 LXD 自己指定的名字有點長哩 !...
接下來,可以用下面的這一行指令來列示來源伺服器上有那些 Image 檔可用,要注意的是,出現在清單中的第一行的 Image 檔名稱,像是 ubuntu/trusty/i386 這樣的名稱,這就是在建立 Container 時,會使用的名稱囉 !

# "ubn" 是阿舍在執行上一個指令所設定的別名,別忘記後面要加冒號哩 !
$ lxc image list ubn:

操作到這裡,終於,可以開始建立 Container 了,而建立 Container 的方式有二種,第一種是 Container 建立完成後就會自動啟動,而第二種則是單純的建立 Container 而已,以阿舍要建立一個名稱為 u1404 的 Ubuntu 14.04 版的 Container 為例,則二種的建立方式分別如下。

# 利用 launch 指令建立後會自動啟動
$ lxc launch ubn:ubuntu/trusty/amd64 u1404

# 利用 init 指令則是只建立而不啟動
$ lxc init ubn:ubuntu/trusty/amd64 u1404

上面二種方式中,阿舍都有指定新建立的 Container 名稱,但是,如果沒給的話,也是可以的,LXD 就會自己指定新的 Container 的名稱,在建立完成後,用下面第一行的指令來檢視 Container 清單時,就可以看的到新建的 Container 的名稱,然後,在知道名稱後,就可以用下面第二行的指令來檢視 Container 的更多資訊囉 !

$ lxc list

$ lxc info u1404

用 LXD 建好 Container 並啟動後,如果要進入操作的話,在還沒有安裝 SSH Server 之後,要先用 exec 指令執行 bash 程式來進入進行後續的操作,以阿舍的虛擬機器名稱是 u1404 為例,阿舍就要下面第一行的指令來進入這個 Container 操作,然後,操作結束時,用 exit 指令離開,接著,可以用下面第二行的指令來停止這個 Container 。

$ lxc exec u1404 /bin/bash

$ lxc stop u1404

上面就是簡單使用 LXD 來建立 Container 的方式,阿舍本來以為 LXD 可以操作 LXC 建立的 Container 的,結果,目前阿舍試的結果是不行的,另外,如果你在操作 LXD 時,遇到類似下面這個訊息時,通常是因為還沒有啟動 LXD 服務或是使用者沒有加入 lxd 群組所造成的哩 !

> error: Get http://unix.socket/1.0: dial unix /var/lib/lxd/ unix.socket: connection refused


推薦閱讀


有疑問? 問題還是沒解決嗎? 歡迎下方留言提問和討論 😁

沒有留言 :

張貼留言

歡迎留言提問和討論 .... 😁