Cara Install Docker di Ubuntu: Panduan Lengkap untuk Pemula

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 Desktop
Ubuntu Desktop

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.

Contoh Spesifikasi
Contoh Spesifikasi

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

Terminal: cek versi ubuntu
Terminal: cek versi ubuntu

Atau kalau kamu prefer yang lebih simple:

cat /etc/os-release

Terminal: cara lain cek versi ubuntu
Terminal: cara lain cek versi ubuntu

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

Terminal: cek arsitektur sistem
Terminal: cek arsitektur sistem

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

Terminal: sudo apt update
Terminal: 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

Terminal: sudo apt upgrade
Terminal: sudo apt upgrade

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

Terminal: sudo apt autoremove -y
Terminal: sudo apt autoremove -y

Step 4: Clean Package Cache

Terakhir, bersihkan cache package untuk ngirit storage:

sudo apt autoclean

Terminal: sudo apt autoclean
Terminal: 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

Terminal: remove docker
Terminal: remove docker

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

Terminal: install ca-certificates curl gnupg lsb-release
Terminal: install ca-certificates curl gnupg lsb-release

Package-package ini diperlukan buat:

  • ca-certificates: Verifikasi SSL certificates
  • curl: Download files dari internet
  • gnupg: Handle GPG keys untuk security
  • lsb-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

Terminal: Docker GPG
Terminal: 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

Terminal: install docker
Terminal: install docker

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

Terminal: status docker
Terminal: 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:

Terminal: docker version
Terminal: docker version

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:

Terminal: docker hello-world
Terminal: docker hello-world

Enable Docker Service Auto-start:

Supaya Docker otomatis nyala setiap kali sistem boot:

sudo systemctl enable docker

Terminal: docker auto start
Terminal: docker auto start

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

Terminal: tambah user ke docker group
Terminal: tambah user ke docker group

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

Terminal: docker run
Terminal: docker run

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

Terminal: docker run ubuntu
Terminal: docker run ubuntu

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

Terminal: groups $USER
Terminal: 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

Terminal: cek status auto start
Terminal: cek status auto start

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

Terminal: docker status
Terminal: docker status

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

Terminal: disable docker auto start
Terminal: disable docker auto start

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
}

Terminal: konfigurasi daemon
Terminal: konfigurasi daemon

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

Terminal: docker info
Terminal: 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:

  1. Set log rotation yang agresif biar log gak numpuk pas development
  2. Pake DNS public kayak Google DNS buat avoid masalah network
  3. 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:

  1. Docker akan cari image bernama "hello-world" di local sistem
  2. Kalau gak ketemu, Docker akan download dari Docker Hub registry
  3. Setelah download selesai, Docker akan create dan jalanin container baru
  4. Container akan eksekusi program yang udah ada di dalam image
  5. 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

Terminal: docker images
Terminal: 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

Terminal: docker container history
Terminal: docker container history

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

Terminal: docker ubuntu container
Terminal: docker ubuntu container

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

Terminal: docker pull
Terminal: docker pull

Lihat semua images:

docker images

Terminal: docker images
Terminal: docker images

Hapus image:

docker rmi nginx:latest

Terminal: docker hapus image
Terminal: docker hapus image

Cari image di Docker Hub:

docker search mysql

Terminal: docker cari image
Terminal: docker cari image

Container Management Commands:

Jalanin container di background:

docker run -d nginx:latest

Lihat running containers:

docker ps

Terminal: list running containers
Terminal: list running containers

Lihat semua containers (running + stopped):

docker ps -a

Terminal: list semua container
Terminal: list semua container

Stop container:

docker stop container_id_atau_name

Terminal: docker stop container
Terminal: docker stop container

Start container yang udah stop:

docker start container_id_atau_name

Terminal: docker start container
Terminal: docker start container

Restart container:

docker restart container_id_atau_name

Terminal: docer restart container
Terminal: docer restart container

Hapus container:

docker rm container_id_atau_name

Terminal: docker remove container
Terminal: docker remove container

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

Terminal: docker run mysql
Terminal: docker run mysql

Jalanin PostgreSQL:

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

Terminal: docker run postgres
Terminal: docker run postgres

Jalanin Redis cache:

docker run -d --name redis_cache -p 6379:6379 redis:latest

Terminal: docker run redis
Terminal: docker run redis

Jalanin Nginx web server:

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

Terminal: docker run nginx
Terminal: docker run nginx

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

Terminal: docker logs
Terminal: docker logs

System Information Commands:

Lihat info Docker system:

docker info

Lihat resource usage:

docker stats

Terminal: docker stats
Terminal: docker stats

Cleanup unused resources:

docker system prune

Terminal: docker prune
Terminal: docker 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

Terminal: docker compose version
Terminal: 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

Terminal: buat direkori
Terminal: buat direkori

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

Terminal: docker compose
Terminal: docker compose

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:8080 buat lihat PHP info
PHP Web
PHP Web
  • Akses http://localhost:8081 buat masuk phpMyAdmin
PHPMyAdmin
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!