The Docker Fundamental

Rony Setyawan
TelkomDev
Published in
5 min readAug 30, 2021

Chapter 1 — The Docker Fundamental

Kembali lagi dengan saya rony, seorang software architect sekaligus developer bodoh yang selalu mencoba belajar dan berbagi sedikit dari ilmu yang ada di dunia ini. Kali ini saya akan berbagi tentang Docker.

Saya akan coba mulai dengan beberapa pertanyaan Apa itu Docker ? Mengapa harus Docker?

Kedua pertanyaan tersebut akan kita jawab setelah melalui beberapa penjelasan yang cukup penting dan menarik di bawah ini.

Tak ubahnya dengan kebanyakan munculnya sebuah teknologi, Docker pun memberikan solusi atas sesuatu permasalahan yang sangat fundamental. Dan masalah tersebut dapat dilihat seperti gambar di bawah ini.

Tentu proses instalasi dan running sebuah program/software menjadi tidak mudah lagi kalau melihat dari Gambar 1 tersebut. Nah, di situlah Docker hadir dengan tujuan untuk dapat mempermudah proses installing dan running program/software tanpa harus khawatir dengan setup dan dependencies software tersebut.

Mari kita coba ambil sebuah contoh sebagai pembuktian atas kemudahan yang ditawarkan Docker tersebut.

Sebagai contoh kita akan installing dan running redis dengan Docker dan dengan Non-Docker. Redis sendiri adalah sebuah in-memory data structure yang biasa digunakan sebagai database, cache, atau message broker.

$ wget https://download.redis.io/releases/redis-6.2.5.tar.gz
$ tar xzf redis-6.2.5.tar.gz
$ cd redis-6.2.5
$ make
$ src/redis-server
docker run -it redis

Tentu dari contoh tersebut kita dapat mengambil beberapa hal yang menjadi pendukung mengapa Docker jauh lebih mempermudah sehingga menjadi fundamental capability yang harus dikuasai sekarang ini. Beberapa hal tersebut antara lain adalah sebagai berikut.

  • Less Complexity
  • Easier to use
  • More flexible
  • Fixing software dependency problem
  • etc

Docker sendiri sebenarnya merupakan sebuah platform/ecosystem yang apabila digambarkan lebih detail seperti gambar di bawah ini.

Apabila kita cermati, sebenarnya keseluruhan Docker ecosystem akan mengurusi hal-hal yang berkaitan dengan creating dan running container. Lalu, Apa itu Container?

Kita akan jawab melalui beberapa penjelasan berikut ini.

Ketika kita menjalankan Docker Run, sebenarnya Docker CLI akan mengarahkan ke Docker Hub hingga kemudian download sebuah file Image. File Image tersebut berisi semua dependencies dan configurations untuk menjalankan sebuah program/software yang spesifik. Program/Software yang berjalan tersebut kemudian dijalankan di dalam instance dari Image sebelumnya dimana memiliki resource yang isolated(memory, space of hard drive, etc).

Docker Client / CLI bisa dikatakan merupakan sebuah interface/portal kita untuk berinteraksi dengan Docker Server / Daemon. Docker Daemon itu lah yang sebenarnya merupakan sebuah software dari docker ecosystem yang mempunyai tanggung jawab untuk creating container’s images, maintaining containers, uploading images, dan hal-hal lainnya di dalam Docker World.

So, mari kita mulai bermain dengan mulai installing Docker di komputer kita.

Tapi, sebelum kita lanjut silahkan untuk melakukan Sign Up terlebih dahulu di → https://hub.docker.com/signup

Untuk Mac dan Windows kita akan dibantu dengan Docker Desktop, sedangkan untuk platform lain dapat langsung menggunakan Docker Engine.

Berikut referensi yang dapat digunakan untuk.

Docker Desktop untuk Mac → https://hub.docker.com/editions/community/docker-ce-desktop-mac

Docker Desktop untuk Windows → https://hub.docker.com/editions/community/docker-ce-desktop-windows

Docker Engine untuk CentOS → https://docs.docker.com/engine/install/centos/

Docker Engine untuk Ubuntu → https://docs.docker.com/engine/install/ubuntu/

Docker Engine untuk RHEL → https://docs.docker.com/engine/install/rhel/

Di sini saya tidak akan membahasa proses instalasi Docker Desktop / Engine tersebut karena saya rasa itu suatu hal sudah sangat umum dan mudah sehingga tidak perlu terlalu dibahas secara mendalam. Dan di sini juga saya akan menggunakan Docker Desktop for Mac karena saya menggunakan Mac.

Setelah proses installing Docker selesai, maka silahkan buka terminal dan mari kita verifikasi proses installing Docker kita dengan command berikut.

docker version

Apabila setelah menjalankan command tersebut kemudian akan tampil response yang mirip dengan Gambar 5, maka kita dapat simpulkan bahwa kita telah berhasil melakukan installing Docker di komputer kita.

Selanjutnya, mari kita mulai awal bermain kita yaitu dengan command sebagai berikut.

docker run hello-world

Berikut behind the scenes dari command tersebut.

Pemahaman terhadap Image dan Container sangat penting di Docker World, sehingga kita perlu beberapa pemahaman yang lebih dalam lagi mengenai kedua terminology tersebut. Dan kedua terminology tersebut akan sangat erat hubungannya dengan Operating System / OS.

Dari gambar 8 tentu kita dapat memahami bahwa di OS terdapat kernel yang menjadi inti dari OS agar dari aplikasi/program/software yang kita jalankan dapat menggunakan hardware resources yang ada. Kemudian mari kita coba lihat gambar di bawah ini.

Apa yang terjadi pada gambar 9? Tentu yang terjadi adalah App 1 akan berfungsi atau berjalan dengan normal, sedangkan App 2 tidak akan dapat dijalankan karena version yang dibutuhkan berbeda.

Tentunya Docker dapat menjadi solusi atas problem yang ada pada gambar 9. Karena Docker pada dasarnya adalah Linux, dan Linux sendiri mempunyai 2 fitur yang sangat penting terkait dengan hal ini yaitu adalah sebagai berikut.

Namespacing berarti isolasi resource per process/group of processes dapat dilakukan. Dan CGroups akan berfungsi untuk membatasi besarnya resource yang digunakan per process/group of processes tersebut.

Dengan adanya namespacing dan cgroups tersebut, kemudian Docker dapat membuat dan menjalankannya seperti gambar di bawah ini.

Kemudian, apa hubungan antara Image File dan Container?

Original Article : https://www.linkedin.com/pulse/docker-fundamental-docker-1-setyawan-rony/?published=t

#docker #dockerfundamental #belajardocker #telkomdeveloper #telkomdigital

--

--

Rony Setyawan
TelkomDev

I am just someone who loves everything about technology, and it has become my love, my passion, and my daily job