ติดตั้ง LXD บน ubuntu 18.04 server

จาก Wiki Opensource

บันทึกนี้ปรับปรุงล่าสุดเมื่อวันที่ 4-10-2561
ดูแลโดย WIBOON

ขั้นตอน
1. LXD มีให้มาแล้ว ให้ตั้งค่าเพื่อเริ่มต้น

sudo lxd init

ป้อนข้อมูลตามตัวอย่างข้างล่างนี้

Would you like to use LXD clustering? (yes/no) [default=no]: 
Do you want to configure a new storage pool? (yes/no) [default=yes]: 
Name of the new storage pool [default=default]: 
Name of the storage backend to use (btrfs, dir, lvm) [default=btrfs]: 
Create a new BTRFS pool? (yes/no) [default=yes]: 
Would you like to use an existing block device? (yes/no) [default=no]: 
Size in GB of the new loop device (1GB minimum) [default=15GB]: 4  
Would you like to connect to a MAAS server? (yes/no) [default=no]: 
Would you like to create a new local network bridge? (yes/no) [default=yes]: 
What should the new bridge be called? [default=lxdbr0]: 
What IPv4 address should be used? (CIDR subnet notation, “auto” or “none”) [default=auto]: 
What IPv6 address should be used? (CIDR subnet notation, “auto” or “none”) [default=auto]: 
Would you like LXD to be available over the network? (yes/no) [default=no]: 
Would you like stale cached images to be updated automatically? (yes/no) [default=yes] 
Would you like a YAML "lxd init" preseed to be printed? (yes/no) [default=no]: 

ตรวจสอบ network interface ที่เกิดขึ้น

mama@ubuntu:~$ ifconfig
enp0s3: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet 10.0.100.251  netmask 255.255.255.0  broadcast 10.0.100.255

lo: flags=73<UP,LOOPBACK,RUNNING>  mtu 65536
        inet 127.0.0.1  netmask 255.0.0.0

lxdbr0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet 10.25.51.1  netmask 255.255.255.0  broadcast 0.0.0.0

veth66CMDG: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet6 fe80::fc92:d6ff:fec5:ca28  prefixlen 64  scopeid 0x20<link>
        ether fe:92:d6:c5:ca:28  txqueuelen 1000  (Ethernet)

2. สร้าง container ชื่อ myubuntu
2.1 สร้าง container พร้อม ๆ ไปกับการไป pull image มาจาก Internet

lxc launch images:ubuntu/bionic/amd64 myubuntu

ผลลัพธ์

mama@ubuntu:~$ lxc image ls
+-------+--------------+--------+--------------------------------------+--------+----------+-----------------------------+
| ALIAS | FINGERPRINT  | PUBLIC |             DESCRIPTION              |  ARCH  |   SIZE   |         UPLOAD DATE         |
+-------+--------------+--------+--------------------------------------+--------+----------+-----------------------------+
|       | b01bfa78b444 | no     | Ubuntu bionic amd64 (20181002_07:42) | x86_64 | 120.47MB | Oct 3, 2018 at 4:12am (UTC) |
+-------+--------------+--------+--------------------------------------+--------+----------+-----------------------------+
mama@ubuntu:~$ lxc list 
+----------+---------+---------------------+-----------------------------------------------+------------+-----------+
|   NAME   |  STATE  |        IPV4         |                     IPV6                      |    TYPE    | SNAPSHOTS |
+----------+---------+---------------------+-----------------------------------------------+------------+-----------+
| myubuntu | RUNNING | 10.25.51.189 (eth0) | fd42:96d8:8f21:f61b:216:3eff:fe55:56c1 (eth0) | PERSISTENT | 0         |
+----------+---------+---------------------+-----------------------------------------------+------------+-----------+

2.2 การ stop/start container ชื่อ myubuntu

lxc stop myubuntu
lxc start myubuntu

2.3 เข้าไปทำงานใน container ชื่อ myubuntu

lxc exec myubuntu bash

2.4 ปรับแต่ง repository ชี้มายัง mirror site ในไทย ใช้ vi หรือ nano แก้ไขไฟล์ /etc/apt/sources.list

deb http://th.archive.ubuntu.com/ubuntu bionic main restricted universe multiverse
deb http://th.archive.ubuntu.com/ubuntu bionic-updates main restricted universe multiverse
deb http://security.ubuntu.com/ubuntu bionic-security main restricted universe multiverse

2.5 อัปเดต server

apt update && apt upgrade

2.6 ติดตั้งซอฟต์แวร์ apache 2.4 และ php 7.2

apt install apache2
apt install php php-mysql
apt install wget unzip
apt install libapache2-mod-php7.2
exit

3. สร้างเป็น image ชื่อ apache2.4php7.2 ไว้เป็นจุดเริ่มต้นในครั้งต่อไปสำหรับ server ใหม่ โดยสร้าง image ขึ้นมาเองจาก container เดิมชื่อ myubuntu ที่ติดตั้งโปรแกรมที่ต้องการ

lxc stop myubuntu
lxc publish myubuntu --alias apache2.4php7.2
lxc image list

ผลลัพธ์

+-----------------+--------------+--------+--------------------------------------+--------+----------+-----------------------------+
|      ALIAS      | FINGERPRINT  | PUBLIC |             DESCRIPTION              |  ARCH  |   SIZE   |         UPLOAD DATE         |
+-----------------+--------------+--------+--------------------------------------+--------+----------+-----------------------------+
| apache2.4php7.2 | 2dfb061120b4 | no     |                                      | x86_64 | 167.92MB | Oct 3, 2018 at 5:35am (UTC) |
+-----------------+--------------+--------+--------------------------------------+--------+----------+-----------------------------+
|                 | b01bfa78b444 | no     | Ubuntu bionic amd64 (20181002_07:42) | x86_64 | 120.47MB | Oct 3, 2018 at 4:12am (UTC) |
+-----------------+--------------+--------+--------------------------------------+--------+----------+-----------------------------+

3.1 ถ้าต้องการใส่คำอธิบายเพิ่มเติม

lxc image edit apache2.4php7.2

จากเดิม

autoupdate: false
properties: {}
public: false 

ใหม่

autoupdate: false
properties:
  description: Ubuntu 18.04 with apache 2.4 and php 7.2
public: false

หมายเหตุ คำว่า description: เป็น ตัวอักษรพิมพ์เล็ก

3.2 ตรวจสอบดู lxc profile ชื่อ apache2.4php7.2

lxc image show apache2.4php7.2

4. การลบ container ชื่อ myubuntu
lxc delete myubuntu

5. การลบ image ที่มี fingerprint ID b01bfa78b444
lxc image delete b01bfa78b444

6. สร้าง container ชื่อ tblog1 จาก local image ชื่อ apache2.4php7.2

lxc launch apache2.4php7.2 tblog1

7. การแก้ไข apache2 default page ใน container เพื่อแสดงข้อมูล IP Address
เข้าทำงานใน container ชื่อ tblog1

lxc exec tblog1 bash

สร้างไฟล์ index.php แทน index.html เพื่อใช้ตรวจสอบ IP server

cd /var/www/html
mv index.html old
echo "<?php echo \$_SERVER['SERVER_ADDR']; ?> It works!" > index.php

ออกจาก container
exit

8. ตรวจสอบ IP ของ container ชือ tblog1
lxc list tblog1
สมมติได้ IP ตามตัวอย่าง

+--------+---------+---------------------+-----------------------------------------------+------------+-----------+
|  NAME  |  STATE  |        IPV4         |                     IPV6                      |    TYPE    | SNAPSHOTS |
+--------+---------+---------------------+-----------------------------------------------+------------+-----------+
| tblog1 | RUNNING | 10.25.51.155 (eth0) | fd42:96d8:8f21:f61b:216:3eff:fea8:4613 (eth0) | PERSISTENT | 0         |
+--------+---------+---------------------+-----------------------------------------------+------------+-----------+

เข้า browser ไปที่ http://10.25.51.155/