Panduan Lengkap Membuat Dockerfile Ubuntu: Cara Membangun Environment Pengembangan Otomatis di Docker

目次

1. Pendahuluan

Apa itu Docker dan Dockerfile?

Dalam beberapa tahun terakhir, Docker telah berkembang pesat sebagai solusi efisien untuk menyiapkan lingkungan pengembangan dan melakukan deployment aplikasi. Docker memungkinkan aplikasi dan dependensinya dikemas dalam satu “container”, sehingga bisa dijalankan di mana saja dengan lingkungan yang konsisten.

Untuk membangun container Docker ini, diperlukan sebuah “blueprint” yang disebut Dockerfile. Dockerfile adalah file teks yang berisi instruksi seperti menentukan image OS dasar, software yang akan diinstal, dan pengaturan variabel lingkungan. Dengan file ini, developer dapat membangun lingkungan yang sudah dikustomisasi secara otomatis.

Mengapa menggunakan Ubuntu sebagai basis?

Saat membuat Dockerfile, Anda harus menentukan image OS dasar terlebih dahulu. Salah satu yang paling populer adalah Ubuntu. Ubuntu adalah distribusi Linux berbasis Debian yang terkenal karena kemudahan penggunaan dan koleksi paketnya yang lengkap, memungkinkan pengaturan lingkungan yang fleksibel.

Dockerfile berbasis Ubuntu menawarkan keuntungan berikut:

  • Banyak dokumentasi resmi dan komunitas yang tersedia, sehingga mudah dipelajari
  • Banyak paket dan tool dapat diinstal dengan mudah melalui APT
  • Image minimalis dan ringan seperti ubuntu:20.04, ubuntu:24.04 tersedia secara resmi

Tujuan dan Pembaca Artikel Ini

Artikel ini membahas kata kunci Dockerfile Ubuntu dan akan menjelaskan cara membuat Dockerfile berbasis Ubuntu dengan penjelasan yang mudah dipahami pemula.

Secara khusus, artikel akan membahas struktur dasar Dockerfile, langkah membuat lingkungan Ubuntu, contoh setup aplikasi seperti Python, serta solusi untuk error yang sering terjadi.

Konten ini cocok untuk Anda yang:

  • Ingin membuat environment pertama kali dengan Dockerfile
  • Ingin mereplikasi lingkungan pengembangan berbasis Ubuntu dengan tingkat konsistensi tinggi
  • Ingin memahami solusi troubleshooting secara menyeluruh

2. Struktur Dasar Dockerfile

Apa itu Dockerfile? Memahami Fungsinya

Dockerfile adalah seperti resep untuk membuat image Docker. File ini mendefinisikan OS dasar yang digunakan, software yang diinstal, dan pengaturan konfigurasi secara terstruktur.

Berdasarkan file ini, Anda dapat menjalankan perintah docker build untuk membuat lingkungan pengembangan atau eksekusi aplikasi dengan tingkat reprodusibilitas tinggi.

Keuntungan menggunakan Dockerfile:

  • Otomatisasi setup environment (tidak perlu setup manual berulang kali)
  • Menghilangkan perbedaan environment antar developer
  • Mudah diintegrasikan ke pipeline CI/CD

Perintah (Directive) Dasar pada Dockerfile

Dockerfile memiliki beberapa perintah penting. Berikut adalah yang paling sering digunakan, dan akan membentuk dasar Dockerfile Ubuntu Anda:

PerintahPenjelasan
FROMMenentukan image Docker dasar. Contoh: FROM ubuntu:24.04
RUNMenjalankan perintah shell, biasanya untuk instalasi paket
COPYMenyalin file lokal ke dalam image
ADDMirip COPY, tapi bisa mengunduh file dari URL atau mengekstrak arsip
WORKDIRMenentukan direktori kerja
ENVMengatur variabel lingkungan
CMDMendefinisikan perintah default saat container dijalankan (dapat di-overwrite)
ENTRYPOINTMirip CMD, tapi selalu dijalankan sebagai perintah utama

Contoh Minimal Dockerfile Berbasis Ubuntu

Berikut contoh Dockerfile dasar dengan Ubuntu sebagai basis:

FROM ubuntu:24.04

RUN apt-get update && apt-get install -y \
    curl \
    vim

CMD ["/bin/bash"]

Dockerfile ini memakai Ubuntu 24.04 sebagai basis, menginstal dua utilitas (curl dan vim), lalu menjalankan shell bash.

Tentang Pemilihan Tag Ubuntu

Image Ubuntu resmi tersedia di Docker Hub. Anda bisa menggunakan ubuntu:latest untuk versi terbaru, tetapi disarankan untuk mengunci versi tertentu demi stabilitas.

Contoh:

  • ubuntu:22.04 (LTS: versi dukungan jangka panjang, stabilitas tinggi)
  • ubuntu:24.04 (LTS terbaru, fitur lebih baru)

Pilih berdasarkan prioritas: stabilitas atau fitur terbaru.

3. Praktik: Membuat Dockerfile Berbasis Ubuntu

Menginstal Paket yang Diperlukan pada Ubuntu

Saat membangun lingkungan Ubuntu menggunakan Dockerfile, biasanya Anda perlu menginstal paket tambahan. Berikut utilitas yang sering digunakan untuk setup environment pengembangan:

  • curl: Mengambil file atau mengecek API
  • vim: Editor teks sederhana
  • git: Sistem version control
  • build-essential: Kumpulan tool dasar untuk kompilasi C/C++

Untuk menginstal paket-paket ini di Dockerfile, gunakan perintah RUN:

FROM ubuntu:24.04

RUN apt-get update && apt-get install -y \
    curl \
    vim \
    git \
    build-essential

Selalu jalankan apt-get update terlebih dahulu untuk mendapatkan daftar paket terbaru sebelum instalasi.

Mengatur Instalasi Non-Interaktif

Pada Ubuntu, terkadang apt-get install membutuhkan input pengguna. Namun, proses build Docker tidak interaktif. Oleh karena itu, disarankan mengatur mode non-interaktif dengan variabel lingkungan berikut:

ENV DEBIAN_FRONTEND=noninteractive

Dengan cara ini, instalasi paket berjalan lancar tanpa prompt untuk pengaturan seperti “locale”.

Menghapus Cache yang Tidak Diperlukan untuk Menghemat Ukuran

APT akan menyimpan file cache yang dapat memperbesar ukuran image. Untuk memperkecil image, hapus cache setelah instalasi:

RUN apt-get update && apt-get install -y \
    curl \
    vim \
    && rm -rf /var/lib/apt/lists/*

Menggabungkan beberapa perintah dalam satu baris RUN juga mencegah bertambahnya layer yang tidak perlu.

Best Practice: Menulis Dockerfile yang Baik

Di lingkungan pengembangan nyata, berikut adalah beberapa praktik terbaik penulisan Dockerfile:

  • Gabungkan perintah RUN sebisa mungkin untuk mengurangi jumlah layer
  • Gunakan ENV untuk mendefinisikan versi atau konfigurasi secara eksplisit
  • Berikan komentar untuk menjelaskan tujuan langkah tertentu
  • Gunakan rm atau --no-install-recommends agar tidak ada file tak perlu yang tertinggal

Contoh:

RUN apt-get update && apt-get install -y --no-install-recommends \
    curl \
    git \
    && rm -rf /var/lib/apt/lists/*

Dengan cara ini, Anda dapat membuat Dockerfile yang lebih ringan dan mudah dirawat.

4. Membangun & Mengecek Docker Image

Membangun Docker Image dari Dockerfile

Setelah menulis Dockerfile, langkah berikutnya adalah membangun Docker image menggunakan perintah docker build di direktori tempat Dockerfile berada:

docker build -t my-ubuntu-image .
  • Opsi -t memberi nama/tag pada image, misal my-ubuntu-image
  • . berarti build dari direktori saat ini

Perintah ini akan mengeksekusi instruksi pada Dockerfile secara berurutan untuk membangun image baru.

Mengecek Docker Image yang Sudah Dibuat

Setelah image dibuat, Anda bisa cek dengan perintah berikut:

docker images

Ini akan menampilkan daftar image yang tersedia di lokal, berikut informasi seperti:

  • REPOSITORY (nama image)
  • TAG (versi/tag)
  • IMAGE ID (identifikasi unik)
  • CREATED (waktu dibuat)
  • SIZE (ukuran)

Contoh:

REPOSITORY        TAG       IMAGE ID       CREATED          SIZE
my-ubuntu-image   latest    abcd1234abcd   5 minutes ago    189MB

Dengan ini, Anda bisa memastikan image berhasil dibuat dan terdaftar.

Menjalankan Container & Mengecek Fungsionalitas

Untuk memastikan image berjalan dengan benar, jalankan container menggunakan image yang dibuat:

docker run -it my-ubuntu-image
  • Opsi -it menjalankan container dalam mode interaktif dengan terminal
  • Jika berhasil, Anda akan masuk ke bash di dalam environment Ubuntu container

Jalankan perintah berikut di dalam container untuk cek apakah tools sudah terinstal dengan baik:

curl --version
vim --version

Jika tidak ada masalah, berarti Dockerfile sudah benar.

Membersihkan Image dan Container yang Tidak Diperlukan

Jika Anda sering build dan eksperimen, akan ada banyak image atau container yang tidak terpakai. Bersihkan secara berkala dengan perintah berikut:

  • Menghapus container yang sudah berhenti:
docker container prune
  • Menghapus image yang tidak terpakai:
docker image prune
  • Menghapus semua data tidak terpakai (hati-hati!):
docker system prune

Ini membantu menghemat storage dan mencegah masalah ke depannya.

5. Penerapan: Membangun Lingkungan Python

Menambahkan Python ke Dockerfile Berbasis Ubuntu

Saat membangun environment Ubuntu dengan Dockerfile, Anda bisa menambahkan dukungan Python untuk berbagai kebutuhan seperti pengembangan, testing, maupun machine learning. Meskipun Ubuntu biasanya sudah menyertakan Python, sebaiknya instalasi dilakukan secara eksplisit agar versi dan dependensi dapat dikontrol dengan baik.

Cara Instalasi Python Menggunakan apt

Cara termudah adalah menginstal Python menggunakan APT package manager. Berikut contoh penulisannya di Dockerfile:

FROM ubuntu:24.04

RUN apt-get update && apt-get install -y \
    python3 \
    python3-pip \
    && rm -rf /var/lib/apt/lists/*

Metode ini menginstal Python versi stabil yang tersedia di Ubuntu (biasanya Python 3.10 atau 3.12) dan pip untuk manajemen paket Python.

Mengelola Versi Python dengan pyenv

Jika Anda ingin menggunakan versi Python tertentu atau butuh beberapa versi, pyenv adalah solusi yang fleksibel.

Berikut contoh instalasi pyenv dan Python 3.11.6 dalam Dockerfile:

FROM ubuntu:24.04

ENV DEBIAN_FRONTEND=noninteractive

RUN apt-get update && apt-get install -y \
    git \
    curl \
    make \
    build-essential \
    libssl-dev \
    zlib1g-dev \
    libbz2-dev \
    libreadline-dev \
    libsqlite3-dev \
    wget \
    llvm \
    libncurses5-dev \
    libncursesw5-dev \
    xz-utils \
    tk-dev \
    libffi-dev \
    liblzma-dev \
    && rm -rf /var/lib/apt/lists/*

# Instalasi pyenv
RUN git clone https://github.com/pyenv/pyenv.git ~/.pyenv

ENV PYENV_ROOT="$HOME/.pyenv"
ENV PATH="$PYENV_ROOT/bin:$PATH"

RUN echo 'eval "$(pyenv init --path)"' >> ~/.bashrc

# Instalasi Python versi tertentu
RUN pyenv install 3.11.6 && pyenv global 3.11.6

Cara ini memberikan kontrol penuh pada versi Python yang digunakan di environment Anda.

Manajemen Paket dengan requirements.txt

Untuk proyek nyata, biasanya banyak library Python yang dibutuhkan. Untuk itu, gunakan requirements.txt agar instalasi dependensi lebih mudah dan reproducible.

Buat file requirements.txt di root project Anda, misalnya:

flask==2.3.2
requests>=2.25.1
pandas

Kemudian tambahkan instruksi berikut ke Dockerfile:

COPY requirements.txt /app/requirements.txt
WORKDIR /app

RUN pip install --no-cache-dir -r requirements.txt

Dengan cara ini, library yang dibutuhkan akan terinstal otomatis saat membangun image Docker.

Best Practice

  • Jika menggunakan Python, sebaiknya gunakan virtualenv atau venv untuk menghindari konflik dependensi
  • Gunakan --no-cache-dir saat install paket Python agar image tetap ringan
  • Lakukan pip install --upgrade pip sebelum instalasi library untuk menghindari error

6. Masalah Umum & Cara Mengatasinya

Error Permission (Izin)

Contoh:

Permission denied

Error ini biasanya muncul jika file yang disalin tidak memiliki izin eksekusi, atau pemilik file/user kurang tepat.

Solusi:

  • Jadikan file executable:
  RUN chmod +x script.sh
  • Ganti user atau group file jika perlu:
  RUN chown root:root /path/to/file

Paket Tidak Ditemukan / Tidak Bisa Diinstal

Contoh:

E: Unable to locate package xxx

Error ini biasanya terjadi jika apt-get update tidak dijalankan sebelumnya atau nama paket salah.

Solusi:

  • Selalu jalankan apt-get update sebelum install:
  RUN apt-get update && apt-get install -y curl
  • Periksa kembali nama paket dan pastikan tidak ada typo

Error Jaringan (Network)

Contoh:

Temporary failure resolving 'deb.debian.org'

Error ini terjadi jika ada masalah DNS saat proses build.

Solusi:

  • Restart Docker daemon, kadang bisa memperbaiki:
  sudo systemctl restart docker
  • Cek atau tambahkan pengaturan DNS pada /etc/docker/daemon.json:
  {
    "dns": ["8.8.8.8", "8.8.4.4"]
  }

Build Masih Menggunakan Cache Lama

Docker memanfaatkan cache untuk mempercepat build, namun kadang bisa menyebabkan perubahan pada Dockerfile tidak terdeteksi.

Solusi:

  • Build ulang tanpa cache:
  docker build --no-cache -t my-image .

Perintah pada CMD/ENTRYPOINT Tidak Jalan atau Container Langsung Keluar

Penyebab:

  • Perintah pada CMD atau ENTRYPOINT error
  • Jika CMD diisi ["/bin/bash"] tapi tidak dijalankan secara interaktif, container bisa langsung exit

Solusi:

  • Debug container dengan menjalankan bash secara interaktif:
  docker run -it my-image /bin/bash
  • Pahami perbedaan dan penggunaan CMD dan ENTRYPOINT sesuai kebutuhan

Dengan pengalaman menghadapi masalah-masalah ini, kemampuan Anda dalam menulis Dockerfile akan semakin baik. Baca error message dengan teliti dan analisa pada perintah/layer mana terjadi masalah.

7. Ringkasan

Poin Penting Membuat Dockerfile Berbasis Ubuntu

Pada artikel ini, kita telah membahas cara membangun environment Ubuntu menggunakan Dockerfile mulai dari dasar hingga penerapan. Berikut adalah rangkuman poin penting yang perlu diingat:

  • Pahami struktur dasar Dockerfile
    FROM, RUN, CMD, ENV dan perintah lain bisa dikombinasikan untuk mengotomatisasi setup environment.
  • Ubuntu adalah image dasar yang stabil dan fleksibel
    Paket lengkap, komunitas besar, serta dukungan LTS menjadikan Ubuntu fondasi yang baik untuk environment pengembangan.
  • Manajemen paket yang praktis
    Instalasi tools dan library dapat dilakukan dengan apt-get, disertai penghapusan cache dan instalasi non-interaktif.
  • Membangun environment untuk Python dan kebutuhan praktis lainnya
    Gunakan pyenv, pip, dan requirements.txt agar setup environment dapat direproduksi dengan mudah.
  • Kemampuan troubleshooting meningkatkan stabilitas dan efisiensi
    Pemahaman terhadap masalah umum seperti permission, jaringan, atau cache Docker akan mempercepat proses pengembangan.

Langkah Berikutnya untuk Belajar Dockerfile

Setelah menguasai Dockerfile, Anda dapat memperluas pemahaman ke berbagai topik berikut:

  • Docker Compose untuk mengelola beberapa container secara bersamaan
  • Integrasi dengan tool CI/CD seperti GitHub Actions, GitLab CI
  • Orkestrasi container menggunakan Kubernetes atau tool serupa

Dokumentasi & Referensi Resmi

8. FAQ (Pertanyaan yang Sering Diajukan)

Q1. Versi Ubuntu apa yang sebaiknya dipilih untuk Dockerfile?

A1. Jika Anda mengutamakan stabilitas dan dukungan jangka panjang, gunakan versi LTS (Long Term Support) seperti ubuntu:22.04 atau ubuntu:20.04. Versi ini didukung hingga 5 tahun dan sangat umum digunakan di lingkungan profesional. Jika butuh fitur terbaru, Anda bisa coba ubuntu:24.04, tapi sebaiknya dites dulu di environment Anda.

Q2. Mengapa muncul pesan “package not found” saat menggunakan apt-get install?

A2. Biasanya ini terjadi karena apt-get update belum dijalankan sebelum install, sehingga daftar paket belum ter-update. Pastikan perintah update dijalankan sebelum install. Selain itu, cek apakah nama paket sudah benar dan sesuai dengan versi Ubuntu yang dipakai.

Contoh penulisan yang benar:

RUN apt-get update && apt-get install -y curl

Perhatikan juga penamaan paket — gunakan python3 bukan python untuk versi Python 3.

Q3. Bagaimana cara mengatur variabel lingkungan di Dockerfile?

A3. Gunakan perintah ENV di Dockerfile untuk mengatur environment variable yang berlaku saat build dan saat container berjalan.

Contoh:

ENV DEBIAN_FRONTEND=noninteractive

Variabel ini berguna untuk menghindari prompt interaktif saat instalasi paket.

Q4. Apa perbedaan antara CMD dan ENTRYPOINT pada Dockerfile?

A4. Keduanya digunakan untuk menentukan perintah yang dijalankan saat container dijalankan, namun perilakunya berbeda:

PoinCMDENTRYPOINT
Bisa di-overwrite?Bisa diubah dengan perintah saat docker runTidak mudah diubah, biasanya perintah tetap
TujuanMemberikan default commandMenetapkan perintah utama yang selalu dijalankan

Contoh:

CMD ["python3", "app.py"]
# vs
ENTRYPOINT ["python3"]
CMD ["app.py"]

Dengan kombinasi kedua baris terakhir, Anda bisa menjalankan perintah berbeda dengan menambah argumen saat menjalankan container.

Q5. Mengapa perubahan Dockerfile tidak terlihat saat build?

A5. Ini bisa terjadi karena Docker menggunakan cache layer build sebelumnya. Untuk memastikan perubahan diterapkan, lakukan build dengan opsi --no-cache:

docker build --no-cache -t my-image .

Dengan cara ini, semua instruksi di Dockerfile akan dijalankan dari awal tanpa cache lama.

年収訴求