- Docker Introduction

Komandro Team
1 September 2025
40 minutes

4 - Docker Introduction

Overview

Setelah kalian mempelajari bagaimana cara build dan deploy aplikasi pada materi sebelumnya, pada materi kali ini kalian akan belajar bagaimana cara mengemas, mendistribusikan dan menjalankan suatu aplikasi menggunakan docker.

Docker

Docker merupakan sebuah platform open-source yang memungkinkan developer untuk mengemas dan menjalankan aplikasi di dalam environment yang terisolasi bernama container.

Nah container ini bagaikan “wadah” yang menampung suatu aplikasi sehingga tidak tumpah ke “wadah” lain dalam suatu sistem. Kurang lebih konsep container ini mirip seperti virtual machine atau VM, serupa tapi tidak sama ya.

> Bedanya container dan VM itu apa ?

Walau keduanya bisa dibilang “wadah” tapi mereka berbeda. Titik perbedaan mereka terdapat pada cara mereka melakukan virtualisasi.

Virtual machine menjalankan sistem operasi terpisah dari host untuk setiap instance yang dijalankan, jadi saat ada 2 instances yang berjalan maka masing-masing dari instance tersebut akan menjalankan sistem operasi tersendiri lengkap berserta kernel dari sistem operasi.

Sedangkan container ketika menjalankan instances tidak memerlukan sistem operasi terpisah dari host karena instance yang dijalankan berbagi dengan kernel yang ada pada sistem operasi host.

Untuk memahaminya kamu dapat melihat diagram struktur virtual machine dan container:

graph TD
    subgraph VM Hardware Group
        direction TB
        Hardware
    end

    subgraph Host
        direction TB
        Hardware --> HostOS[Host OS]
        HostOS --> Hypervisor

        subgraph Virtual Machine
            direction TB
            Hypervisor --> GuestOS1[Guest OS 1]
            GuestOS1 --> App1[Application 1]

            Hypervisor --> GuestOS2[Guest OS 2]
            GuestOS2 --> App2[Application 2]
        end
    end

    subgraph Container Hardware Group
        direction TB
        ContainerHardware[Container Hardware]
    end

    subgraph Container Host
        direction TB
        ContainerHardware --> ContainerHostOS[Container Host OS]
        ContainerHostOS --> ContainerRuntime

        subgraph Container
            direction TB
            ContainerRuntime --> ContainerHostOS1[Container Host OS 1]
            ContainerHostOS1 --> App1C[Application 1]
            App1C --> Libs1[Libs/Bin 1]

            ContainerRuntime --> ContainerHostOS2[Container Host OS 2]
            ContainerHostOS2 --> App2C[Application 2]
            App2C --> Libs2[Libs/Bin 2]
        end
    end

Struktur Virtual Machine (VM):

  • Hardware: Komponen perangkat keras yang mendasari semua sistem virtualisasi dan containerisasi.
  • Host OS: Sistem operasi yang berjalan langsung di atas hardware
  • Hypervisor: Software yang memungkinkan VM berjalan
  • Guest OS: Sistem operasi yang berjalan di dalam VM
  • Application: Aplikasi yang berjalan di atas Guest OS

Hypervisor berperan penting dalam VM karena:

  • Mengelola alokasi sumber daya hardware untuk setiap VM
  • Memungkinkan beberapa VM berjalan secara independen di atas satu hardware fisik
  • Menyediakan isolasi antar VM

Struktur Container:

  • Container Hardware: Komponen perangkat keras yang mendasari semua sistem virtualisasi dan containerisasi.
  • Container Host OS: Sistem operasi host untuk container
  • Container Runtime: Software yang mengelola container (seperti Docker)
  • Container: Berisi aplikasi dan dependensinya
  • Application: Aplikasi yang berjalan di dalam container
  • Libs/Bin: Library dan binary yang diperlukan aplikasi

Container Runtime berperan seperti:

  • Mengelola lifecycle container
  • Mengatur isolasi proses dan sumber daya
  • Tidak perlu virtualisasi hardware seperti Hypervisor

Arsitektur Docker

Docker menggunakan arsitektur client-server. Docker client akan mengirimkan request ke Docker daemon untuk menjalankan request tersebut, Docker daemon dapat berjalan di mesin yang sama atau secara remote tergantung preferensi dari developer.

Diagram ini menggambarkan arsitektur Docker yang terdiri dari tiga komponen utama: Klien, Host Docker, dan Registry. Berikut adalah penjelasan singkat masing-masing komponen dan aliran kerja Docker:

Client

Client adalah antarmuka baris perintah yang memungkinkan pengguna berkomunikasi dengan Docker.

Docker Host

Docker Host adalah server tempat perintah Docker yang dihasilkan oleh pengguna berjalan.

Registry

Registry adalah lokasi penyimpanan images Docker di mana docker daemon dapat mengaksesnya.

Alasan Menggunakan Docker

> Kenapa sih pas development aplikasi pakai docker? >

Docker menawarkan kelebihan dalam melakukan proses pengembangan aplikasi, contohnya :

  • Standarisasi Environment Aplikasi: Dengan menggunakan docker environment untuk menjalankan dapat distandarisasi untuk semua developer, sehingga mengurangi masalah “Di punyaku jalan kok”.
  • Mempermudah distribusi dan deployment: Aplikasi yang dikemas menggunakan docker dapat dijalankan dimana saja asal ada docker.
  • Container lebih ringan dibanding virtual machine: Karena container tidak memerlukan sistem operasi tersendiri untuk setiap instances yang dijalankan, dibanding VM yang memerlukan sistem operasi tersendiri untuk setiap instance.

Instalasi Docker Engine

Pada tahap ini kita akan melakukan instalasi docker engine pada server multipass. Docker memiliki 2 versi, yang pertama adalah Docker Desktop yang menggunakan GUI, yang satunya lagi adalah Docker Engine yang menggunakan CLI.

Pada materi sebelumnya kita sudah belajar cara instalasi OS Ubuntu melalui Mulitpass Virtual Machine dan melakukan remote kedalam server. Pada tahap ini kita akan melakukan instalasi Docker Engine didalam instance OS Ubuntu yang telah kita buat sebelumnya.

Persiapan Sebelum Instalasi

Untuk masuk kedalam Ubuntu, lakukan remote dengan instance Multipass sesuai dengan materi yang sudah diajarkan sebelumnya.

Jika sudah terhubung masukan command dibawah untuk memastikan tidak terjadi konflik antar paket saat proses instalasi.

for pkg in docker.io docker-doc docker-compose docker-compose-v2 podman-docker containerd runc; do sudo apt-get remove $pkg; done

> [!NOTE] > Untuk memasukan command dengan mudah, copy command yang ingin dimasukan lalu klik kanan mouse pada terminal.

1. Setup Repository Docker

Sebelum Anda menginstal Docker Engine untuk pertama kali pada mesin host baru, Anda perlu menyiapkan repository Docker. Setelah itu, Anda dapat menginstal dan memperbarui Docker dari repository tersebut.

Masukan command di bawah ini baris per-baris ke terminal milikmu:

sudo apt-get update

sudo apt-get install ca-certificates curl

sudo install -m 0755 -d /etc/apt/keyrings

sudo curl -fsSL https://download.docker.com/linux/ubuntu/gpg -o /etc/apt/keyrings/docker.asc

sudo chmod a+r /etc/apt/keyrings/docker.asc

Setelah itu tambahkan repository dengan cara menuliskan command dibawah pada terminal

echo \
  "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.asc] https://download.docker.com/linux/ubuntu \
  $(. /etc/os-release && echo "$VERSION_CODENAME") stable" | \
  sudo tee /etc/apt/sources.list.d/docker.list > /dev/null

Lalu lakukan update pada sistem

sudo apt-get update

2. Instalasi Paket Docker Engine

Untuk melakukan instalasi jalankan command dibawah pada terminal.

sudo apt-get install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin

> [!NOTE] > Jika nantinya diminta persetujuan [Y/n], ketik ‘y’ lalu enter.

3. Konfirmasi apakah proses instal berhasil

Untuk melakukan verifikasi bahwa Docker Engine sudah berhasil di instal jalankan command dibawah

sudo docker run hello-world

Jika proses instalasi berhasil maka terminal akan memunculkan pesan seperti pada gambar dibawah.

> [!NOTE] > Docker memerlukan sudo karena kita tidak memasukkannya ke dalam group sudo

Untuk memasukkanya masukan perintah berikut baris per-baris:

sudo groupadd docker
sudo usermod -aG docker $USER

Perintah di atas membuat sistem memasukkan docker dan user yang saat ini digunakan agar memiliki akses superadmin.

Artinya setelah dimasukkan dan server / instance / virtual machine di-restart, kita tidak perlu menggunakan sudo kembali.

> [!NOTE] > Kalau kamu ingin segera mencoba docker tanpa sudo, segera restart servermu lalu masuk kembali melalui multipass shell.

Docker Command Introduction

Nah sekarang docker engine sudah terinstal didalam multipass kalian tentu itu gak akan berguna kalau kalian gak tahu cara mengoperasikannya. Disini kita akan belajar syntax dan basic command dari Docker ini, jadi siapkan mental kalian kita akan terjun lebih dalam ke materi Docker ini 🔥🔥🔥.

> [!NOTE] > Untuk menjalankan command docker kalian perlu akses sudo, jadi setiap menjalankan command pastikan gunakan sudo atau masuk ke akun root kalian.

1. docker pull

docker pull NAME:TAG

Command ini digunakan untuk mendownload image kedalam sistem host kalian, command ini biasanya bersifat opsional karena command docker run yang akan kalian pelajari selanjutnya akan otomatis melakukan download pada image yang kalian ingin jalankan. Nama image dan tag image yang dapat kalian download ada pada website docker hub.

  • NAME adalah nama dari image yang ingin kalian download.
  • TAG adalah versi atau jenis spesifik dari image.

> [!NOTE] > Image merupakan sebuah paket yang berisi semua hal yang dibutuhkan oleh suatu aplikasi untuk berjalan didalam suatu container

Contoh penggunaan command diatas bisa dilihat dibawah :

sudo docker pull httpd:latest

Pada command diatas kita melakukan pull atau download image bernama httpd dengan tag latest, setelah kalian melakukan pull diatas saat kalian mau menjalankan image httpd:latest kalian gak perlu download lagi karena sudah tersimpan di sistem lokal kalian.

> Kalau pas pull kita lupa gak masukin tag-nya bakal masalah gak ya?

Nah kalau kalian lupa tenang aja soalnya docker bakal otomatis nyariin image dengan versi yang paling baru buat kalian download jadi kalau kalian gak butuh image dengan versi yang spesifik bakal aman azaaa.

2. docker run

Berikut merupakan sintaks dasar dari docker run

docker run [OPTIONS/FLAG] [COMMAND] [ARG...] [IMAGE:TAG]

Selanjutnya adalah command docker run, command ini bagaikan jantung dari docker karena untuk menjalankan dan membuat container kalian akan menggunakan command ini, container akan otomatis berjalan setelah kalian menggunakan docker run. Nah sekarang ayo kita pahami syntax-nya karena lumayan banyak hal yang dapat dilakukan di command ini.

OPTIONS/FLAG

Disini kalian bisa mengatur bagaimana kalian ingin menjalankan container. Untuk option yang sering digunakan itu seperti:

-d : digunakan untuk langsung menjalankan container setelah dibuat, biasanya dipakai kalau kalian langsung memasukan command saat melakukan docker run

docker run -d --name webnginx nginx:latest

Nah, perintah di atas berarti kita menjalankan container bernama webnginx dengan opsi detach maka container tersebut akan langsung berjalan di background.

-p : Digunakan untuk melakukan port forwarding dari host ke container dengan format host_port:container_port. Contohnya seperti -p 8080:80 artinya kita meneruskan port 8080 dari host ke port 80 yang ada di container.

docker run -d -p 8080:80 --name mynginx nginx

Dapat dilihat pada command diatas dilakukan port forwarding saat menjalankan container nginx, dengan port forwarding ini kita akan bisa melakukan akses secara langsung kedalam container melalui host tanpa lewat docker terlebih dahulu.

Contoh saat kalian sudah menjalankan command diatas dan melakukan akses kedalam ip host dengan port 8080 maka kalian bisa tampilan default nginx. Semisal kalian mau coba akses bisa lihat gif dibawah ya.

--name: Untuk menamai container kalian.

Kalau kalian tidak menamai container kalian maka docker akan memberikan nama secara otomatis namun pasti kalian bakal lupa karena namanya bakal random banget dari docker, makanya dengan option ini kalian bisa menamai container kalian sendiri sehingga jika kalian ingin melakukan manajemen akan lebih mudah.

docker run --name mynginx nginx

pada command diatas container bernama mynginx akan dijalankan dengan image nginx.

Sebenarnya masih banyak banget loh flag atau option yang bisa kalian pakai di command docker run ini, kalau kalian mau tahu lebih lanjut kalian bisa cek di dokumentasi docker kalau ingin tahu lebih lanjut apa aja option yang bisa kalian pakai.

COMMAND dan ARG...

Bagian COMMAND akan berisi perintah yang akan di eksekusikan langsung kedalam container ketika container tersebut dijalankan. Sedangkan ARG.. adalah argumen untuk COMMAND yang akan dimasukan.

docker run ubuntu echo "Hello, Docker!"

Contoh simpelnya bisa dilihat diatas, pada line diatas container ubuntu akan eksekusi command echo dengan argumen “Hello, World!” dan print teks tersebut didalam container dan akan menunjukan ke terminal saat kalian menjalankan command diatas.

IMAGE:TAG

Sama seperti penjelsannya sebelumnya kalian bisa mengisikan nama image dan tag-nya untuk dijalankan docker.

3. Docker container management command

Setelah kalian membuat container kalian pasti pengen tau dong gimana sih cara mengelolanya, kalian bisa manage container kalian dengan command yang ada disini mulai dari start, stop, remove dan masih banyak lagi. Berikut command yang bisa kalian pakai :

- docker start

Command docker start bisa kalian gunakan jika kalian sudah punya container sebelumnya tapi dalam status stop.

docker start [OPTIONS] [CONTAINER]
  • OPTIONS: Sama seperti sebelumnya ini merupakan pilihan opsional saat menjalankan command
  • CONTAINER: Nama atau ID dari container kalian.

docker start juga bisa menjalankan lebih dari 1 container dengan cara

docker start [NAMA-CONTAINER_1] [NAMA-CONTAINER_2] [NAMA-CONTAINER_...]

Contohnya ada dibawah yang dimaana ada container mynginx, mydebian dan myubuntu yang akan di-start bersamaan.

docker start mynginx mydebian myubuntu

- docker stop

Kalau ada command untuk start pasti ada juga dong untuk stop, docker stop digunakan untuk menghentikan container yang sedang berada dalam status aktif atau berjalan.

docker stop [OPTIONS] [CONTAINER]

> [!NOTE] > Untuk docker stop syntax-nya kurang lebih sama seperti docker start, hanya berbeda pada option.

- docker ps

Pada command sebelumnya ada status dari container dan pada demonstrasi ada command docker ps

Pasti kalian bingung.

> Cara biar tau status jalan dan berhentinya gimana dan perintah sintaks docker ps -a di demo sebelumnya buat apaan dah?

Nah docker ps memungkinkan kalian bisa melihat container berjalan yang ada di host kalian dan juga seluruh container yang ada di host tanpa memandang status “UP” atau “EXITED” kalau pakai option -a

docker ps
docker ps -a

- docker build

Di command sebelumnya kalian belajar cara membuat container dari image yang sudah ada dari docker hub, sekarang kalian bakal belajar cara untuk membuat image kalian sendiri didalam docker menggunakan command docker build.

docker build [OPTIONS] PATH

Parameter utama :

-t: Memberikan tag atau nama pada image yang akan dibuat.

PATH: Lokasi direktori yang berisi Dockerfile.

> Dockerfile itu buat apa? Perasaan gak ada dari awal

Jadi Dockerfile itu isinya adalah script sederhana yang isinya itu instruksi untuk docker saat sedang membuat Docker image. Ini buat contohnya

# Menggunakan image Ubuntu sebagai base
FROM ubuntu:20.04

# Menginstal Nginx
RUN apt-get update && apt-get install -y nginx

# Menyalin file HTML ke dalam image
COPY ./index.html /var/www/html/index.html

# Mengekspos port 80
EXPOSE 80

# Menjalankan Nginx saat container dimulai
CMD ["nginx", "-g", "daemon off;"]

Instruski yang digunakan pada script Dockerfile diatas adalah berikut:

FROM: Menentukan image dasar untuk image yang akan kalian gunakan.

RUN: Menjalankan perintah di dalam image.

COPY: Menyalin file atau direktori dari host kedalam image.

CMD: Menentukan perintah default yang akan dijalankan saat container berjalan.

EXPOSE: Mendeklarasikan port yang akan digunakan oleh container.

Sekarang waktunya praktek nih gimana caranya bikin image kalian sendiri, perhatikan baik baik ya karena ini bakal kepake untuk materi selanjutnya.

  1. Buat folder untuk project

    Buat direktori baru agar projek kalian tertata lebih rapih.

    Masukan command dibawah perbaris

    mkdir test-build
    cd test-build
    

    untuk nama folder kalian bisa menamaminya bebas ya

  2. Buat file index.html

    Lalu kalian buat file index.html untuk menggantikan yang ada di dalam image nanti

    Masukan command :

    vim index.html
    

    lalu isikan dengan bahasa HTML, kalian bisa berkreasi disini untuk tulisan didalam file-nya.

    <h1>Yo Yo Yo i am Testing the build</h1>
    
  3. Buat Dockerfile

    Sekarang kalian harus membuat Dockerfile seperti yang sudah dijelaskan diatas. Berikut caranya:

    vim Dockerfile
    

    Lalu kalian isikan script Dockerfile seperti dibawah.

    # Menggunakan image Ubuntu sebagai base
    FROM ubuntu:20.04
    # Menginstal Nginx
    RUN apt-get update && apt-get install -y nginx
    # Menyalin file HTML ke dalam image
    COPY ./index.html /var/www/html/index.html
    # Mengekspos port 80
    EXPOSE 80
    # Menjalankan Nginx saat container dimulai
    CMD ["nginx", "-g", "daemon off;"]
    
  4. Lakukan Build !

    Sekarang semua bahan sudah terkumpul waktunya memasak image ini, kita sudah bisa melakukan build sekarang, langsung saja masukan command dibawah. Nama image kalian bisa kreasikan sesuka kalian.

    docker build -t image-test-build:1.0 .
    

    Jika sudah kalian bisa cek apakah image kalian sudah terbuat atau belum dengan cek list image dengan command

    docker images
    

    Kalau sudah terkonfirmasi ada kalian bisa langsung run image-nya !!!

    docker run -d --name Test-Build -p 8080:80 image-test-build:1.0
    

    Kalau sudah selesai langsung saja cus ke browser untuk check apakah container berjalan dan content di index.html terganti sesuai tulisan kalian atau tidak. Kalau berhasil tampilannya akan sesuai dengan index.html yang kalian tulis.

- docker push

Sekarang setelah image kalian sudah jadi kita akan coba untuk menyimpan image tersebut ke repository docker hub dengan cara di push, kurang lebih sama seperti saat kalian melakukan push dengan git ke github.

> [!WARNING] > Pastikan kalian sudah memiliki akun docker di dockerhub sebelum melakukan push.

docker push [OPTIONS] NAME[:TAG]

NAME: Nama dari image yang ingin di push ke dalam repository yang diikuti dengan username akun docker kalian dan nama repository

TAG: Tag dari image yang ingin di push

OPTIONS: Ada beberapa opsi uang bisa kalian pakai saat melakukan push, langsung cek disini kalau kalian penaran opsi apa aja sih yang bisa dipakai.

Sekarang kalian akan praktek untuk melakukan push image yang sebelumnya sudah kalian buat.

  1. Buat repositori di Docker Hub

    Sebelum melakukan push kalian harus menyiapkan repository terlebih dahulu didalam akun Docker Hub kalian, kalian bisa ikuti step by step dibawah jika sudah membuat akun.

  2. Login ke Docker Hub

    Agar image dapat di upload kedalam repo kalian di Docker Hub kalian harus login dulu ke akun docker kalian didalam VM-nya

    docker login
    

    Setelah kalian memasukan command diatas, kalian harus memasukan username dan password akun Docker Hub kalian.

  3. Tagging image

    Sebelum melakukan push, kalian harus memberikan tag pada image yang akan kalian push. Tag ini berfungsi untuk mengkoneksikan image dengan repositori yang ada di Docker Hub

    docker tag local-image:tagname username/repository:tagname
    

    local-image:tagname: Nama dan tag dari image lokal yang kalian buat sebelumnya

    username/repository:tagname: Username di Docker Hub dan nama repository yang sudah kalian siapkan, serta tagname yang ingin kalian gunakan.

    Contoh jika ingin push image sebelumnya

    docker tag image-test-build:1.0 mawanrequiem/coba-push-devops:1.0
    

    Sekarang ayo bedah command diatas

    image-test-build:1.0: Merupakan image dengan tag 1.0 yang di build secara lokal sebelumnya

    mawanrequiem/: Username yang ada pada akun Docker Hub

    /coba-push-devops:1.0: Nama repositori yang sudah disiapkan diawal untuk menyimpan image dengan tag 1.0

  4. Push Image ke Docker Hub !

    Sekarang tahap terakhir kalian langsung push image yang sebelumnya kalian sudah buat dengan perintah:

    docker push mawanrequiem/coba-push-devops:1.0
    

    > [!NOTE] > Jangan lupa ganti URL di atas dengan URL Image kalian

    Jika sudah kalian cek repo kalian apakah ada image kalian atau belum, kalau sudah selamat kalian sudah bisa melakukan push kedalam Docker Hub!


Oke kalian barusan sudah belajar gimana sih cara pakai docker dengan command yang dasar banget. Sebenernya masih banyak banget command Docker yang bisa kalian pakai kayak docker rm untuk remove container, kalian bisa googling atau langsung baca dokumentasinya (kalau kuat ya 💀).

Summary

  • Docker merupakan sebuah platform untuk melakukan containerization.
  • Containerization merupakan sebuah konsep membuat sebuah “wadah” untuk menyimpan aplikasi dan dependencies-nya secara terisolasi.

Tags

devops beginner