Docker Engine, apakah itu?

Docker belakangan ini marak digunakan dalam dunia IT. Docker banyak digunakan oleh para sysadmin, devops engineer, developer, dan juga tentu para pegiat IT lainnya. Sebenarnya, apakah Docker Engine itu? Docker adalah sebuah platform software PaaS (Platform As A Service). Docker dikembangkan oleh Salomon Hykes pada tahun 2009. Kemudian dirilis oleh Docker Inc, pada tahun 2013. Docker dapat berjalan di Linux, Windows, MacOS.

 

Docker Engine untuk Quick Deployment

 

Docker sendiri merupakan “container“. Pada praktisnya Docker merupakan sebuah software yang untuk menempatkan container untuk keperluan deployment (instalasi aplikasi) menjadi instan dan cepat, tidak lagi perlu memikirkan “environment” atau lingkungan yang ada di OS induk. Ya, Docker bagi para sysadmin akan lebih mudah dilihat sebagai semacam “mini virtual machine“. Sedangkan bagi para developer, akan mudah dilihat sebagai semacam alat untuk fast/quick install.

Secara singkat : Docker adalah platform software untuk keperluan quick deployment, dan terisolasi dengan mode OS based (seperti terpisah OS antara satu dengan lain docker).

Docker Engine Structure

Struktur Docker vs Virtual Machine

Dengan demikian jika sebuah datacenter memiliki satu server dan akan digunakan untuk banyak kegunaan aplikasi yang beda OS, dapat menggunakan docker ini. Contoh kasus misal, pada sebuah server CentOS 8.x, dibutuhkan dapat melakukan instalasi program-program aplikasi under Ubuntu, ataupun banyak aplikasi dengan PHP versi berbeda-beda, maka solusi Docker Engine dapat membantu hal ini. Di sana dapat dibuat banyak container docker, sesuai dengan required OS masing-masing.

 

Q : Lho berarti Docker itu VM dong?

A : Bukan, beda. Dia paket instalasi yang terisolasi by container. Dianggap beda OS. Maka di sini dikatakan docker environment. Sebuah isolasi lingkungan OS sendiri.

Q : Lho untungnya apa?

A : Dengan satu file docker-compose, kita bisa mendeploy aplikasi langsung berikut dengan kebutuhan OS dan program-program yang dibutuhkan. Keuntungan lain adalah docker itu scalable, dapat diatur dengan mudah dengan aplikasi tertentu dalam satu OS induk (host)

Q : Berarti, mending VM (Virtual Machine) atau Docker?

A : Nggak bisa dibandingin yaa… karena tergantung penggunaan spesifiknya

Q : Dicontohin nggak?

A : Sabar ya…

Q : Bisa diinstall di OS dan mesin manapun? Kalau gue install docker di atas VM lagi  boleh nggak?

A : Bisa, dengan catatan.. VM nya berupa KVM. Untuk jenis OpenVZ harus memiliki kernel dasar di atas 3.10

Pada artikel ini akan dibahas tentang cara instalasi docker, dan contoh simpel. Pada artikel lain akan dipaparkan penggunaan-penggunaan instant app installation, dengan docker, terutama paket-paket installer untuk perguruan tinggi seperti : eprints, moodle dan sejenisnya.

System Requirements

Docker Engine memiliki kebutuhan tertentu untuk dapat berjalan. Kebutuhan minimum antara lain adalah :

CPU 2 Core @ 2.1GHz
Memory 8 GB
Virtualisasi Dedicated Server

KVM

OpenVZ kernel 3.10 ke atas

Versi Kernel 3.10 ke atas
OS Ubuntu,

Debian,

Windows

Centos di bawah versi 8

 

Cara Instalasi Docker Engine pada Ubuntu 16.04

Pada Linux, instalasi Docker Engine pada umumnya sudah didukung oleh repository distro Linux tersebut. Namun pada CentOS 8, CentOS mulai meninggalkan dukungan terhadap Docker. Untuk containerize CentOS 8, diganti dengan platform bernama : podman. Lho, lantas untuk instalasi Docker di CentOS bagaimana? Jika memang sangat diperlukan, ya diinstal secara terpisah. Dapat menggunakan source compile atau paket tambahan dari repo lain.  Untuk instalasi Docker pada Ubuntu, hingga Ubuntu 20 belum banyak perbedaan.

Untuk instalasi Docker pada Ubuntu cukup mudah. Berikut langkah-langkahnya :

1. Adopt Repo Docker Engine

curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -

sudo apt install software-properties-common

sudo add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable"

apt update

apt install docker-ce -y

2. Check Status Instalasi, Startup dan Kondisi Service

Check status instalasi Docker Engine :

dpkg -l | grep docker

Seharusnya mengeluarkan pesan seperti berikut :

ii docker-ce 5:19.03.6~3-0~ubuntu-xenial amd64 Docker: the open-source application container engine
ii docker-ce-cli 5:19.03.6~3-0~ubuntu-xenial amd64 Docker CLI: the open-source application container engine

Jika belum mengeluarkan pesan sejenis ini, berarti belum terinstal.

 

Check Status Startup

systemctl status docker

Seharusnya mengeluarkan pesan seperti berikut :

Docker Engine Status

Pada sistem operasi Ubuntu dan Debian, sesaat sesudah proses instalasi via repo, maka service akan langsung dinyalakan, dan secara default langsung menjadi startup (program yang langsung nyala saat OS menyala).

systemctl status docker #cek status enable dan operasional

systemctl enable docker #menjadikan docker sebagai startup service

systemctl disable docker #mendisable docker dari startup service

systemctl start docker #menjalankan service docker

systemctl stop docker #stop service docker

systemctl restart docker #merestart service docker

 

Check daemon Docker Engine dengan CLI (Command Line Interface)

ps axuwf | grep docker

jika service docker menyala akan menghasilkan minimal seperti berikut :

root 7566 0.0 0.7 698616 15132 ? Ssl 09:01 0:23 /usr/bin/dockerd -H fd:// --containerd=/run/containerd/containerd.sock

Jika sudah banyak container yang berjalan pada docker tersebut, akan berisi seperti berikut :

ps ax docker engine

 

Selain itu dapat juga menggunakan perintah check Listen Port dan Socket

sudo netstat -pluntx | grep docker

netstat liste docker engine

Pada perintah ini, Linux akan mengeluarkan hasil berupa seluruh port dan socket yang digenerate oleh Docker. Jika Docker belum terisi container, maka yang muncul hanyalah docker socket, dan docker-proxy. Yang sering dilupakan pada perintah netstat saat check listening service, opsi -x itu sangat berguna untuk mengeluarkan kondisi daemon socket.

Sampai di sini, instalasi Docker Engine pada Ubuntu telah selesai. Untuk CentOS 7 bagaimana? Lanjut….

 

Cara Instalasi Docker pada CentOS 7.x

Perbedaan cara instalasi Docker Engine pada Ubuntu dan Centos sebenarnya tidak begitu banyak. Perbedaan hanya pada adopt repo, perintah instal dari repo, dan perintah post install. Mari kita mulai :

1. Adopt Repo Docker Engine

yum install wget curl

yum install -y yum-utils

yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo

yum list | grep docker-ce

yum install docker-ce

2. Check Status Instalasi, Startup dan Kondisi Service

Berbeda dengan di Ubuntu dan Debian, CentOS tidak langsung mengaktifkan service setelah diinstal. Dia harus di-enable-kan dulu startupnya, kemudian distart. Sebaliknya, kondisi firewall service (firewalld dan iptables) justru langsung aktif. Hal ini akan banyak membuat beberapa service yang melibatkan pembukaan port, tidak langsung jalan, meski service telah menyala

systemctl enable docker

systemctl start docker

systemctl status docker

Agar mempermudah proses belajar, firewall kita matikan dulu ya 😁 , besok kita nyalakan lagi..

systemctl stop firewalld

systemctl disable firewalld

Untuk langkah lain seperti check startup, check daemon, ps, dan netstat memiliki cara langkah yang sama.

Docker Hello World

Pelajaran pertama di dunia IT haruslah “Hello World”. Kita belum tahu, dalam server kita sudah ada container belum. Cara untuk mengetahui adalah dengan perintah :

Check Images

Untuk cek isi container yang ada dalam Docker Engine kita, dapat digunakan perintah ini:

docker images

Jika belum pernah melakukan pengisian container, maka isinya akan kosong. Namun beda dengan yang sudah berisi. Misal :

docker engine ps

Check container yang berjalan

Untuk melihat isi container yang berjalan dapat menggunakan :

docker ps

Pada docker engine yang sudah berisi container, dan container tersebut running, maka perintah ini akan menghasilkan result listing proses docker seperti berikut :

Docker Engine untuk Quick Deployment

Docker Hello World

Mari kita jalankan dulu :

docker run hello-world

Akan muncul seperti berikut :

docker hello world

Jangan panik dulu dengan kata Unable to … Docker akan mencari image container secara lokal terlebih dulu, jika tidak ditemukan, maka dia akan mencari keluar, yaitu ke docker hub, yaitu suatu docker repository yang berisi banyak image dan docker source di sana. Proses mengambil image docker dari luar dinamakan docker pull

Cara Mencari Docker Image

Perintah untuk mencari docker adalah dengan cara :

docker search [blabla]

Misal adalah

docker search apache2

Docker Engine untuk Quick Deployment

Cara Mengambil Docker Image

Setelah didapatkan daftar docker image dari perintah docker search, maka bisa diambil nama itemnya untuk di-pull

docker pull [blabla]

misal :

Docker Engine untuk Quick Deployment

Hati-hati ya, docker pull jangan dibiasakan di koneksi selular. 😁.. Kuota bisa jebol, karena biasanya pull melibatkan pengambilan image-image sebesar image OS. Kalau cuma HTTPD atau Apache mungkin belum terasa besar.

Menjalankan Docker Image

Menjalakan proses docker image sebenarnya hanyalah dengan perintah :

docker run [blabla]

Namun karena jika tanpa opsi apapun, docker tersebut tidak akan berjalan di balik layar, dan hanya akan menampilkan pesan blank. Selanjutnya di beberapa docker yang dibutuhkan portnya (port 80 misal), akan diperlukan juga statement untuk mengeluarkan port. Pada contoh ini kita coba untuk menghidupkan service docker httpd keluar pada port 9081.

docker images | grep httpd

docker run -it -p 9081:80 -d httpd

sudo netstat -plunt | grep 9081

 

netstat kondisi docker engine

Saat ini pada PC saya, dibuka dengan http://localhost:9081 sudah memunculkan : It Works

Menghentikan Proses Docker Image

Proses menghentikannya cukup mudah, yaitu mencari docker yang berjalan, kemudian distop container id yang ada.

docker ps | grep httpd

docker stop [blabla]

Docker Engine untuk Quick Deployment

Sampai di sini, pengantar instalasi docker. Artikel ini akan menjadi bahan rujukan kembali saat kelak kita akan mencoba instalasi beberapa aplikasi pendukung akademik yang berbasis docker. Artikel ini, juga ditulis untuk dipersembahkan untuk para developer, sysadmin, network engineer dan devops engineer kampus.