歡迎光臨
每天分享高質量文章

在 Ubuntu 上體驗 LXD 容器 | Linux 中國

本文的主角是容器,一種類似虛擬機器但更輕量級的構造。你可以輕易地在你的 Ubuntu 桌面系統中建立一堆容器!
— Simos Xenitellis


本文導航
編譯自 | https://blog.simos.info/trying-out-lxd-containers-on-our-ubuntu/ 
 作者 | Simos Xenitellis
 譯者 | lujun9972

本文的主角是容器,一種類似虛擬機器但更輕量級的構造。你可以輕易地在你的 Ubuntu 桌面系統中建立一堆容器!

虛擬機器會虛擬出整個電腦讓你來安裝客戶機作業系統。相比之下,容器復用了主機的 Linux 核心,只是簡單地 包容 了我們選擇的根檔案系統(也就是執行時環境)。Linux 內核有很多功能可以將執行的 Linux 容器與我們的主機分割開(也就是我們的 Ubuntu 桌面)。

Linux 本身需要一些手工操作來直接管理他們。好在,有 LXD(讀音為 Lex-deeh),這是一款為我們管理 Linux 容器的服務。

我們將會看到如何:

☉ 在我們的 Ubuntu 桌面上配置容器,
☉ 建立容器,
☉ 安裝一臺 web 伺服器,
☉ 測試一下這臺 web 伺服器,以及
☉ 清理所有的東西。

設定 Ubuntu 容器

如果你安裝的是 Ubuntu 16.04,那麼你什麼都不用做。只要安裝下麵所列出的一些額外的包就行了。若你安裝的是 Ubuntu 14.04.x 或 Ubuntu 15.10,那麼按照 LXD 2.0 系列(二):安裝與配置[1] 來進行一些操作,然後再回來。

確保已經更新了包串列:

  1. sudo apt update

  2. sudo apt upgrade

安裝 lxd 包:

  1. sudo apt install lxd

若你安裝的是 Ubuntu 16.04,那麼還可以讓你的容器檔案以 ZFS 檔案系統的格式進行儲存。Ubuntu 16.04 的 Linux kernel 包含了支援 ZFS 必要的核心模組。若要讓 LXD 使用 ZFS 進行儲存,我們只需要安裝 ZFS 工具包。沒有 ZFS,容器會在主機檔案系統中以單獨的檔案形式進行儲存。透過 ZFS,我們就有了寫入時複製等功能,可以讓任務完成更快一些。

安裝 zfsutils-linux 包(若你安裝的是 Ubuntu 16.04.x):

  1. sudo apt install zfsutils-linux

安裝好 LXD 後,包安裝指令碼應該會將你加入 lxd 組。該組成員可以使你無需透過 sudo就能直接使用 LXD 管理容器。根據 Linux 的習慣,你需要先登出桌面會話然後再登入 才能應用 lxd 的組成員關係。(若你是高手,也可以透過在當前 shell 中執行 newgrp lxd 命令,就不用重登入了)。

在開始使用前,LXD 需要初始化儲存和網路引數。

執行下麵命令:

  1. $ sudo lxd init

  2. Name of the storage backend to use (dir or zfs): zfs

  3. Create a new ZFS pool (yes/no)? yes

  4. Name of the new ZFS pool: lxd-pool

  5. Would you like to use an existing block device (yes/no)? no

  6. Size in GB of the new loop device (1GB minimum): 30

  7. Would you like LXD to be available over the network (yes/no)? no

  8. Do you want to configure the LXD bridge (yes/no)? yes

  9. > You will be asked about the network bridge configuration. Accept all defaults and continue.

  10. Warning: Stopping lxd.service, but it can still be activated by:

  11. lxd.socket

  12. LXD has been successfully configured.

  13. $ _

我們在一個(單獨)的檔案而不是塊裝置(即分割槽)中構建了一個檔案系統來作為 ZFS 池,因此我們無需進行額外的分割槽操作。在本例中我指定了 30GB 大小,這個空間取之於根(/) 檔案系統中。這個檔案就是 /var/lib/lxd/zfs.img

行了!最初的配置完成了。若有問題,或者想瞭解其他資訊,請閱讀 https://www.stgraber.org/2016/03/15/lxd-2-0-installing-and-configuring-lxd-212/ 。

建立第一個容器

所有 LXD 的管理操作都可以透過 lxc 命令來進行。我們透過給 lxc 不同引數來管理容器。

  1. lxc list

可以列出所有已經安裝的容器。很明顯,這個串列現在是空的,但這表示我們的安裝是沒問題的。

  1. lxc image list

列出可以用來啟動容器的(已經快取的)映象串列。很明顯這個串列也是空的,但這也說明我們的安裝是沒問題的。

  1. lxc image list ubuntu

列出可以下載並啟動容器的遠端映象。而且指定了顯示 Ubuntu 映象。

  1. lxc image list images

列出可以用來啟動容器的(已經快取的)各種發行版的映象串列。這會列出各種發行版的映象比如 Alpine、Debian、Gentoo、Opensuse 以及 Fedora。

讓我們啟動一個 Ubuntu 16.04 容器,並稱之為 c1

  1. $ lxc launch ubuntux c1

  2. Creating c1

  3. Starting c1

  4. $

我們使用 launch 動作,然後選擇映象 ubuntu:x (x 表示 Xenial/16.04 映象),最後我們使用名字 c1 作為容器的名稱。

讓我們來看看安裝好的首個容器,

  1. $ lxc list

  2. +---------|---------|----------------------|------|------------|-----------+

  3. | NAME | STATE | IPV4 | IPV6 | TYPE | SNAPSHOTS |

  4. +---------|---------|----------------------|------|------------|-----------+

  5. | c1 | RUNNING | 10.173.82.158 (eth0) | | PERSISTENT | 0 |

  6. +---------|---------|----------------------|------|------------|-----------+

我們的首個容器 c1 已經執行起來了,它還有自己的 IP 地址(可以本地訪問)。我們可以開始用它了!

安裝 web 伺服器

我們可以在容器中執行命令。執行命令的動作為 exec

  1. $ lxc exec c1 -- uptime

  2. 114725 up 2 min0 usersload average0.070.050.04

  3. $ _

在 exec 後面,我們指定容器、最後輸入要在容器中執行的命令。該容器的執行時間只有 2 分鐘,這是個新出爐的容器:-)。

命令列中的 -- 跟我們 shell 的引數處理過程有關。若我們的命令沒有任何引數,則完全可以省略 -

  1. $ lxc exec c1 -- df -h

這是一個必須要 - 的例子,由於我們的命令使用了引數 -h。若省略了 -,會報錯。

然後我們執行容器中的 shell 來更新包串列。

  1. $ lxc exec c1 bash

  2. root@c1:~# apt update

  3. Ign http://archive.ubuntu.com trusty InRelease

  4. Get:1 http://archive.ubuntu.com trusty-updates InRelease [65.9 kB]

  5. Get:2 http://security.ubuntu.com trusty-security InRelease [65.9 kB]

  6. ...

  7. Hit http://archive.ubuntu.com trusty/universe Translation-en

  8. Fetched 11.2 MB in 9s (1228 kB/s)

  9. Reading package lists... Done

  10. root@c1:~# apt upgrade

  11. Reading package lists... Done

  12. Building dependency tree

  13. ...

  14. Processing triggers for man-db (2.6.7.1-1ubuntu1) ...

  15. Setting up dpkg (1.17.5ubuntu5.7) ...

  16. root@c1:~# _

我們使用 nginx 來做 web 伺服器。nginx 在某些方面要比 Apache web 伺服器更酷一些。

  1. root@c1:~# apt install nginx

  2. Reading package lists... Done

  3. Building dependency tree

  4. ...

  5. Setting up nginx-core (1.4.6-1ubuntu3.5) ...

  6. Setting up nginx (1.4.6-1ubuntu3.5) ...

  7. Processing triggers for libc-bin (2.19-0ubuntu6.9) ...

  8. root@c1:~# _

讓我們用瀏覽器訪問一下這個 web 伺服器。記住 IP 地址為 10.173.82.158,因此你需要在瀏覽器中輸入這個 IP。

lxd-nginx

讓我們對頁面文字做一些小改動。回到容器中,進入預設 HTML 頁面的目錄中。

  1. root@c1:~# cd /var/www/html/

  2. root@c1:/var/www/html# ls -l

  3. total 2

  4. -rw-r--r-- 1 root root 612 Jun 25 12:15 index.nginx-debian.html

  5. root@c1:/var/www/html#

使用 nano 編輯檔案,然後儲存:

lxd-nginx-nano

之後,再刷一下頁面看看,

lxd-nginx-modified

清理

讓我們清理一下這個容器,也就是刪掉它。當需要的時候我們可以很方便地建立一個新容器出來。

  1. $ lxc list

  2. +---------+---------+----------------------+------+------------+-----------+

  3. | NAME | STATE   | IPV4                 | IPV6 | TYPE       | SNAPSHOTS    |

  4. +---------+---------+----------------------+------+------------+-----------+

  5. | c1   | RUNNING | 10.173.82.169 (eth0) |      | PERSISTENT | 0            |

  6. +---------+---------+----------------------+------+------------+-----------+

  7. $ lxc stop c1

  8. $ lxc delete c1

  9. $ lxc list

  10. +---------+---------+----------------------+------+------------+-----------+

  11. | NAME | STATE   | IPV4                 | IPV6 | TYPE       | SNAPSHOTS    |

  12. +---------+---------+----------------------+------+------------+-----------+

  13. +---------+---------+----------------------+------+------------+-----------+

我們停止(關閉)這個容器,然後刪掉它了。

本文至此就結束了。關於容器有很多玩法。而這隻是配置 Ubuntu 並嘗試使用容器的第一步而已。


via: https://blog.simos.info/trying-out-lxd-containers-on-our-ubuntu/

作者:Simos Xenitellis[4] 譯者:lujun9972 校對:wxy

本文由 LCTT 原創編譯,Linux中國 榮譽推出

LCTT 譯者

lujun9972 ? ? ? ?
共計翻譯:73 篇
貢獻時間:53 天


推薦文章

< 左右滑動檢視相關文章 >

點選圖片、輸入文章 ID 或識別二維碼直達

贊(0)

分享創造快樂