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.
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 Distribution
– Release
– Architecture
. 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.
Admin LUKMANLAB, DevOps Engineer, Site Reliability Engineer, System Administrator.