Apa itu Docker?
Kalau kamu sering denger istilah Docker tapi masih bingung apa sih sebenarnya, tenang aja! Gue bakal jelasin dengan bahasa yang gampang dimengerti.
Docker itu pada dasarnya adalah platform yang memungkinkan kita untuk membuat, deploy, dan menjalankan aplikasi menggunakan teknologi yang namanya container. Nah, container ini bisa kamu bayangkan seperti kotak virtual yang berisi semua yang dibutuhkan aplikasi untuk berjalan - mulai dari code, runtime, system tools, libraries, sampai settings.
Bedanya dengan virtual machine tradisional, Docker container itu lebih ringan dan efisien. Kalau virtual machine harus menjalankan operating system lengkap, Docker container cuma butuh bagian-bagian essensial aja. Makanya Docker bisa jalan lebih cepat dan hemat resource.
Singkatnya, Docker membantu kita memastikan bahwa aplikasi yang jalan di komputer development kita akan jalan persis sama di server production. Gak ada lagi drama "loh kok di komputer gue jalan tapi di server enggak?"
Mengapa Docker penting untuk developer?
Sebagai developer, pasti kamu pernah ngalamin situasi dimana aplikasi yang udah kamu kerjain berhari-hari tiba-tiba error pas di deploy ke server. Atau mungkin kamu kerja dalam team dan aplikasi yang jalan mulus di komputer temen kamu malah bermasalah di komputer kamu.
Nah, Docker hadir untuk ngesolve masalah-masalah kayak gini. Ada beberapa alasan kenapa Docker jadi tools yang wajib dikuasai developer modern:
Konsistensi Environment
Dengan Docker, environment development, testing, dan production bisa dibuat identik. Jadi kalau aplikasi jalan di development, hampir pasti bakal jalan juga di production.
Kemudahan Deployment
Deploy aplikasi jadi semudah copy-paste container. Gak perlu ribet setup environment dari awal lagi di setiap server.
Isolasi yang Aman
Setiap container berjalan secara terisolasi. Kalau satu aplikasi bermasalah, gak akan ngaruh ke aplikasi lain yang berjalan di server yang sama.
Resource Efficiency
Docker container lebih hemat resource dibanding virtual machine. Satu server bisa menjalankan lebih banyak aplikasi tanpa performance drop yang signifikan.
Microservices Architecture
Docker perfect banget buat implementasi microservices. Setiap service bisa dikemas dalam container terpisah dan di-manage secara independen.
Keuntungan menggunakan Docker di Ubuntu

Ubuntu adalah salah satu distribusi Linux yang paling populer untuk server dan development. Kombinasi Ubuntu dan Docker memberikan beberapa keuntungan khusus:
Official Support yang Kuat
Docker memiliki dukungan official untuk Ubuntu. Artinya instalasi dan maintenance jadi lebih mudah dan stabil. Dokumentasi juga lengkap banget.
Package Manager yang Powerful
Ubuntu punya APT package manager yang memudahkan instalasi dan update Docker. Proses instalasi jadi lebih straightforward dibanding distribusi Linux lainnya.
Community yang Besar
Karena Ubuntu populer, banyak banget tutorial, troubleshooting guide, dan community support yang tersedia. Kalau kamu stuck, pasti gampang nyari solusinya.
Performance yang Optimal
Ubuntu udah dioptimasi untuk server environment. Kombinasi dengan Docker menghasilkan performance yang excellent untuk containerized applications.
Security Features
Ubuntu punya security features yang robust kayak AppArmor dan UFW firewall yang bekerja dengan baik bareng Docker untuk menjaga keamanan container.
LTS (Long Term Support)
Ubuntu LTS versions dapat support hingga 5 tahun. Ini memberikan stabilitas jangka panjang untuk production environment yang menggunakan Docker.
Buat kamu yang belajar di BuildWithAngga atau lagi ngerjain project-project web development, Ubuntu + Docker adalah kombinasi yang sempurna. Kamu bisa bikin environment yang konsisten untuk semua project, mulai dari aplikasi Laravel, Node.js, sampai React yang butuh setup environment yang berbeda-beda.
Di artikel selanjutnya, kita bakal bahas persiapan sistem sebelum install Docker di Ubuntu. Stay tuned ya!
System Requirements Minimum
Sebelum kita mulai install Docker di Ubuntu, penting banget buat mastikan sistem kamu udah memenuhi requirements yang dibutuhkan. Percaya deh, lebih baik cek dulu daripada nanti stuck di tengah jalan gara-gara spesifikasi kurang memadai.

Hardware Requirements:
Untuk menjalankan Docker dengan lancar, sistem kamu minimal harus punya:
- RAM: Minimal 2GB, tapi gue rekomendasiin 4GB atau lebih. Kenapa? Karena Docker container memang ringan, tapi kalau kamu berencana menjalankan beberapa container sekaligus (misalnya database, web server, dan aplikasi), RAM 2GB bisa jadi bottleneck.
- Storage: Minimal 10GB free space. Docker images dan container bisa ngabisin space lumayan banyak, apalagi kalau kamu sering eksperimen dengan berbagai images. Buat project-project BuildWithAngga yang biasanya involve database dan web server, prepare setidaknya 20GB free space.
- Processor: Docker bisa jalan di hampir semua processor modern. Yang penting support 64-bit architecture. Kalau kamu pake processor yang udah lebih dari 5 tahun, kemungkinan besar udah support.
Arsitektur yang Didukung:
Docker resmi mendukung arsitektur berikut di Ubuntu:
- x86_64/amd64 (ini yang paling umum)
- armhf (untuk ARM 32-bit)
- arm64 (untuk ARM 64-bit)
- s390x (IBM System z)
Virtualization Support:
Kalau kamu install Ubuntu di virtual machine, pastikan virtualization features udah di-enable di BIOS/UEFI host system. Tanpa ini, Docker bakal jalan tapi performance-nya bisa sangat lambat.
Cek Versi Ubuntu yang Didukung
Docker gak support semua versi Ubuntu. Ada versi-versi tertentu yang officially supported, dan ada juga yang udah deprecated. Mari kita cek versi Ubuntu kamu dulu.
Cara Cek Versi Ubuntu:
Buka terminal dan jalankan perintah ini:
lsb_release -a

Atau kalau kamu prefer yang lebih simple:
cat /etc/os-release

Versi Ubuntu yang Didukung Docker:
Per Januari 2025, Docker secara resmi mendukung versi Ubuntu berikut:
- Ubuntu 24.04 LTS (Noble Numbat) - Recommended untuk production
- Ubuntu 23.10 (Mantic Minotaur)
- Ubuntu 23.04 (Lunar Lobster)
- Ubuntu 22.04 LTS (Jammy Jellyfish) - Sangat stabil, cocok untuk pemula
- Ubuntu 20.04 LTS (Focal Fossa) - Masih supported tapi udah agak lawas
Yang Perlu Diperhatikan:
Kalau versi Ubuntu kamu di bawah 20.04, gue saranin upgrade dulu. Versi yang terlalu lama bisa bikin masalah kompatibilitas, terutama dengan Docker engine yang terbaru.
Buat kamu yang belajar di BuildWithAngga dan sering ngerjain project web development, gue rekomendasiin pake Ubuntu 22.04 LTS atau 24.04 LTS. Kenapa LTS? Karena Long Term Support memberikan stabilitas yang lebih baik untuk development environment.
Cek Architecture System:
Selain versi, kamu juga perlu pastikan architecture system udah sesuai:
uname -m

Kalau hasilnya x86_64, berarti kamu pake 64-bit system dan siap untuk install Docker.
Update Sistem Ubuntu
Sebelum install Docker, sangat penting untuk update sistem Ubuntu ke versi terbaru. Ini bukan cuma buat keamanan aja, tapi juga memastikan semua dependencies yang dibutuhkan Docker udah tersedia.
Step 1: Update Package Index
Pertama, update daftar package yang tersedia:
sudo apt update

Command ini akan download informasi terbaru tentang package yang tersedia di repository Ubuntu. Prosesnya biasanya cuma butuh beberapa detik sampai beberapa menit tergantung koneksi internet.
Step 2: Upgrade Installed Packages
Setelah update package index, saatnya upgrade semua package yang udah terinstall:
sudo apt upgrade -y

Flag -y akan otomatis answer "yes" untuk semua prompt, jadi kamu gak perlu manual confirm setiap package yang mau di-upgrade.
Step 3: Remove Unnecessary Packages
Bersihkan package yang gak diperlukan lagi:
sudo apt autoremove -y

Step 4: Clean Package Cache
Terakhir, bersihkan cache package untuk ngirit storage:
sudo apt autoclean

Reboot System (Optional tapi Recommended)
Kalau ada kernel updates atau system-level updates, lebih baik reboot sistem:
sudo reboot
Verifikasi Update Berhasil:
Setelah reboot, cek lagi apakah sistem udah fully updated:
sudo apt list --upgradable
Kalau hasilnya kosong atau cuma sedikit package, berarti sistem kamu udah up-to-date.
Tips Tambahan untuk Developer:
Kalau kamu sering kerja dengan project-project yang butuh development tools tertentu, ini saat yang tepat juga untuk install package-package essential:
sudo apt install curl wget git vim nano htop tree -y
Package-package ini akan sangat berguna nanti pas kamu udah mulai kerja dengan Docker container.
Troubleshooting Common Issues:
Kalau kamu encounter error pas update, coba beberapa solusi ini:
GPG errors: Biasanya masalah dengan repository keys
sudo apt-key adv --keyserver keyserver.ubuntu.com --recv-keys [KEY_ID]
Lock errors: Ada process lain yang lagi pake APT
sudo killall apt apt-get
sudo rm /var/lib/apt/lists/lock
sudo rm /var/cache/apt/archives/lock
sudo rm /var/lib/dpkg/lock*
Broken packages: Fix dengan:
sudo apt --fix-broken install
Setelah semua step persiapan ini selesai, sistem Ubuntu kamu udah siap untuk install Docker. Di bagian selanjutnya, kita bakal mulai proses instalasi Docker yang sebenarnya.
Instalasi via Repository Resmi (Recommended)
Nah, sekarang masuk ke bagian yang ditunggu-tunggu! Instalasi Docker di Ubuntu. Ada beberapa cara buat install Docker, tapi gue bakal jelasin metode yang paling recommended dan stabil, yaitu lewat repository resmi Docker.
Kenapa gue rekomendasiin metode ini? Karena kamu bakal dapet Docker versi terbaru dan update otomatis dari Docker langsung. Beda dengan install lewat Ubuntu repository default yang kadang versinya ketinggalan jauh.
Buat kamu yang lagi belajar di BuildWithAngga dan butuh environment development yang konsisten, metode ini adalah pilihan terbaik karena memberikan kontrol penuh atas versi Docker yang kamu pakai.
Hapus Instalasi Docker Lama
Sebelum install Docker versi baru, kita harus pastikan dulu gak ada instalasi Docker lama yang bisa bikin konflik. Bahkan kalau kamu yakin belum pernah install Docker, tetep jalanin step ini buat jaga-jaga.
Uninstall Docker Packages Lama:
sudo apt remove docker docker-engine docker.io containerd runc

Command ini akan remove package-package Docker yang mungkin udah terinstall sebelumnya. Kalau kamu dapet pesan "Package not found" atau semacamnya, gak usah khawatir. Artinya emang gak ada Docker yang terinstall sebelumnya.
Bersihkan Docker Data (Opsional):
Kalau kamu mau clean install totally, kamu juga bisa hapus semua data Docker yang tersimpan:
sudo rm -rf /var/lib/docker
sudo rm -rf /var/lib/containerd
Warning: Command di atas akan menghapus SEMUA images, containers, volumes, dan networks yang pernah kamu buat. Jadi pastikan kamu udah backup data penting sebelumnya.
Setup Docker Repository
Sekarang kita setup repository resmi Docker di sistem Ubuntu kamu. Ini diperlukan supaya APT package manager tau dari mana harus download Docker.
Step 1: Install Prerequisites
Pertama, install package-package yang diperlukan:
sudo apt update
sudo apt install ca-certificates curl gnupg lsb-release

Package-package ini diperlukan buat:
ca-certificates: Verifikasi SSL certificatescurl: Download files dari internetgnupg: Handle GPG keys untuk securitylsb-release: Detect Ubuntu version
Step 2: Add Docker GPG Key
Tambahkan official GPG key dari Docker:
sudo mkdir -p /etc/apt/keyrings
curl -fsSL <https://download.docker.com/linux/ubuntu/gpg> | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg

GPG key ini digunakan untuk memverifikasi bahwa package Docker yang kamu download emang asli dari Docker dan gak dimodifikasi pihak ketiga.
Step 3: Setup Repository
Tambahkan Docker repository ke sources list:
echo \\
"deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] <https://download.docker.com/linux/ubuntu> \\
$(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
Command ini agak panjang, tapi intinya kita ngasih tau APT bahwa ada repository tambahan di download.docker.com yang bisa dipercaya.
Step 4: Update Package Index
Setelah tambah repository baru, update package index lagi:
sudo apt update
Kalau berhasil, kamu bakal lihat ada line yang mention tentang Docker repository di output command ini.
Install Docker Engine
Sekarang saatnya install Docker engine yang sebenarnya. Ada beberapa package yang perlu diinstall supaya Docker bisa jalan dengan sempurna.
Install Docker CE (Community Edition):
sudo apt install docker-ce docker-ce-cli containerd.io docker-compose-plugin

Mari kita breakdown apa aja yang diinstall:
- docker-ce: Docker Community Edition engine utama
- docker-ce-cli: Command line interface untuk Docker
- containerd.io: Container runtime yang jadi backend Docker
- docker-compose-plugin: Plugin untuk Docker Compose (berguna banget buat multi-container apps)
Proses instalasi biasanya butuh beberapa menit tergantung koneksi internet kamu.
Alternatif Install Versi Spesifik:
Kalau kamu butuh versi Docker tertentu (misalnya buat compatibility dengan project tertentu), kamu bisa cek versi yang tersedia dulu:
apt-cache madison docker-ce
Terus install versi spesifik:
sudo apt install docker-ce=5:24.0.0-1~ubuntu.22.04~jammy docker-ce-cli=5:24.0.0-1~ubuntu.22.04~jammy containerd.io
Tapi buat pemula, gue rekomendasiin install versi latest aja.
Verifikasi Instalasi
Setelah instalasi selesai, penting banget buat verifikasi bahwa Docker udah terinstall dengan benar dan bisa jalan normal.
Cek Status Docker Service:
sudo systemctl status docker

Kalau instalasi berhasil, kamu bakal lihat status "active (running)" dengan warna hijau. Kalau statusnya "inactive" atau "failed", berarti ada masalah dengan instalasi.
Cek Versi Docker:
docker --version
Command ini akan munculin informasi versi Docker yang terinstall. Contoh output:

Test Run Container Pertama:
Sekarang saatnya test apakah Docker bisa run container dengan benar:
sudo docker run hello-world
Kalau berhasil, kamu bakal lihat output seperti ini:

Enable Docker Service Auto-start:
Supaya Docker otomatis nyala setiap kali sistem boot:
sudo systemctl enable docker

Troubleshooting Common Issues:
Kalau kamu encounter masalah pas verifikasi, ini beberapa solusi umum:
Docker service gak mau start:
sudo systemctl restart docker
sudo journalctl -u docker.service
Permission denied errors:
sudo chmod 666 /var/run/docker.sock
GPG key errors pas update:
sudo apt-key adv --keyserver keyserver.ubuntu.com --recv-keys 7EA0A9C3F273FCD8
Setelah semua step ini selesai, Docker udah siap digunakan di sistem Ubuntu kamu. Di bagian selanjutnya, kita bakal bahas konfigurasi post-installation yang bisa bikin workflow development kamu lebih smooth, terutama buat project-project yang sering kamu kerjain di BuildWithAngga.
Menjalankan Docker tanpa sudo
Setelah Docker berhasil diinstall, kamu pasti ngerasa ribet harus ngetik sudo setiap kali mau jalanin Docker command. Bayangin aja kalau kamu lagi develop aplikasi Laravel atau Node.js di BuildWithAngga dan harus berulang kali jalanin container, pasti capek banget ngetik sudo terus.
Untungnya, ada cara buat jalanin Docker tanpa sudo. Tapi sebelum kita lanjut, penting banget buat paham resikonya. Ngasih akses Docker tanpa sudo ke user artinya user itu punya akses hampir setara dengan root user. Jadi pastikan cuma user yang dipercaya aja yang dikasih akses ini.
Tambah User ke Docker Group:
Pertama, kita perlu nambah user kamu ke group docker:
sudo usermod -aG docker $USER

Command ini akan nambahin user yang lagi aktif ($USER) ke group docker. Flag -a artinya append (jangan replace group yang udah ada), dan -G buat specify group yang mau ditambah.
Refresh Group Membership:
Setelah nambahin user ke group, kamu perlu refresh group membership. Ada beberapa cara buat ngalakuin ini:
Logout dan Login lagi (cara paling aman):
logout
Atau restart session dengan newgrp:
newgrp docker
Atau restart sistem (kalau kamu gak keberatan):
sudo reboot
Verifikasi Akses Docker tanpa sudo:
Setelah refresh session, test apakah Docker udah bisa jalan tanpa sudo:
docker run hello-world

Kalau berhasil dan gak ada error permission, berarti konfigurasi udah bener. Kalau masih error, coba restart sistem dulu.
Test dengan Container yang Lebih Complex:
Buat mastiin semuanya jalan sempurna, coba jalanin container yang lebih kompleks:
docker run -it ubuntu:latest /bin/bash

Command ini akan download Ubuntu image (kalau belum ada) dan jalanin interactive bash session. Kalau berhasil, kamu akan masuk ke terminal Ubuntu di dalam container.
Troubleshooting Permission Issues:
Kalau masih ada masalah permission setelah ikutin langkah di atas:
Cek apakah user udah masuk group docker:
groups $USER

Kalau belum keliatan, coba manual specify group:
sudo gpasswd -a $USER docker
Reset Docker socket permissions:
sudo chown root:docker /var/run/docker.sock
sudo chmod 664 /var/run/docker.sock
Mengatur Docker untuk Start Otomatis
Biar gak repot nyalain Docker service manual setiap kali boot sistem, kita bisa set Docker buat start otomatis. Ini sangat penting terutama kalau kamu develop aplikasi yang depend sama Docker, kayak project-project microservice atau containerized web apps.
Enable Auto-start dengan systemctl:
sudo systemctl enable docker.service
sudo systemctl enable containerd.service
Command pertama akan enable Docker daemon buat start otomatis. Yang kedua enable containerd service yang jadi runtime backend Docker.
Verifikasi Status Auto-start:
Cek apakah service udah di-enable dengan bener:
sudo systemctl is-enabled docker
sudo systemctl is-enabled containerd

Kalau output-nya "enabled", berarti konfigurasi udah bener.
Test Auto-start:
Cara paling gampang buat test auto-start adalah dengan restart sistem:
sudo reboot
Setelah sistem boot, langsung cek status Docker tanpa manual start:
sudo systemctl status docker

Kalau statusnya "active (running)", berarti auto-start udah jalan dengan sempurna.
Disable Auto-start (kalau perlu):
Kalau suatu saat kamu mau disable auto-start Docker (misalnya buat hemat resource di laptop development):
sudo systemctl disable docker.service
sudo systemctl disable containerd.service

Tapi buat production server atau development environment yang sering dipake, gue rekomendasiin tetep enable auto-start.
Konfigurasi Docker Daemon
Docker daemon adalah background process yang ngatur semua operasi Docker. Ada beberapa konfigurasi penting yang bisa kamu atur buat optimize performance dan sesuaiin dengan kebutuhan development kamu.
Lokasi File Konfigurasi:
Docker daemon dibaca dari file /etc/docker/daemon.json. File ini gak exist by default, jadi kita perlu buat manual.
Buat File Konfigurasi:
sudo nano /etc/docker/daemon.json
Konfigurasi Basic yang Recommended:
Ini contoh konfigurasi basic yang cocok buat development environment:
{
"log-driver": "json-file",
"log-opts": {
"max-size": "10m",
"max-file": "3"
},
"storage-driver": "overlay2",
"default-address-pools": [
{
"base": "172.17.0.0/16",
"size": 24
}
]
}
Mari kita breakdown konfigurasi di atas:
- log-driver: Format log yang dipake Docker
- log-opts: Pengaturan rotation log biar gak ngabisin disk space
- storage-driver: Driver buat manage container layers
- default-address-pools: Network range buat container
Konfigurasi untuk Development Environment:
Kalau kamu sering develop aplikasi web kayak yang diajarkan di BuildWithAngga, ini konfigurasi yang lebih optimized:
{
"log-driver": "json-file",
"log-opts": {
"max-size": "10m",
"max-file": "5"
},
"storage-driver": "overlay2",
"default-address-pools": [
{
"base": "172.17.0.0/16",
"size": 24
}
],
"dns": ["8.8.8.8", "8.8.4.4"],
"insecure-registries": [],
"registry-mirrors": [],
"max-concurrent-downloads": 3,
"max-concurrent-uploads": 5
}

Konfigurasi tambahan di atas:
- dns: DNS server yang dipake container
- max-concurrent-downloads/uploads: Limit concurrent operations buat performa yang lebih stabil
Apply Konfigurasi:
Setelah save file konfigurasi, restart Docker daemon:
sudo systemctl daemon-reload
sudo systemctl restart docker
Verifikasi Konfigurasi:
Cek apakah konfigurasi udah di-apply dengan bener:
docker info

Command ini akan nunjukkin informasi lengkap tentang Docker daemon, termasuk konfigurasi yang lagi aktif.
Konfigurasi Resource Limits (Advanced):
Buat yang mau lebih advanced, kamu bisa set resource limits:
{
"log-driver": "json-file",
"log-opts": {
"max-size": "10m",
"max-file": "3"
},
"storage-driver": "overlay2",
"default-ulimits": {
"memlock": {
"Hard": -1,
"Name": "memlock",
"Soft": -1
},
"nofile": {
"Hard": 65536,
"Name": "nofile",
"Soft": 65536
}
}
}
Troubleshooting Daemon Configuration:
Kalau Docker gak mau start setelah edit konfigurasi:
Cek syntax JSON:
python3 -m json.tool /etc/docker/daemon.json
Lihat error log:
sudo journalctl -u docker.service --no-pager
Reset ke konfigurasi default:
sudo mv /etc/docker/daemon.json /etc/docker/daemon.json.backup
sudo systemctl restart docker
Tips untuk Development dengan BuildWithAngga Projects:
Buat kamu yang sering kerja dengan project Laravel, Node.js, atau React yang butuh database dan berbagai service, ini beberapa tips konfigurasi:
- Set log rotation yang agresif biar log gak numpuk pas development
- Pake DNS public kayak Google DNS buat avoid masalah network
- Enable Docker Compose plugin buat management multi-container apps yang lebih gampang
Dengan konfigurasi post-installation yang bener, Docker di Ubuntu kamu bakal jalan lebih smooth dan siap dipake buat development sehari-hari. Di bagian selanjutnya, kita bakal bahas perintah-perintah dasar Docker yang perlu kamu kuasai.
Menjalankan Container "Hello World"
Setelah semua konfigurasi selesai, saatnya kita test apakah Docker bener-bener udah jalan dengan sempurna. Test pertama yang paling klasik adalah menjalankan container "Hello World" dari Docker. Ini kayak tradisi buat setiap developer yang baru install Docker.
Jalankan Hello World Container:
docker run hello-world
Command sederhana ini sebenarnya melakukan beberapa hal sekaligus di balik layar:
- Docker akan cari image bernama "hello-world" di local sistem
- Kalau gak ketemu, Docker akan download dari Docker Hub registry
- Setelah download selesai, Docker akan create dan jalanin container baru
- Container akan eksekusi program yang udah ada di dalam image
- Setelah program selesai, container akan otomatis berhenti
Expected Output:
Kalau semuanya jalan lancar, kamu bakal lihat output kayak gini:
Hello from Docker!
This message shows that your installation appears to be working correctly.
To generate this message, Docker took the following steps:
1. The Docker client contacted the Docker daemon.
2. The Docker daemon pulled the "hello-world" image from the Docker Hub.
3. The Docker daemon created a new container from that image which runs the
executable that produces the output you are currently reading.
4. The Docker daemon streamed that output to the Docker client, which sent it
to your terminal.
Cek Downloaded Images:
Setelah jalanin hello-world, cek image apa aja yang udah ada di sistem:
docker images

Kamu bakal lihat hello-world image terdaftar dengan ukuran yang sangat kecil (biasanya cuma beberapa KB).
Cek Container History:
Lihat container yang udah pernah dijalankan:
docker ps -a

Flag -a akan nunjukkin semua container, termasuk yang udah berhenti. Kamu bakal lihat hello-world container dengan status "Exited".
Test dengan Ubuntu Container:
Sekarang coba test yang lebih interaktif dengan Ubuntu container:
docker run -it ubuntu:latest /bin/bash

Command ini akan:
- Download Ubuntu image kalau belum ada
- Jalanin container dengan interactive mode (
it) - Start bash shell di dalam container
Kalau berhasil, prompt terminal kamu akan berubah jadi sesuatu kayak root@containerid:/#. Artinya kamu udah masuk ke dalam Ubuntu container!
Keluar dari Container:
Buat keluar dari container, ketik:
exit
Perintah-perintah Docker Dasar
Sekarang kita bahas perintah-perintah Docker dasar yang wajib kamu kuasai. Ini essential banget buat daily development, terutama kalau kamu sering kerja dengan project-project di BuildWithAngga yang butuh multiple services.
Image Management Commands:
Download image tanpa jalanin container:
docker pull nginx:latest

Lihat semua images:
docker images

Hapus image:
docker rmi nginx:latest

Cari image di Docker Hub:
docker search mysql

Container Management Commands:
Jalanin container di background:
docker run -d nginx:latest
Lihat running containers:
docker ps

Lihat semua containers (running + stopped):
docker ps -a

Stop container:
docker stop container_id_atau_name

Start container yang udah stop:
docker start container_id_atau_name

Restart container:
docker restart container_id_atau_name

Hapus container:
docker rm container_id_atau_name

Practical Examples untuk Web Development:
Buat kamu yang develop web apps, ini beberapa contoh praktis:
Jalanin MySQL database:
docker run -d --name mysql_db -e MYSQL_ROOT_PASSWORD=secret -p 3306:3306 mysql:8.0

Jalanin PostgreSQL:
docker run -d --name postgres_db -e POSTGRES_PASSWORD=secret -p 5432:5432 postgres:15

Jalanin Redis cache:
docker run -d --name redis_cache -p 6379:6379 redis:latest

Jalanin Nginx web server:
docker run -d --name web_server -p 80:80 -v /path/to/html:/usr/share/nginx/html nginx:latest

Container Interaction Commands:
Masuk ke running container:
docker exec -it container_name /bin/bash
Jalanin command di container:
docker exec container_name ls -la
Copy file ke/dari container:
docker cp file.txt container_name:/path/to/destination
docker cp container_name:/path/to/file.txt ./
Lihat logs container:
docker logs container_name
docker logs -f container_name # follow logs real-time

System Information Commands:
Lihat info Docker system:
docker info
Lihat resource usage:
docker stats

Cleanup unused resources:
docker system prune

Troubleshooting Masalah Umum
Meskipun Docker relatif stabil, ada beberapa masalah umum yang sering dihadapi pemula. Gue bakal jelasin masalah-masalah tersebut beserta solusinya.
1. Permission Denied Errors:
Masalah: Error kayak "permission denied while trying to connect to the Docker daemon socket"
Solusi:
# Pastikan user ada di docker group
sudo usermod -aG docker $USER
# Logout dan login lagi, atau restart
newgrp docker
# Kalau masih error, reset socket permissions
sudo chown root:docker /var/run/docker.sock
sudo chmod 664 /var/run/docker.sock
2. Container Gak Bisa Start:
Masalah: Container langsung exit atau gak mau start
Solusi:
# Cek logs container
docker logs container_name
# Jalanin dengan interactive mode buat debug
docker run -it image_name /bin/bash
# Cek apakah port udah dipake
sudo netstat -tulpn | grep :port_number
3. Image Download Gagal:
Masalah: Error timeout atau network issues pas download image
Solusi:
# Restart Docker service
sudo systemctl restart docker
# Cek DNS configuration di daemon.json
sudo nano /etc/docker/daemon.json
# Tambah DNS resolver
{
"dns": ["8.8.8.8", "8.8.4.4"]
}
# Restart Docker setelah edit config
sudo systemctl restart docker
4. Disk Space Penuh:
Masalah: Docker ngabisin disk space gara-gara banyak images dan containers
Solusi:
# Hapus unused containers, networks, images
docker system prune -a
# Hapus semua stopped containers
docker container prune
# Hapus unused images
docker image prune -a
# Hapus unused volumes
docker volume prune
5. Port Already in Use:
Masalah: Error "port is already allocated" pas jalanin container
Solusi:
# Cek process yang pake port
sudo lsof -i :port_number
# Kill process yang bentrok
sudo kill -9 process_id
# Atau pake port lain
docker run -p 8080:80 nginx:latest # instead of port 80
6. Memory/CPU Issues:
Masalah: Container jalan lambat atau system hang
Solusi:
# Limit resource usage
docker run --memory="1g" --cpus="1.0" image_name
# Monitor resource usage
docker stats
# Restart container yang bermasalah
docker restart container_name
7. Network Connectivity Issues:
Masalah: Container gak bisa akses internet atau communicate antar container
Solusi:
# Restart Docker daemon
sudo systemctl restart docker
# Create custom network
docker network create my_network
docker run --network=my_network container1
docker run --network=my_network container2
# Cek network configuration
docker network ls
docker network inspect bridge
Tips Debug yang Berguna:
Selalu cek logs pertama kali ada masalah:
docker logs -f container_name
Pake interactive mode buat debugging:
docker run -it --entrypoint=/bin/bash image_name
Monitor system resources:
docker stats --no-stream
htop # install dulu: sudo apt install htop
Backup data penting sebelum cleanup:
docker commit container_name backup_image_name
Specific untuk BuildWithAngga Projects:
Kalau kamu lagi develop project Laravel dengan Docker:
# Buat network khusus
docker network create laravel_network
# Jalanin MySQL
docker run -d --name mysql_laravel --network=laravel_network \\
-e MYSQL_ROOT_PASSWORD=secret \\
-e MYSQL_DATABASE=laravel_db \\
-p 3306:3306 mysql:8.0
# Test koneksi database
docker exec -it mysql_laravel mysql -u root -psecret laravel_db
Dengan memahami troubleshooting ini, kamu bakal lebih percaya diri menggunakan Docker buat development project sehari-hari. Remember, error adalah bagian dari learning process, jadi jangan takut eksperimen!
Instalasi Docker Compose
Sekarang kita masuk ke bagian bonus yang sangat powerful - Docker Compose! Kalau Docker itu buat manage single container, Docker Compose adalah tools buat manage multiple containers sekaligus. Ini super berguna banget buat kamu yang develop aplikasi web complex kayak yang sering ada di course BuildWithAngga.
Bayangin kamu lagi bikin aplikasi Laravel yang butuh database MySQL, Redis buat caching, dan mungkin Nginx buat web server. Tanpa Docker Compose, kamu harus jalanin satu-satu container dengan command panjang dan ribet. Dengan Docker Compose, semua bisa diatur dalam satu file konfigurasi dan dijalanin dengan satu command aja!
Cek Versi Docker Compose yang Terinstall:
Sebelum install, cek dulu apakah Docker Compose udah terinstall waktu kita install Docker engine kemarin:
docker compose version

Kalau kamu dapet output yang nunjukin versi Docker Compose, berarti udah terinstall dan kamu bisa skip bagian instalasi. Tapi kalau dapet error "command not found", kita perlu install manual.
Note penting: Docker Compose yang baru menggunakan docker compose (dengan spasi), bukan docker-compose (dengan dash) kayak versi lama.
Instalasi Docker Compose (kalau belum ada):
Ada beberapa cara buat install Docker Compose. Gue bakal jelasin metode yang paling reliable:
Method 1: Via APT (Recommended)
sudo apt update
sudo apt install docker-compose-plugin
Method 2: Download Binary (kalau method 1 gak work)
# Download latest release
sudo curl -L "<https://github.com/docker/compose/releases/latest/download/docker-compose-$>(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
# Kasih permission executable
sudo chmod +x /usr/local/bin/docker-compose
# Buat symbolic link buat compatibility
sudo ln -s /usr/local/bin/docker-compose /usr/bin/docker-compose
Verifikasi Instalasi:
Setelah instalasi selesai, verify dengan:
docker compose version
Expected output:
Docker Compose version v2.24.1
Troubleshooting Instalasi:
Kalau kamu encounter error pas instalasi:
Error "package not found":
sudo apt update
sudo apt install ca-certificates curl gnupg
Permission denied error:
sudo chmod +x /usr/local/bin/docker-compose
sudo chown root:root /usr/local/bin/docker-compose
Command not found setelah install:
echo $PATH
# Pastikan /usr/local/bin ada di PATH
export PATH=$PATH:/usr/local/bin
Contoh Penggunaan Sederhana
Sekarang kita praktek langsung pake Docker Compose dengan contoh yang real dan berguna buat development. Gue bakal kasih beberapa contoh mulai dari yang simple sampai yang lebih complex.
Setup LAMP Stack Sederhana
Kita mulai dengan setup environment LAMP (Linux, Apache, MySQL, PHP) yang cocok buat project web development:
Buat Directory Project:
mkdir lamp-docker
cd lamp-docker

Buat File docker-compose.yml:
nano docker-compose.yml
Isi file dengan konfigurasi berikut:
version: '3.8'
services:
web:
image: php:8.2-apache
container_name: lamp_web
ports:
- "8080:80"
volumes:
- ./html:/var/www/html
depends_on:
- database
networks:
- lamp_network
database:
image: mysql:8.0
container_name: lamp_mysql
restart: always
environment:
MYSQL_ROOT_PASSWORD: root_password
MYSQL_DATABASE: my_database
MYSQL_USER: developer
MYSQL_PASSWORD: dev_password
ports:
- "3306:3306"
volumes:
- mysql_data:/var/lib/mysql
networks:
- lamp_network
phpmyadmin:
image: phpmyadmin/phpmyadmin
container_name: lamp_phpmyadmin
restart: always
environment:
PMA_HOST: database
PMA_PORT: 3306
ports:
- "8081:80"
depends_on:
- database
networks:
- lamp_network
volumes:
mysql_data:
networks:
lamp_network:
driver: bridge
Buat Directory HTML:
mkdir html
echo "<?php phpinfo(); ?>" > html/index.php
Jalanin Stack:
docker compose up -d

Flag -d akan jalanin containers di background. Kamu bakal lihat Docker download images yang diperlukan dan start semua services.
Test Setup:
- Buka browser dan akses
http://localhost:8080buat lihat PHP info

- Akses
http://localhost:8081buat masuk phpMyAdmin

- Login phpMyAdmin dengan username:
developer, password:dev_password
Dengan Docker Compose, setup development environment jadi jauh lebih gampang dan konsisten. Kamu gak perlu lagi install MySQL, Redis, atau services lain secara manual di sistem. Cukup satu command docker compose up, dan semua environment udah siap dipake!
Ringkasan Langkah-langkah
Selamat! Kamu udah berhasil install Docker di Ubuntu dan sekarang punya environment development yang powerful.
Kita udah berhasil install Docker via repository resmi, setup konfigurasi post-installation supaya bisa jalanin Docker tanpa sudo, test dengan berbagai container, dan pelajarin Docker Compose buat manage multi-container applications.
Sekarang Docker udah jalan sempurna di Ubuntu kamu dan siap dipake buat development project sehari-hari!
Next Steps untuk Pembelajaran Docker
Praktik dengan Project Nyata: Saatnya terapkan pengetahuan Docker kamu ke project nyata. Mulai dengan containerize aplikasi web sederhana, terus lanjut ke aplikasi yang lebih komplex.
Rekomendasi Belajar di BuildWithAngga:
Buat yang mau lanjutin pembelajaran Docker, BuildWithAngga punya beberapa materi yang sangat cocok buat memperdalam kemampuan kamu. Di platform ini kamu bisa belajar cara implementasi Docker di berbagai skenario development, mulai dari setup environment Laravel yang proper, explore konsep DevOps dan containerization lebih dalam, sampai implementasi arsitektur microservices yang modern.
Yang menarik dari belajar di BuildWithAngga adalah pendekatan yang praktis dan langsung praktik. Kamu gak cuma belajar teori, tapi langsung latihan dengan project nyata yang bisa kamu pake di portfolio atau kerja sehari-hari. Plus materinya selalu update dengan praktik terbaik industri terbaru.
Docker adalah kemampuan yang sangat berharga di industri pengembangan software modern. Terus berlatih, tetap penasaran, dan jangan ragu buat eksperimen dengan Docker. Setiap error adalah kesempatan buat belajar hal yang baru. Selamat coding!