Docker#
At A Glance#
Pernahkah kalian mendengar Docker?
Jika kalian adalah software developer atau minimal seorang tech-enthusiast seperti saya, sudah dipastikan kalian tau Docker. Tapi, biarkan saya tetap menjelaskan Docker di artikel ini.
What is Docker?#
Docker adalah sebuah layanan open-source yang menyediakan kemampuan untuk mengemas dan menjalankan sebuah aplikasi dalam lingkungan terisolasi yang disebut sebagai “container”.1 Docker memungkinkan kita untuk menjalankan software yang tidak bergantung pada dependensi yang terpasang di host.2 Dengan demikian, proses pengembangan software menjadi lebih cepat.
Sejarahnya, Docker pertama kali diperkenalkan ke publik pada acara PyCon di tahun 2013 oleh pembuatnya, yaitu Solomon Hykes.3 Di tahun-tahun berikutnya, perkembangan Docker di banyak sistem operasi mulai masif. Misalnya, di tahun 2016, Docker untuk Mac dan Windows rilis ke publik.
Apa itu container? Kita akan lihat apa itu container sambil membandingkannya dengan Virtual Machine (VM) di bawah ini.
Container vs Virtual Machine (VM)#
Container adalah software yang mengemas/membungkus kode berikut dengan dependensinya sehingga sebuah aplikasi dapat berjalan dengan cepat dan dapat diandalkan (reliable) meskipun di environment yang berbeda.4 Selain Docker, Podman adalah salah satu platform kontainerisasi juga.
Catatan:
Salah satu permasalahan di dunia software development adalah ketidak-compatible-an sebuah aplikasi dengan lingkungan barunya.
Contohnya, ketika saya mengembangkan (re: membuat) sebuah aplikasi online chatting, saya tentu membuatnya di komputer atau laptop pribadi saya (intinya satu komputer). Akan tetapi, ketika saya ingin agar aplikasi tersebut di-test atau bahkan diproduksi (dirilis), aplikasi tersebut akan berpindah lingkungan (komputer) yang berbeda-beda, mulai dari sistem operasinya, arsitekturnya, versinya, dan lain sebagainya. Dengan demikian, aplikasi saya tersebut memiliki kemungkinan tidak berjalan dengan baik di lingkungan barunya tersebut. Solusi konvensionalnya adalah, saya sebagai developer-nya, perlu membuat banyak versi dari aplikasi online chatting tersebut agar dapat berjalan dengan baik di lingkungannya masing-masing. Misalnya, aplikasi versi Linux, aplikasi versi Mac, dan aplikasi versi Windows.
Nah, dengan adanya containerization (sistem kontainer) ini, saya tidak perlu mengkhawatirkan permasalahan di atas dan dapat membuat satu aplikasi saja. Sebab, saya dapat meng-kontainerisasi (membuat image container) aplikasi saya tersebut ketika akan di-test atau di-deploy ke produksi (dirilis). Dengan adanya sistem containerization ini, semua orang di sistem yang berbeda akan tetap dapat menjalankan aplikasi online chatting saya itu tanpa harus terkendala sistem operasi yang berbeda, arsitektur yang berbeda, versi yang berbeda, dan lain sebagainya.
Virtual Machine di sisi lain adalah sebuah virtualisasi atau emulasi dari komputer fisik.5 Virtual machine memungkinkan kita untuk menjalankan banyak sistem operasi dalam satu sistem operasi saja. Software yang meng-handle proses virtualisasi ini disebut Hypervisor. Beberapa hypervisor yang populer ada Virtualbox, VMWare, dan Virt-Manager.6
Berikut adalah perbandingan Container & Virtual Machine:

| Aspek | Container | Virtual Machine (VM) |
|---|---|---|
| Arsitektur | Berbagi kernel host OS | Menggunakan hypervisor + guest OS |
| Ukuran | Ringan (MB) | Lebih besar (GB) |
| Waktu startup | Sangat cepat (detik) | Lebih lambat (menit) |
| Isolasi | Isolasi proses (lebih ringan) | Isolasi penuh (lebih kuat) |
| Kinerja | Mendekati native (lebih efisien) | Ada overhead dari hypervisor |
| Portabilitas | Sangat tinggi (mudah dipindahkan) | Lebih kompleks |
| Resource usage | Lebih hemat resource | Lebih boros resource |
| Sistem operasi | Berbagi OS host | Bisa menjalankan OS berbeda |
| Keamanan | Lebih rendah dibanding VM | Lebih tinggi karena isolasi penuh |
| Deployment | Mudah & cepat (CI/CD friendly) | Lebih kompleks |
| Use case utama | Microservices, aplikasi cloud-native | Aplikasi legacy, isolasi penuh |
| Contoh teknologi | Docker, Kubernetes | VMware, VirtualBox, Hyper-V |
Installation#
Berikut adalah cara meng-install docker di beberapa sistem operasi Linux:
| Distro | Command |
|---|---|
| Debian/Ubuntu | sudo pacman -Sy docker |
| Arch Linux | sudo pacman -Sy docker |
| Fedora | sudo dnf install docker |
| Opensuse | sudo zypper install docker |
NixOS:
Masukkan baris berikut di file konfigurasi (/etc/nixos/configuration.nix):
environment.systemPackages = [
pkgs.docker
];Atau jika menggunakan nix-shell:
nix-shell -p dockerUntuk memastikan docker sudah ter-install:
docker -v
docker version
Berikut adalah tautan official Docker:
Website: https://github.com/docker
Github: https://github.com/docker
Set Up#
1. Starting docker#
Untuk memulai Docker daemon, gunakan perintah:
sudo docker systemctl start dockerUntuk memastikan Docker daemon berjalan otomatis setelah login:
sudo systemctl enable docker2. Stopping docker#
Untuk mematikan Docker daemon, gunakan perintah:
sudo systemctl stop docker
sudo systemctl stop docker.socketUntuk me-non-aktifkan Docker daemon dari berjalan otomatis setiap login:
sudo systemctl disable docker
sudo systemctl disable docker.socket3. Adding docker group#
Secara default, Docker daemon berjalan sebagai root user sehingga setiap kali user non-root mengeksekusi perintah docker, perintah sudo diperlukan. Jika kita ingin agar perintah docker dapat dieksekusi tanpa perlu sudo, berikut caranya:7
- Buat grup
docker
sudo groupadd docker- Tambahkan user kita ke grup
docker.
sudo usermod -aG docker $USERLogout & login kembali agar perubahan bisa teraktivasi.
Jika malas logut, aktivasi perubahan tersebut dengan perintah:
newgrp docker- Konfirmasi
docker run hello-worldEssential Commands#
Berikut adalah perintah-perintah penting untuk melakukan manajemen container di Docker.89
docker search#
Mencari docker image dari Docker Registry, seperti DockerHub:
docker search <image_name>
docker pull#
Mengambil (men-download) docker image:
docker pull <image_name>
docker images#
Melihat daftar docker image yang ada di komputer:
sudo docker images
docker login#
Perintah ini selain akan me-login-kan kita ke Docker.
Kredensial docker disimpan di komputer lokal (/home/$USER/.docker/config.json).
Login ke docker:
docker login -u <username>Catatan:
Jika belum punya akun, maka kita perlu membuat akun (register) terlebih dahulu di website official Docker: https://www.docker.com/

docker logout#
Perintah ini selain akan me-logout-kan kita ke Docker.
Kredensial docker dihapus di komputer lokal (/home/$USER/.docker/config.json).
docker logout
docker build#
Membuat docker image dari Dockerfile di current directory:
docker build -t <image_name> .Membuat docker image tanpa cache:
docker build --no-cache -t <image_name>Misalnya, saya ingin membuat sebuah docker image dari file app.py berikut menggunakan Dockerfile:

Tinggal jalankan perintah docker build tanpa cache tersebut, dia akan mengunduh dependensi yang diperlukan dan membuat docker image-nya:

Berikut adalah isi file app.py:
from flask import Flask
app = Flask(__name__)
@app.route("/")
def hello():
return "hello world!"
if __name__ == "__main__":
app.run(host="0.0.0.0")Dan isi file Dockerfile-nya:
FROM python:3.14.3-alpine
RUN pip install --upgrade pip
RUN pip install flask
CMD ["python","app.py"]
COPY app.py /app.pydocker push#
Menambahkan (meng-upload) docker image:
docker tag <local-image>:<tagname> <username>/<new-repo>:<tagname>
docker push <username>/<new-repo>:<tagname>Catatan:
Jika belum punya repository, kita perlu membuatnya terlebih dahulu.

Docker image-nya akan muncul di repository kita:

docker ps#
Melihat container yang sedang berjalan:
docker ps 
Melihat semua container, termasuk yang sedang tidak berjalan:
docker ps -a
docker rm#
Menghapus satu atau lebih container:
docker rm -f <container_name / container_id>
docker rmi#
Menghapus satu atau lebih docker image:
docker rmi -f <image_name>
docker run#
Menjalankan docker image sebagai container:
docker run <image_name>
Kita bisa lihat, container-nya sudah berjalan:

docker start#
Menjalankan container:
docker start <container_id>
docker restart#
Me-restart container:
docker restart <container_id>
docker stop#
Menghentikan container:
docker stop <container_id>
docker logs#
Melihat log dari sebuah container:
docker logs <container_id>
docker stats#
Melihat alokasi resource yang dipakai oleh container:
docker stats
docker inspect#
Melihat informasi detail sebuah container:
docker inspect <container_id>
docker network#
Melihat daftar network:
docker network ls
Melihat detail sebuah network:
docker network inspect <network_name>
docker volume#
Volume Docker secara default berada di /var/lib/docker/volumes.
Untuk membuat volume baru:
docker volume create <volume_name>Untuk melihat daftar volume yang tersedia:
docker volume lsUntuk melihat informasi detail suatu volume:
docker volume inspect <volume_name>Untuk menghapus volume:
docker volume rm <volume_name>
docker help#
Masih banyak lagi perintah-perintah docker lainnya yang belum dibahas di artikel ini. Tapi, kalian dapat mengeksplorasinya sendiri dengan perintah:
docker help # atau
docker -hSaya coba lampirkan juga video Youtube tutorial untuk pemula.
Worth watching.
Docker Compose#
Docker Compose adalah sebuah alat dari Docker untuk mendefinisikan dan menjalankan banyak container dengan satu file konfigurasi.10 Jadi, melalui Docker Compose, jika kita ingin menjalankan banyak container, kita gak perlu membuat perintah docker run ... atau docker start ... satu persatu, tapi cukup dengan satu perintah Docker Compose aja.
At A Glance#
Pada prakteknya, kita hanya perlu sebuah file konfigurasi (YAML file) yang dijalankan dengan Docker Compose, seperti ini:
docker compose docker-compose.ymlApa saja yang perlu “dideklarasikan” atau “didefinisikan” dalam file konfigurasi tersebut? Berikut adalah 3 komponen utama yang ada di dalam file konfigurasi Docker Compose:1112
- Services
Bagian services digunakan untuk mendefinisikan setiap kontainer yang akan menjadi bagian dari aplikasi kita. Inilah the pith of the configuration file alias bagian yang paling penting dalam file konfigurasi Docker Compose kita. Oleh kaerna karena itu, tanpa bagian services ini, Docker Compose belum bisa berjalan.
- Networks
Bagian networks digunakan untuk mendefinisikan jaringan Docker yang akan digunakan. Jika kita tidak mendefinisikan networks di file konfigurasi, Docker akan otomatis menggunakan jaringan default-nya (bridge).
- Volumes
Bagian networks digunakan untuk mendefinisikan penyimpanan aplikasi yang tidak bergantung pada container. Artinya, data aplikasi tidak akan hilang meski kontainernya berhenti atau di-restart.
Sehingga, nanti, secara umum, seperti inilah isi file docker-compose.yml kalian:
services:
service1:
image: ...
ports: ...
volumes: ...
environment: ...
service2:
build: ...
depends_on: ...
networks:
...
volumes:
...Sampai sini, kita tidak perlu khawatir jika masih belum memahami secara utuh komponen-komponen tersebut. Kita akan lihat secara langsung implementasinya di bagian-bagian berikutnya pada artikel ini.
Installation#
Berikut adalah cara meng-install docker compose di beberapa sistem operasi Linux:
| Distro | Command |
|---|---|
| Debian/Ubuntu | sudo pacman -Sy docker-compose |
| Arch Linux | sudo pacman -Sy docker-compose |
| Fedora | sudo dnf install docker-compose |
| Opensuse | sudo zypper install docker-compose |
NixOS:
Masukkan baris berikut di file konfigurasi (/etc/nixos/configuration.nix):
environment.systemPackages = [
pkgs.docker-compose
];Atau jika menggunakan nix-shell:
nix-shell -p docker-composeUntuk memastikan docker-compose sudah ter-install:
docker-compose -v # atau
docker compose version 
Docker Compose juga bisa dilihat di repository Github milik Docker:
Essential Commands#
Sebelum menjalankan perintah-perintah di bawah ini, kita perlu membuat sebuah skema untuk Docker Compose kita. Skemanya sederhana, saya akan menjalankan container nginx yang akan menampilkan halaman web berisi sebuah sapaan.13
Berikut adalah struktur direktori skema ini:
.
├── app
│ └── index.html
└── docker-compose.ymlBerikut file konfigurasinya (docker-compose.yml):
services:
web:
image: nginx:alpine
ports:
- "8000:80"
volumes:
- ./app:/usr/share/nginx/htmlKeterangan:
- images: nginx: alpine
Bagian ini artinya, kita akan membuat sebuah container bernama “web” yang akan menggunakan image “nginx” versi alpine (sehingga ukurannya kecil dan ringan). - ports: “8000:80”
Bagian ini artinya, kita akan mapping port 80 di container ke port 8000 di host. Artinya, kalau saya buka http://localhost:8000 di browser, sebenarnya saya sedang mengakses nginx di dalam container di port 80. - volumes: ./app:/usr/share/nginx/html
Bagian ini artinya, kita akan me-mounting (memasang) folder/direktori./appdi komputer saya ke folder/direktori/usr/share/nginx/htmldi dalam container. Artinya, semua isi folder/direktori./appakan langsung disajikan olehnginx, tanpa perlu rebuild container-nya.
Seperti terlihat, file konfigurasi Docker Compose ini hanya memiliki 1 dari 3 komponen utama yang sudah dijelaskan sebelumnya, yaitu services. Meskipun demikian, Docker Compose sudah dapat berjalan karena bagian services adalah bagian paling penting dalam file konfigurasi Docker Compose.
Berikut adalah file webnya (app/index.html):
<!doctype html>
<html lang="en">
<head>
<meta charset="utf-8">
<title>Docker Compose Demo</title>
<link rel="stylesheet" href="https://cdn.jsdelivr.net/gh/kognise/water.css@latest/dist/dark.min.css">
</head>
<body>
<h1>This is a Docker Compose Demo Page.</h1>
<p>This content is being served by an Nginx container.</p>
</body>
</html>Berikut adalah perintah-perintah penting di Docker Compose:10
docker compose up#
Menjalankan container dari sebuah file konfigurasi:
docker compose up Jika ingin berjalan di background:
docker compose up -d
Berjalan dengan baik di port 8000:

docker compose down#
Untuk menghentikan kontainer yang sedang berjalan:
docker compose down
docker compose ps#
Melihat proses yang sedang berjalan:
docker compose ps
docker compose logs#
Melihat log:
docker compose logs
Catatan:
Sampai artikel ini ditulis, perintah-perintah Docker Compose di atas hanya dapat berjalan di direktori yang terdapat file konfigurasinya. Artinya, jika file konfigurasi (docker-compose.yml)-nya ada di direktori atau folder ~/Documents misalnya, sementara kalian menjalankan perintah-perintah Docker Compose tersebut di direktori lain seperti ~/Downloads, maka akan muncul error.
docker compose help#
Masih banyak perintah-perintah Docker Compose lainnya yang tidak di-cover di artikel ini. Tapi, kalian dapat mengeksplorasinya sendiri di:
docker compose -h # atau
docker compose helpLazydocker#
Pernah mendengar lazygit?
Saya pernah menulis tentang lazygit di website ini lho:
At A Glance#
Mirip seperti lazygit, lazydocker adalah program terpisah (non-official) berbasis CLI yang dibuat untuk “para pemalas” yang enggan mengetikkan perintah-perintah Docker dan Docker Compose di terminal. Program ini juga merupakan tool open source yang juga dibuat oleh orang yang sama yang membuat lazygit. Dengan adanya lazydocker, kita dapat memantau container kita hanya dengan satu interface sederhana ini.
Installation#
Berikut adalah cara meng-install lazydocker di beberapa sistem operasi Linux:
| Distro | Command |
|---|---|
| Arch Linux | sudo pacman -Sy lazydocker |
| Opensuse | sudo zypper install lazydocker |
NixOS:
Masukkan baris berikut di file konfigurasi (/etc/nixos/configuration.nix):
environment.systemPackages = [
pkgs.lazydocker
];Atau jika menggunakan nix-shell:
nix-shell -p lazydockerKarena distro Debian/Ubuntu dan Fedora tidak menyediakan lazydocker di repository-nya, jadi, kalian yang menggunakan distro tersebut dapat mengambil binary-nya atau meng-compile-nya langsung dari repository Github lazydocker di sini:
Website official lazydocker: https://lazydocker.com/
lazydocker UI#
Berikut adalah tampilan (UI / User Interface) lazydocker ketika pertama kali dijalankan:
lazydocker
lazydocker UI
Perhatikan 3 bagian yang saya highlight tersebut: ada 2 window utama, yaitu window di sebelah kiri dan di sebelah kanan, ditambah satu bagian keybinding (shortcut) di bagian bawah.
- Window Kiri
Window di bagian kiri menunjukkan informasi terkait 6 hal:
- Project: Berisi informasi tentang “Docker Project” yang ada di komputer kita, baik project yang diambil dari Docker Registry (seperti dockerhub) maupun dari Docker Compose.
- Services: Berisi informasi tentang Services yang ada di komputer kita, berikut statusnya (running / exited).
- Containers: Berisi informasi tentang Container yang ada di komputer kita, berikut statusnya (running / exited).
- Images: Berisi informasi tentang Images yang ada di komputer kita, berikut dengan Tag-nya.
- Volumes: Berisi informasi tentang Volumes yang ada di komputer kita (lokasinya di
/var/lib/docker/volumes). - Networks: Berisi informasi tentang Networks yang ada di komputer kita.
- Windows Kanan
Window di bagian kanan menunjukkan informasi detail dari objek yang kita lihat di Window Kiri. Kita bisa melihat ada beberapa sub-menu-nya juga, dan sub-menu ini berbeda-beda tergantung bagian mana dari 6 bagian yang ada di Window Kiri yang sedang kita buka. Untuk berpindah sub-menu, kita bisa gunakan keybinding (shortcut): [ untuk ke kiri, dan ] untuk ke kanan.
- Keybind di Bawah
Bagian ini menunjukkan informasi praktis tentang cara mengoperasikan lazydocker ini, mulai dari cara melakukan scrolling, keluar dari lazydocker, melihat menu atau daftar keybinding yang tersedia, dan bernavigasi dari satu Window ke Window lainnya.
Pro Tip:
Kita juga bisa menekan tombol Shift+? di keyboard untuk melihat daftar keybinding (shortcut) yang tersedia dan dapat digunakan.
How to use#
docker ps, docker logs, docker stats, docker inspect#
Keempat perintah tersebut (docker ps, docker logs, docker stats, docker inspect) saya gabung karena memang kita dapat melakukannya dengan (sangat) mudah di lazydocker hanya dengan bernavigasi dari satu Window ke Window lainnya, dari satu sub-menu ke sub-menu lainnya. Semua itu dapat saya lakukan hanya dengan 6 buah tombol di keyboard: arrow up, arrow down, arrow right, arrow left, opening square bracket, closing square bracket.
Perhatikan tombol keyboard yang muncul di bagian bawah video!
Notes: Saya menggunakan
showmethekeyuntuk melihat keystrokes keyboard di Wayland.
docker run, docker start, docker restart, docker stop#
Lagi-lagi, keempat perintah tersebut (docker run, docker start, docker restart, docker stop) akan saya tunjukkan dalam satu demonstrasi berikut. Sebab, memang akan sangat mudah menjalankan, menghentikan, maupaun menjalankan ulang sebuah container melalui lazydocker ini. Semua itu dapat saya lakukan hanya dengan menekan tombol capital S, s, dan r.
Perhatikan tombol keyboard yang muncul di bagian bawah video!
Untuk bagian Images, Volumes, dan Networks tidak saya bahas di sini, selain karena tidak banyak yang dapat ditunjukkan selain menghapus-hapus Images/Volumes/Networks, juga karena membuat video demonstrasi ini memakan storage yang lumayan besar (1 video berkisar 1 menit bisa berukuran 3-4 MB!). Oleh karena itu, jika kalian sudah paham dasar-dasar pengoperasian lazydocker, kalian bisa mencoba mengeksplorasi bagian-bagian tersebut sendiri!
Oiya, beberapa kekurangan lazydocker yang saya jumpai, terutama terkait dengan perintah-peritah dasar Docker, rupanya, ada beberapa perintah dasar Docker yang belum bisa dilakukan di lazydocker, misalnya seperti:
- men-download image:
docker pull - login ke Docker Registry:
docker login - membuat volumes & networks:
docker volume create&docker network create
Sehingga, kita masih memerlukan perintah-perintah manual Docker untuk melakukan operasi tersebut.
Sekian dulu totorial docker dan lazydocker ini.
Terima kasih.
Sampai jumpa di artikel saya yang lain!
https://docs.docker.com/engine/install/linux-postinstall/ ↩︎
https://www.geeksforgeeks.org/devops/docker-instruction-commands/ ↩︎
https://dev.to/alexmercedcoder/a-deep-dive-into-docker-compose-27h5 ↩︎
https://strapi.io/blog/what-is-docker-compose-all-you-need-to-know ↩︎
https://www.digitalocean.com/community/tutorials/how-to-install-and-use-docker-compose-on-ubuntu-20-04 ↩︎

