- 1 1. Pendahuluan
- 2 2. Struktur Dasar Dockerfile
- 3 3. Praktik: Membuat Dockerfile Berbasis Ubuntu
- 4 4. Membangun & Mengecek Docker Image
- 5 5. Penerapan: Membangun Lingkungan Python
- 6 6. Masalah Umum & Cara Mengatasinya
- 7 7. Ringkasan
- 8 8. FAQ (Pertanyaan yang Sering Diajukan)
- 8.1 Q1. Versi Ubuntu apa yang sebaiknya dipilih untuk Dockerfile?
- 8.2 Q2. Mengapa muncul pesan “package not found” saat menggunakan apt-get install?
- 8.3 Q3. Bagaimana cara mengatur variabel lingkungan di Dockerfile?
- 8.4 Q4. Apa perbedaan antara CMD dan ENTRYPOINT pada Dockerfile?
- 8.5 Q5. Mengapa perubahan Dockerfile tidak terlihat saat build?
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:
Perintah | Penjelasan |
---|---|
FROM | Menentukan image Docker dasar. Contoh: FROM ubuntu:24.04 |
RUN | Menjalankan perintah shell, biasanya untuk instalasi paket |
COPY | Menyalin file lokal ke dalam image |
ADD | Mirip COPY, tapi bisa mengunduh file dari URL atau mengekstrak arsip |
WORKDIR | Menentukan direktori kerja |
ENV | Mengatur variabel lingkungan |
CMD | Mendefinisikan perintah default saat container dijalankan (dapat di-overwrite) |
ENTRYPOINT | Mirip 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 APIvim
: Editor teks sederhanagit
: Sistem version controlbuild-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, misalmy-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
atauvenv
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
sebeluminstall
:
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
atauENTRYPOINT
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
danENTRYPOINT
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 denganapt-get
, disertai penghapusan cache dan instalasi non-interaktif. - Membangun environment untuk Python dan kebutuhan praktis lainnya
Gunakanpyenv
,pip
, danrequirements.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:
Poin | CMD | ENTRYPOINT |
---|---|---|
Bisa di-overwrite? | Bisa diubah dengan perintah saat docker run | Tidak mudah diubah, biasanya perintah tetap |
Tujuan | Memberikan default command | Menetapkan 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.