Tutorial LXC: Instalasi dan Pengoperasian Dasar LXC di Ubuntu Server 18.04

Artikel ini berisi catatan saya tentang bagaimana instalasi dan mengoperasikan LXC (Linux Container). Artikel ini cocok untuk temen-temen pemula yang ingin mengenal dan memakai teknologi Container.

Teknologi container sekarang lebih dipilih dibanding dengan teknologi virtualisasi. Salah satu alasan orang-orang lebih memilih teknologi container adalah pemakaian resource server yang jauh lebih ringan dibanding dengan virtual mechine.

LXC

Misalkan, kebutuhanya hanya ingin mengisolasi atau memisahkan services dibeda server (vm/vps), jika kita menggunakan teknologi virtualisasi (vm) maka kita perlu membuat virtual machine baru (yg didalamnya: RAM, CPU, vHDD, vNet dsb) dikali (x) jumlah services yang akan kita buat.

Contoh kasus diatas tentu kurang efisien jika yang kita isolasi hanya aplikasi / services kecil. Apakah efektif jika kebutuhanya hanya deploy tiga aplikasi ringan dengan backend yang berbeda harus membuat virtual machine terpisah disetiap aplikasi tersebut?

Dengan memanfaat teknologi container maka kita HANYA butuh satu node server untuk memisahkan / mengisolasi services tersebut.
>> Jika terjadi kerusakan pada container 1, aplikasi lain tidak akan terganggu.
>> Proses running up container lebih cepat dibanding jika kita menggunakan virtual machine. Hal ini juga berpengaruh seberapa cepat running up aplikasi yang telah kita deploy di container tersebut.

1 – Instalasi LXC di Ubuntu Server 18.04

Instalasi LXC di Ubuntu Server tidaklah sulit, karena kita cukup instal paket LXC:

sudo apt-get update -y
sudo apt-get install lxc -y

JIKA MENGGUNAKAN Vagrant dalam melakukan pembuatan VM (Provisioning) silahkan pakai script berikut dan simpan dengan nama file Vagrantfile:

IMAGE_NAME = "ubuntu/bionic64"
N = 1

$script = <<-SCRIPT
sudo apt update -y
sudo apt-get install lxc -y
SCRIPT

Vagrant.configure("2") do |config|
    config.ssh.insert_key = false

    config.vm.provision "shell", inline: $script

    config.vm.provider "virtualbox" do |v|
        v.memory = 1024
        v.cpus = 2
    end
      
    (1..N).each do |i|
        config.vm.define "node-#{i}" do |node|
            node.vm.box = IMAGE_NAME
            node.vm.network "private_network", ip: "192.168.99.#{i + 10}"
            node.vm.hostname = "node-#{i}"
        end
    end
end

2 – Pengoperasian Dasar LXC

Ada beberapa command yang akan dipakai dalam pengoperasian dasar LXC, diantaranya:
lxc-create
lxc-attach
lxc-console
lxc-ls
lxc-start
lxc-info
lxc-stop
lxc-destroy

A. Membuat Container LXC

Untuk membuat container kita tidak perlu build dari 0, sudah ada template yang bisa kita gunakan. Untuk membuat container dari template, kita bisa menggunakan perintah berikut:

# lxc-create -t download -n web1-ubuntu18.04

Setting up the GPG keyring
Downloading the image index

---
DIST    RELEASE ARCH    VARIANT BUILD
---
alpine  3.10    amd64   default 20200502_13:00
alpine  3.10    arm64   default 20200502_13:00
alpine  3.10    armhf   default 20200502_13:00
alpine  3.10    i386    default 20200502_13:00
alpine  3.10    ppc64el default 20200502_13:00
alpine  3.10    s390x   default 20200502_13:00
alpine  3.11    amd64   default 20200502_13:21
alpine  3.11    arm64   default 20200502_13:00
alpine  3.11    armhf   default 20200502_13:00
alpine  3.11    i386    default 20200502_13:00
alpine  3.11    ppc64el default 20200502_13:00
alpine  3.11    s390x   default 20200502_13:00
alpine  3.8     amd64   default 20200502_13:00
alpine  3.8     arm64   default 20200502_13:00
alpine  3.8     armhf   default 20200502_13:00
alpine  3.8     i386    default 20200502_13:00
alpine  3.8     ppc64el default 20200502_13:00
alpine  3.8     s390x   default 20200502_13:00
alpine  3.9     amd64   default 20200502_13:00
alpine  3.9     arm64   default 20200502_13:00
alpine  3.9     armhf   default 20200502_13:00
alpine  3.9     i386    default 20200502_13:00
alpine  3.9     ppc64el default 20200502_13:00
alpine  3.9     s390x   default 20200502_13:00
alpine  edge    amd64   default 20200502_13:00
alpine  edge    arm64   default 20200502_13:00
alpine  edge    armhf   default 20200502_13:00
alpine  edge    i386    default 20200502_13:00
alpine  edge    ppc64el default 20200502_13:00
alpine  edge    s390x   default 20200502_13:00
alt     Sisyphus        amd64   default 20200425_01:17
alt     Sisyphus        arm64   default 20200425_01:17
alt     Sisyphus        i386    default 20200425_01:17
alt     Sisyphus        ppc64el default 20200425_01:17
alt     p8      amd64   default 20200502_01:17
alt     p8      i386    default 20200502_01:17
alt     p9      amd64   default 20200502_01:17
alt     p9      arm64   default 20200502_01:17
alt     p9      i386    default 20200502_01:17
apertis 18.12   amd64   default 20200502_10:53
apertis 18.12   arm64   default 20200502_10:53
apertis 18.12   armhf   default 20200502_10:53
apertis v2019.2 amd64   default 20200502_10:53
apertis v2019.2 arm64   default 20200502_10:53
apertis v2019.2 armhf   default 20200502_10:53
apertis v2020.0 amd64   default 20200502_10:53
apertis v2020.0 arm64   default 20200502_10:53
apertis v2020.0 armhf   default 20200502_10:53
archlinux       current amd64   default 20200502_04:18
archlinux       current arm64   default 20200502_04:18
archlinux       current armhf   default 20200502_04:18
centos  6       amd64   default 20200502_07:08
centos  6       i386    default 20200502_07:08
centos  7       amd64   default 20200502_07:08
centos  7       arm64   default 20200427_07:08
centos  7       armhf   default 20200502_07:08
centos  7       i386    default 20200502_07:08
centos  7       ppc64el default 20200427_07:08
centos  8-Stream        amd64   default 20200502_07:08
centos  8-Stream        arm64   default 20200502_07:08
centos  8-Stream        ppc64el default 20200502_07:08
centos  8       amd64   default 20200502_07:08
centos  8       arm64   default 20200502_07:08
centos  8       ppc64el default 20200502_07:08
debian  bullseye        amd64   default 20200502_05:24
debian  bullseye        arm64   default 20200502_05:24
debian  bullseye        armel   default 20200502_05:46
debian  bullseye        armhf   default 20200502_05:36
debian  bullseye        i386    default 20200502_06:19
debian  bullseye        ppc64el default 20200502_05:24
debian  bullseye        s390x   default 20200502_05:24
debian  buster  amd64   default 20200502_05:24
debian  buster  arm64   default 20200502_05:24
debian  buster  armel   default 20200502_06:20
debian  buster  armhf   default 20200502_05:40
debian  buster  i386    default 20200502_05:24
debian  buster  ppc64el default 20200502_05:24
debian  buster  s390x   default 20200502_05:24
debian  jessie  amd64   default 20200502_05:24
debian  jessie  armel   default 20200502_05:24
debian  jessie  armhf   default 20200502_05:24
debian  jessie  i386    default 20200502_06:19
debian  sid     amd64   default 20200502_05:24
debian  sid     arm64   default 20200502_05:24
debian  sid     armel   default 20200502_05:42
debian  sid     armhf   default 20200502_05:43
debian  sid     i386    default 20200502_05:24
debian  sid     ppc64el default 20200502_05:24
debian  sid     s390x   default 20200502_05:24
debian  stretch amd64   default 20200502_05:24
debian  stretch arm64   default 20200502_05:24
debian  stretch armel   default 20200502_05:45
debian  stretch armhf   default 20200502_05:24
debian  stretch i386    default 20200502_05:24
debian  stretch ppc64el default 20200502_05:24
debian  stretch s390x   default 20200502_05:24
devuan  ascii   amd64   default 20200502_12:16
devuan  ascii   arm64   default 20200502_11:50
devuan  ascii   armel   default 20200502_11:50
devuan  ascii   armhf   default 20200502_12:16
devuan  ascii   i386    default 20200502_11:50
fedora  30      amd64   default 20200501_20:33
fedora  30      arm64   default 20200501_20:33
fedora  30      ppc64el default 20200501_20:33
fedora  30      s390x   default 20200501_20:33
fedora  31      amd64   default 20200501_20:33
fedora  31      arm64   default 20200501_20:33
fedora  31      ppc64el default 20200501_20:33
fedora  31      s390x   default 20200501_20:33
fedora  32      amd64   default 20200501_20:33
fedora  32      arm64   default 20200501_20:33
fedora  32      ppc64el default 20200501_20:33
fedora  32      s390x   default 20200501_20:33
funtoo  1.3     amd64   default 20200402_16:45
funtoo  1.3     arm64   default 20200402_16:45
funtoo  1.3     armhf   default 20200402_16:45
funtoo  1.3     i386    default 20200402_16:45
funtoo  1.4     amd64   default 20200501_16:45
funtoo  1.4     arm64   default 20200410_02:25
funtoo  1.4     armhf   default 20200501_16:45
funtoo  1.4     i386    default 20200501_16:45
gentoo  current amd64   default 20200501_17:26
gentoo  current armhf   default 20200501_16:07
gentoo  current i386    default 20200501_16:07
gentoo  current ppc64el default 20200501_16:07
gentoo  current s390x   default 20200501_16:07
kali    current amd64   default 20200501_17:14
kali    current arm64   default 20200501_17:14
kali    current armel   default 20200501_17:14
kali    current armhf   default 20200501_17:14
kali    current i386    default 20200501_17:14
mint    sarah   amd64   default 20200502_08:51
mint    sarah   i386    default 20200502_08:51
mint    serena  amd64   default 20200502_08:51
mint    serena  i386    default 20200502_08:51
mint    sonya   amd64   default 20200502_08:51
mint    sonya   i386    default 20200502_08:51
mint    sylvia  amd64   default 20200502_08:51
mint    sylvia  i386    default 20200502_08:51
mint    tara    amd64   default 20200502_08:51
mint    tara    i386    default 20200502_08:51
mint    tessa   amd64   default 20200502_08:51
mint    tessa   i386    default 20200502_08:51
mint    tina    amd64   default 20200502_08:51
mint    tina    i386    default 20200502_08:51
mint    tricia  amd64   default 20200502_08:51
mint    tricia  i386    default 20200502_08:51
opensuse        15.1    amd64   default 20200502_04:20
opensuse        15.1    arm64   default 20200502_04:20
opensuse        15.1    ppc64el default 20200502_04:20
opensuse        tumbleweed      amd64   default 20200502_04:20
opensuse        tumbleweed      arm64   default 20200502_04:20
opensuse        tumbleweed      i386    default 20200502_04:20
opensuse        tumbleweed      ppc64el default 20200502_04:20
openwrt 18.06   amd64   default 20200502_12:04
openwrt 19.07   amd64   default 20200502_11:57
openwrt snapshot        amd64   default 20200502_11:57
oracle  6       amd64   default 20200502_07:46
oracle  6       i386    default 20200502_07:46
oracle  7       amd64   default 20200502_07:46
oracle  8       amd64   default 20200502_07:46
plamo   6.x     amd64   default 20200502_01:33
plamo   6.x     i386    default 20200502_01:43
plamo   7.x     amd64   default 20200502_01:33
pld     current amd64   default 20200501_20:46
pld     current i386    default 20200501_20:46
sabayon current amd64   default 20200502_01:52
ubuntu  bionic  amd64   default 20200502_07:42
ubuntu  bionic  arm64   default 20200502_07:42
ubuntu  bionic  armhf   default 20200502_07:42
ubuntu  bionic  i386    default 20200502_07:42
ubuntu  bionic  ppc64el default 20200502_07:42
ubuntu  bionic  s390x   default 20200502_07:49
ubuntu  eoan    amd64   default 20200502_07:42
ubuntu  eoan    arm64   default 20200502_07:42
ubuntu  eoan    armhf   default 20200502_07:42
ubuntu  eoan    i386    default 20200502_07:42
ubuntu  eoan    ppc64el default 20200502_07:42
ubuntu  eoan    s390x   default 20200502_07:42
ubuntu  focal   amd64   default 20200502_07:42
ubuntu  focal   arm64   default 20200502_07:42
ubuntu  focal   armhf   default 20200502_07:42
ubuntu  focal   ppc64el default 20200502_07:42
ubuntu  focal   s390x   default 20200502_07:50
ubuntu  groovy  amd64   default 20200502_07:42
ubuntu  groovy  arm64   default 20200502_07:42
ubuntu  groovy  armhf   default 20200502_07:42
ubuntu  groovy  ppc64el default 20200502_07:54
ubuntu  groovy  s390x   default 20200502_07:42
ubuntu  trusty  amd64   default 20200502_07:42
ubuntu  trusty  arm64   default 20200502_07:42
ubuntu  trusty  armhf   default 20200502_07:42
ubuntu  trusty  i386    default 20200502_07:42
ubuntu  trusty  ppc64el default 20200502_07:42
ubuntu  xenial  amd64   default 20200502_07:42
ubuntu  xenial  arm64   default 20200502_07:42
ubuntu  xenial  armhf   default 20200502_07:42
ubuntu  xenial  i386    default 20200502_07:42
ubuntu  xenial  ppc64el default 20200502_07:42
ubuntu  xenial  s390x   default 20200502_07:42
voidlinux       current amd64   default 20200501_17:10
voidlinux       current arm64   default 20200501_17:10
voidlinux       current armhf   default 20200501_17:10
voidlinux       current i386    default 20200501_17:10
---

Diatas adalah daftar template yang bisa kita gunakan, silahkan dipilih sesuai kebutuah. Kita cukup mengetahui DistributionReleaseArchitecture. Selanjutnya kita inputkan:

Distribution: 
ubuntu
Release: 
bionic
Architecture: 
amd64

Downloading the image index
Downloading the rootfs
Downloading the metadata
The image cache is now ready
Unpacking the rootfs

---
You just created an Ubuntu bionic amd64 (20200502_07:42) container.

To enable SSH, run: apt install openssh-server
No default root or user password are set by LXC.

Container sudah jadi, selanjutnya kita bisa hidupkan / start.

B. Menjalankan Container

Menjalankan container menggunakan command lxc-start:

# lxc-start -n web1-ubuntu18.04

C. Masuk kedalam Container

Masuk kedalam container menggunakan command lxc-attach:

# lxc-attach -n web1-ubuntu18.04
root@web1-ubuntu18:~# 

D. Login User Container

Login kedalam container menggunakan command lxc-console, namun sebelum itu kita perlu membuat user terlebih dahulu atau melakukan setting password user ubuntu bawaan: passwd ubuntu.

# lxc-console -n web1-ubuntu18.04 

Connected to tty 1
Type <Ctrl+a q> to exit the console, <Ctrl+a Ctrl+a> to enter Ctrl+a itself

Ubuntu 18.04.4 LTS web1-ubuntu18.04 pts/0

web1-ubuntu18 login: ubuntu
Password:

Untuk keluar mode console bisa menggunakan: CTRL+a, kemudian q.

E. Melihat Container yang Telah Dibuat

Melihat container yang telah dibuat menggunakan command lxc-ls:

# lxc-ls 
web1-ubuntu18.04 web2-centos8

F. Melihat Reource Container

Melihat resource container yang berjalan menggunakan command lxc-info:

# lxc-info -n web1-ubuntu18
Name:           web1-ubuntu18.04
State:          RUNNING
PID:            3347
IP:             10.0.3.20
CPU use:        1.16 seconds
BlkIO use:      756.00 KiB
Memory use:     31.19 MiB
KMem use:       5.69 MiB
Link:           vethCU9B60
 TX bytes:      2.17 KiB
 RX bytes:      5.48 KiB
 Total bytes:   7.64 KiB

Untu melihat semua resource container yang berjalan: for c in lxc-ls; do lxc-info $c; echo; done

G. Shutdown Container

Shutdown container yang berjalan menggunakan command lxc-stop:

# lxc-stop -n web2-centos8

H. Menghapus Container

Menghapus container yang berjalan menggunakan command lxc-destroy:

# lxc-destroy -n web2-centos8

Jadi, seperti itulah instalasi dan dasar pengoperasian LXC (Linux Container). Mudah kan? Jika ada yang salah atau kurang silahkan komen dibawah. Nanti saya akan tambah dan perbaiki. Terimakasih.

About Ahmad Lukman Hakim 70 Articles
Admin LUKMANLAB, Network Engineer, System Administrator.