- 1 1. Pengenalan
- 2 2. Struktur Dasar Dockerfile
- 3 3. Praktis: Membuat Dockerfile Berbasis Ubuntu
- 4 4. Membangun dan Memverifikasi Image Docker
- 5 5. Lanjutan: Membangun Lingkungan Python
- 6 6. Masalah Umum dan Pemecahan Masalah
- 7 7. Ringkasan
- 8 8. FAQ (Pertanyaan yang Sering Diajukan)
- 8.1 Q1. Versi Ubuntu mana yang harus saya pilih dalam Dockerfile?
- 8.2 Q2. Mengapa apt-get install melaporkan “package not found”?
- 8.3 Q3. Bagaimana cara saya mengatur variabel lingkungan di Dockerfile?
- 8.4 Q4. Apa perbedaan antara CMD dan ENTRYPOINT?
- 8.5 Q5. Mengapa perubahan Dockerfile saya tidak tercermin?
1. Pengenalan
Apa Itu Docker dan Dockerfile?
Dalam beberapa tahun terakhir, Docker dengan cepat mendapatkan popularitas sebagai cara efisien untuk menyederhanakan lingkungan pengembangan dan penerapan aplikasi. Docker mengemas aplikasi dan dependensinya ke dalam satu unit yang disebut “kontainer,” yang memungkinkan mereka berjalan secara konsisten di berbagai lingkungan.
Untuk membangun kontainer Docker ini, diperlukan cetak biru yang disebut Dockerfile. Dockerfile adalah file teks yang mendefinisikan gambar sistem operasi dasar, perangkat lunak yang diinstal, variabel lingkungan, dan detail konfigurasi lainnya. Pengembang dapat menggunakannya untuk secara otomatis membangun lingkungan yang disesuaikan.
Mengapa Menggunakan Ubuntu sebagai Gambar Dasar?
Saat membuat Dockerfile, langkah pertama adalah memilih gambar sistem operasi dasar. Di antara banyak opsi yang tersedia, Ubuntu adalah salah satu yang paling populer. Ubuntu adalah distribusi Linux berbasis Debian yang dikenal karena kemudahan penggunaannya dan pengaturan lingkungan yang fleksibel yang didukung oleh ekosistem paket yang luas.
Dockerfile berbasis Ubuntu menawarkan beberapa keuntungan:
- Dokumentasi resmi dan komunitas yang luas, menghasilkan kurva pembelajaran yang rendah
- Instalasi paket dan alat yang mudah menggunakan APT
- Gambar ringan dan minimal yang disediakan secara resmi (seperti
ubuntu:20.04danubuntu:24.04)
Tujuan Artikel Ini dan Target Audiens
Artikel ini berfokus pada kata kunci “Dockerfile Ubuntu” dan menjelaskan cara membuat Dockerfile berbasis Ubuntu dengan cara yang mudah dipahami oleh pemula.
Ini mencakup segalanya mulai dari struktur dasar Dockerfile hingga instruksi langkah demi langkah untuk membangun lingkungan Ubuntu, contoh pengaturan lingkungan aplikasi seperti Python, dan kesalahan umum beserta solusinya.
Artikel ini direkomendasikan untuk:
- Mereka yang ingin membangun lingkungan menggunakan Dockerfile untuk pertama kalinya
- Pengembang yang ingin membuat lingkungan pengembangan yang dapat direproduksi di Ubuntu
- Siapa saja yang ingin mendalami pemahaman mereka, termasuk teknik pemecahan masalah
2. Struktur Dasar Dockerfile
Apa Itu Dockerfile dan Apa Perannya?
Dockerfile seperti resep untuk membuat gambar Docker. Ini mendefinisikan sistem operasi dasar mana yang akan digunakan, perangkat lunak apa yang akan diinstal, dan bagaimana mengonfigurasi lingkungan.
Dengan menjalankan perintah docker build berdasarkan file ini, Anda dapat dengan mudah membuat lingkungan pengembangan dan runtime yang sangat dapat direproduksi.
Manfaat menggunakan Dockerfile:
- Pengaturan lingkungan otomatis (tidak perlu pengulangan manual)
- Menghilangkan inkonsistensi lingkungan dalam pengembangan tim
- Integrasi mudah ke dalam pipeline CI/CD
Instruksi Dockerfile yang Umum Digunakan
Dockerfile terdiri dari beberapa instruksi (direktif). Berikut adalah beberapa yang paling umum digunakan. Dengan menggabungkannya secara tepat, Anda dapat membangun Dockerfile berbasis Ubuntu.
| Instruction | Description |
|---|---|
FROM | Specifies the base Docker image (e.g., FROM ubuntu:24.04) |
RUN | Executes shell commands, typically for installing packages |
COPY | Copies local files into the image |
ADD | Similar to COPY, but also supports URLs and archive extraction |
WORKDIR | Sets the working directory |
ENV | Defines environment variables |
CMD | Defines the default command executed at container startup (can be overridden) |
ENTRYPOINT | Defines a command that is always executed at container startup |
Contoh Dockerfile Berbasis Ubuntu Minimal
Berikut adalah contoh sangat dasar dari Dockerfile yang menggunakan Ubuntu sebagai gambar dasar.
FROM ubuntu:24.04
RUN apt-get update && apt-get install -y \
curl \
vim
CMD ["/bin/bash"]
Dockerfile ini menggunakan Ubuntu 24.04 sebagai gambar dasar, menginstal utilitas curl dan vim, dan meluncurkan shell Bash saat kontainer dimulai.
Memilih Tag Ubuntu yang Tepat
Gambar Docker Ubuntu diterbitkan di repositori resmi Docker Hub. Meskipun menentukan ubuntu:latest akan menggunakan versi terbaru, disarankan untuk secara eksplisit memasangkan versi.
Misalnya:
ubuntu:22.04(LTS: Long-Term Support, berfokus pada stabilitas)ubuntu:24.04(LTS terbaru, berfokus pada fitur baru)
Pilih versi berdasarkan apakah stabilitas atau fitur baru menjadi prioritas Anda.
3. Praktis: Membuat Dockerfile Berbasis Ubuntu
Menginstal Paket yang Diperlukan di Lingkungan Ubuntu
Ketika membangun lingkungan Ubuntu menggunakan Dockerfile, sering kali diperlukan untuk menginstal paket tambahan. Misalnya, utilitas berikut biasanya digunakan saat menyiapkan lingkungan pengembangan:
curl: Untuk mengunduh file dan menguji APIvim: Editor teks ringangit: Sistem kontrol versibuild-essential: Alat penting untuk membangun program C/C++
Untuk menginstal paket‑paket ini dalam Dockerfile, gunakan instruksi RUN.
FROM ubuntu:24.04
RUN apt-get update && apt-get install -y \
curl \
vim \
git \
build-essential
Dengan menjalankan apt-get update terlebih dahulu, Anda memastikan bahwa daftar paket terbaru diambil sebelum instalasi.
Mengonfigurasi Instalasi Non‑Interaktif
Pada Ubuntu, apt-get install kadang‑kadang memerlukan masukan pengguna. Namun, operasi interaktif tidak memungkinkan selama proses build Docker. Untuk menghindarinya, disarankan menetapkan variabel lingkungan dan mengaktifkan mode non‑interaktif.
ENV DEBIAN_FRONTEND=noninteractive
Hal ini menekan prompt seperti pemilihan locale atau zona waktu dan memungkinkan instalasi berjalan lancar.
Mengurangi Ukuran Image dengan Menghapus Cache yang Tidak Diperlukan
Saat menggunakan APT, file sementara yang diunduh (cache) dapat tetap berada di dalam image, sehingga meningkatkan ukuran akhirnya. Anda dapat mengurangi ukuran image dengan menghapus cache seperti contoh di bawah ini:
RUN apt-get update && apt-get install -y \
curl \
vim \
&& rm -rf /var/lib/apt/lists/*
Menggabungkan beberapa perintah menjadi satu instruksi RUN juga membantu mencegah peningkatan lapisan image yang tidak perlu.
Praktik Terbaik Menulis Dockerfile
Dalam lingkungan pengembangan dunia nyata, praktik terbaik Dockerfile berikut banyak direkomendasikan:
- Gabungkan instruksi
RUNbila memungkinkan untuk mengurangi jumlah lapisan - Tentukan versi dan pengaturan secara eksplisit menggunakan
ENV - Gunakan komentar untuk menjelaskan tujuan setiap langkah dengan jelas
- Hindari meninggalkan file yang tidak diperlukan dengan menggunakan
rmdan--no-install-recommends
Contoh:
RUN apt-get update && apt-get install -y --no-install-recommends \
curl \
git \
&& rm -rf /var/lib/apt/lists/*
Pendekatan ini menghasilkan Dockerfile yang lebih ringan dan lebih mudah dipelihara.
4. Membangun dan Memverifikasi Image Docker
Membangun Image Docker dari Dockerfile
Setelah Dockerfile Anda siap, langkah selanjutnya adalah membangun image Docker. Hal ini dilakukan dengan perintah docker build. Jalankan perintah berikut di direktori yang berisi Dockerfile Anda:
docker build -t my-ubuntu-image .
- Opsi
-tmemberikan nama (tag) pada image. Pada contoh ini, image dinamaimy-ubuntu-image. - Titik (
.) mengacu pada direktori saat ini yang berisi Dockerfile.
Docker akan membaca instruksi‑instruksi dalam Dockerfile secara berurutan dan membangun image sesuai.
Memeriksa Image Docker yang Telah Dibangun
Setelah image berhasil dibangun, Anda dapat memverifikasinya dengan perintah berikut:
docker images
Perintah ini menampilkan daftar image Docker yang disimpan secara lokal, termasuk informasi berikut:
- REPOSITORY (nama image)
- TAG
- IMAGE ID (identifikasi unik)
- CREATED (tanggal pembuatan)
- SIZE
Contoh:
REPOSITORY TAG IMAGE ID CREATED SIZE
my-ubuntu-image latest abcd1234abcd 5 minutes ago 189MB
Ini mengonfirmasi bahwa image telah terdaftar dengan benar.
Menjalankan Kontainer Docker untuk Verifikasi
Untuk memastikan bahwa image yang dibuat berfungsi sebagaimana mestinya, jalankan kontainer Docker dengan perintah berikut:
docker run -it my-ubuntu-image
- Opsi
-itmeluncurkan sesi terminal interaktif. - Jika berhasil, prompt Bash akan muncul, menandakan Anda berada di dalam kontainer Ubuntu.
Di dalam kontainer, Anda dapat memverifikasi alat‑alat yang terinstal dengan perintah seperti:
curl --version
vim --version
Jika perintah-perintah ini berfungsi dengan benar, Dockerfile Anda dikonfigurasi dengan benar.
Membersihkan Gambar dan Kontainer yang Tidak Digunakan
Pembangunan berulang dan eksperimen mungkin meninggalkan gambar Docker dan kontainer yang tidak digunakan di sistem Anda. Disarankan untuk membersihkannya secara berkala menggunakan perintah berikut:
- Hapus kontainer yang berhenti:
docker container prune
- Hapus gambar yang tidak digunakan:
docker image prune
- Hapus semua data yang tidak digunakan (gunakan dengan hati-hati):
docker system prune
Operasi ini membantu menghemat ruang disk dan mencegah masalah potensial.
5. Lanjutan: Membangun Lingkungan Python
Mengaktifkan Python di Dockerfile Berbasis Ubuntu
Saat membangun lingkungan Ubuntu menggunakan Dockerfile, menambahkan lingkungan runtime Python memungkinkan berbagai kasus penggunaan, termasuk pengembangan, pengujian, dan pembelajaran mesin. Meskipun Python mungkin sudah terinstal secara default di Ubuntu, praktik umum adalah mengonfigurasinya secara eksplisit untuk pengelolaan versi dan paket yang lebih baik.
Menginstal Python Menggunakan APT
Pendekatan paling sederhana adalah menginstal Python menggunakan paket APT. Berikut adalah contoh:
FROM ubuntu:24.04
RUN apt-get update && apt-get install -y \
python3 \
python3-pip \
&& rm -rf /var/lib/apt/lists/*
Metode ini menyediakan versi Python sistem yang stabil (seperti Python 3.10 atau 3.12, tergantung pada rilis Ubuntu). Anda juga dapat menginstal paket Python tambahan menggunakan perintah pip.
Mengelola Versi Python dengan pyenv
Jika Anda memerlukan versi Python tertentu atau ingin beralih antar beberapa versi, menggunakan pyenv sangat direkomendasikan.
Contoh berikut menunjukkan cara menginstal Python 3.11.6 menggunakan pyenv di 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/*
# Install 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
# Install a specific Python version
RUN pyenv install 3.11.6 && pyenv global 3.11.6
Pengaturan ini menyediakan lingkungan Python yang fleksibel dan terkendali dengan baik.
Mengelola Paket dengan requirements.txt
Sebagian besar proyek dunia nyata memerlukan beberapa pustaka Python. Ketergantungan ini biasanya dikelola menggunakan file requirements.txt.
Pertama, buat file requirements.txt di root proyek Anda:
flask==2.3.2
requests>=2.25.1
pandas
Kemudian rujuk itu di Dockerfile Anda seperti berikut:
COPY requirements.txt /app/requirements.txt
WORKDIR /app
RUN pip install --no-cache-dir -r requirements.txt
Ini memungkinkan semua pustaka yang diperlukan diinstal sekaligus dan secara signifikan meningkatkan reproduktibilitas lingkungan.
Praktik Terbaik
- Saat menggunakan Python, membuat lingkungan virtual dengan
virtualenvatauvenvmembantu mencegah konflik ketergantungan. - Menggunakan opsi penekanan cache seperti
--no-cache-dirmengurangi ukuran gambar Docker. - Menjalankan
pip install --upgrade pipsebelum menginstal paket dapat membantu menghindari kesalahan instalasi.
6. Masalah Umum dan Pemecahan Masalah
Kesalahan Izin
Contoh:
Permission denied
Kesalahan ini terjadi ketika file yang disalin kekurangan izin eksekusi atau ketika kepemilikan file dan pengguna eksekusi dikonfigurasi salah.
Solusi:
- Buat file dapat dieksekusi:
RUN chmod +x script.sh
- Ubah kepemilikan file jika diperlukan:
RUN chown root:root /path/to/file
Paket Tidak Ditemukan atau Kegagalan Instalasi
Contoh:
E: Unable to locate package xxx
Kesalahan ini biasanya terjadi ketika apt-get update belum dijalankan atau ketika nama paket salah.
Solusi:
- Selalu jalankan
apt-get updatesebelum menginstal paket:RUN apt-get update && apt-get install -y curl
- Verifikasi nama paket dan periksa kesalahan pengetikan
Kesalahan yang Terkait dengan Jaringan
Contoh:
Temporary failure resolving 'deb.debian.org'
Kesalahan ini menunjukkan masalah resolusi DNS selama proses build.
Solusi:
- Memulai ulang daemon Docker dapat menyelesaikan masalah ini:
sudo systemctl restart docker
- Tinjau pengaturan DNS Docker dengan menambahkan server DNS di
/etc/docker/daemon.json:{ "dns": ["8.8.8.8", "8.8.4.4"] }
Build Menggunakan Cache yang Kedaluwarsa
Docker menggunakan caching berbasis lapisan untuk mempercepat build. Akibatnya, perubahan pada Dockerfile tidak selalu langsung tercermin.
Solusi:
- Bangun ulang tanpa cache:
docker build --no-cache -t my-image .
Kontainer Keluar Secara Instan atau Perintah Startup Tidak Dijalankan
Penyebab:
- Perintah yang ditentukan dalam
CMDatauENTRYPOINTmengandung kesalahan - Menggunakan
CMD ["/bin/bash"]tanpa mode interaktif menyebabkan keluar langsung
Solusi:
- Jalankan kontainer dalam mode debug:
docker run -it my-image /bin/bash
- Pahami perbedaan antara
CMDdanENTRYPOINTserta gunakan secara tepat
Dengan menghadapi dan menyelesaikan masalah-masalah ini, kemampuan desain Dockerfile Anda akan terus meningkat. Ketika terjadi kesalahan, bacalah pesan error dengan cermat dan identifikasi instruksi serta lapisan mana yang menyebabkan masalah.
7. Ringkasan
Poin Penting untuk Membuat Dockerfile Berbasis Ubuntu
Artikel ini memberikan penjelasan langkah demi langkah tentang cara membangun lingkungan Ubuntu menggunakan Dockerfile, mencakup topik dasar hingga lanjutan. Mari tinjau poin-poin utama:
- Memahami dasar-dasar Dockerfile adalah langkah pertama Instruksi seperti
FROM,RUN,CMD, danENVmemungkinkan pembuatan lingkungan secara otomatis. - Ubuntu adalah image dasar yang stabil dan fleksibel Ekosistem paket yang luas, basis pengguna yang besar, dan rilis LTS menjadikannya ideal untuk lingkungan pengembangan.
- Manajemen paket yang praktis memungkinkan instalasi alat dan pustaka yang diperlukan Penggunaan
apt-getyang tepat, pembersihan cache, dan instalasi non‑interaktif sangat penting. - Membangun lingkungan praktis seperti Python sepenuhnya didukung oleh Dockerfile Alat seperti
pyenv,pip, danrequirements.txtmemastikan setup yang dapat direproduksi. - Keterampilan pemecahan masalah secara langsung memengaruhi operasi yang stabil Memahami izin, jaringan, dan perilaku cache build secara signifikan meningkatkan produktivitas.
Langkah Selanjutnya dalam Pembelajaran Dockerfile
Setelah Anda nyaman menggunakan Dockerfile, Anda dapat memperluas keterampilan ke luar pengembangan, seperti pengujian dan penyebaran produksi. Pertimbangkan untuk mengeksplorasi topik berikut:
- Mengelola setup multi‑kontainer dengan Docker Compose
- Mengintegrasikan dengan alat CI/CD seperti GitHub Actions dan GitLab CI
- Bekerja dengan platform orkestrasi kontainer seperti Kubernetes
Dokumentasi Resmi dan Tautan Referensi
8. FAQ (Pertanyaan yang Sering Diajukan)
Q1. Versi Ubuntu mana yang harus saya pilih dalam Dockerfile?
A1. Dalam kebanyakan kasus, memilih rilis LTS (Long Term Support) disarankan untuk stabilitas dan pemeliharaan jangka panjang. Versi seperti ubuntu:22.04 dan ubuntu:20.04 banyak digunakan dan didukung selama lima tahun.
Jika Anda memerlukan paket atau versi bahasa terbaru, Anda dapat memilih rilis yang lebih baru seperti ubuntu:24.04, tetapi pastikan melakukan pengujian secara menyeluruh.
Q2. Mengapa apt-get install melaporkan “package not found”?
A2. Hal ini biasanya disebabkan oleh salah satu hal berikut:
- Daftar paket belum diperbarui – jalankan
apt-get updateterlebih dahulu. - Nama paket salah ketik atau tidak tersedia di repositori default.
- Repositori yang diperlukan belum di‑enable dalam
/etc/apt/sources.listatau file di/etc/apt/sources.list.d/.
Pastikan untuk memeriksa ejaan paket, memperbarui indeks paket, dan menambahkan repositori yang diperlukan sebelum mencoba menginstal kembali.
A2. Alasan paling umum adalah gagal menjalankan apt-get update sebelumnya. Tanpa memperbarui daftar paket, APT tidak dapat menemukan paket yang diminta.
Contoh yang benar:
RUN apt-get update && apt-get install -y curl
Juga pastikan bahwa nama paket benar dan tidak sudah usang (misalnya, gunakan python3 bukan python).
Q3. Bagaimana cara saya mengatur variabel lingkungan di Dockerfile?
A3. Gunakan instruksi ENV untuk mendefinisikan variabel lingkungan yang tersedia selama waktu build dan runtime kontainer.
Contoh:
ENV DEBIAN_FRONTEND=noninteractive
Ini biasanya digunakan untuk menekan prompt interaktif selama instalasi APT. Variabel lingkungan juga berguna untuk konfigurasi aplikasi dan kunci API.
Q4. Apa perbedaan antara CMD dan ENTRYPOINT?
A4. Keduanya menentukan perintah yang dieksekusi ketika kontainer dimulai, tetapi perilakunya berbeda.
| Item | CMD | ENTRYPOINT |
|---|---|---|
| Overridable | Can be overridden by docker run | Generally not overridden (treated as fixed command) |
| Use Case | Define a default command | Define a command that must always run |
Contoh:
CMD ["python3", "app.py"]
# vs
ENTRYPOINT ["python3"]
CMD ["app.py"]
Dalam kasus yang terakhir, Anda dapat meneruskan argumen menggunakan docker run my-image another_script.py.
Q5. Mengapa perubahan Dockerfile saya tidak tercermin?
A5. Docker menggunakan cache build, yang mungkin menyebabkan layer yang tidak berubah digunakan kembali bahkan setelah mengedit Dockerfile.
Solusi:
docker build --no-cache -t my-image .
Ini memaksa rebuild penuh dan memastikan semua perubahan diterapkan.


