Belajar Docker Bagian 4
Eko Susilo Harjo September 27, 2024

Apa itu Dockerfile?
Dockerfile adalah file teks sederhana yang berisi instruksi-instruksi untuk membangun Docker Image. Bayangkan Dockerfile sebagai resep yang menjelaskan bahan-bahan dan langkah-langkah untuk membuat sebuah aplikasi berjalan dalam container. Dengan Dockerfile, Anda bisa mengotomatisasi proses pembuatan image dan memastikan image yang dibuat konsisten di berbagai lingkungan.
Misalnya, jika Anda ingin membuat image untuk aplikasi Node.js, Anda dapat menentukan versi Node.js yang diinginkan, dependensi yang harus diinstal, serta perintah apa yang harus dijalankan untuk memulai aplikasi.
Dasar-dasar Penulisan Dockerfile
Menulis Dockerfile cukup mudah jika Anda memahami perintah dasar yang tersedia. Berikut beberapa perintah paling umum dalam Dockerfile:
- FROM
PerintahFROM
menentukan base image yang digunakan untuk membangun Docker Image. Base image ini bisa berupa sistem operasi seperti Ubuntu atau image yang berisi aplikasi seperti Node.js.ContohFROM node:14
Artinya, image yang akan dibuat berbasis Node.js versi 14. - WORKDIR
Perintah ini mengatur direktori kerja dalam container, di mana semua perintah berikutnya akan dieksekusi.ContohWORKDIR /app
Ini berarti direktori/app
akan menjadi direktori kerja di dalam container. - COPY
Perintah ini digunakan untuk menyalin file atau folder dari sistem lokal ke image yang sedang dibangun.Contoh:COPY . .
Ini akan menyalin semua file di direktori proyek ke dalam container. - RUN
PerintahRUN
digunakan untuk menjalankan perintah di dalam image saat proses build. Misalnya, Anda bisa menginstal dependensi menggunakan perintah ini.Contoh:RUN npm install
Ini akan menjalankan perintahnpm install
untuk menginstal semua dependensi yang diperlukan. - CMD
Perintah ini menentukan perintah default yang akan dijalankan saat container dijalankan. Contoh:CMD ["npm", "start"]
Ini akan menjalankannpm start
saat container dijalankan, yang biasanya akan memulai aplikasi Node.js.
Contoh Dockerfile Sederhana
Berikut adalah contoh Dockerfile untuk aplikasi Node.js sederhana:
# Menggunakan base image Node.js versi 14
FROM node:14
# Mengatur direktori kerja
WORKDIR /app
# Menyalin file aplikasi ke dalam container
COPY . .
# Menginstal dependensi aplikasi
RUN npm install
# Menentukan perintah yang dijalankan saat container berjalan
CMD ["npm", "start"]
Dengan Dockerfile ini, Docker akan membuat image yang siap digunakan untuk menjalankan aplikasi Node.js.
Multi-stage Builds untuk Optimalisasi Image
Saat membangun image, ukuran image yang besar sering menjadi masalah. Salah satu solusi untuk ini adalah menggunakan multi-stage builds. Dengan multi-stage builds, Anda bisa memisahkan proses build dan runtime, sehingga image yang dihasilkan lebih ringan karena hanya berisi hal-hal yang dibutuhkan untuk menjalankan aplikasi.
Contoh Multi-stage Build
Misalkan Anda memiliki aplikasi Go, di mana proses build bisa memakan banyak ruang karena membutuhkan tools development yang tidak diperlukan saat aplikasi dijalankan. Dengan multi-stage build, Anda bisa membangun aplikasi di satu stage, kemudian menjalankan aplikasi di stage berikutnya dengan image yang lebih minimal.
Berikut contoh Dockerfile dengan multi-stage build:
# Stage 1: Build stage
FROM golang:1.16 AS builder
# Mengatur direktori kerja
WORKDIR /app
# Menyalin kode aplikasi
COPY . .
# Membuild aplikasi Go
RUN go build -o myapp
# Stage 2: Runtime stage
FROM alpine:latest
# Menyalin aplikasi dari stage build
COPY --from=builder /app/myapp /app/myapp
# Menjalankan aplikasi
CMD ["/app/myapp"]
Pada contoh di atas, tahap pertama (builder
) digunakan untuk membangun aplikasi Go. Tahap kedua hanya berisi file binary yang dihasilkan dari tahap pertama, yang kemudian dijalankan dengan menggunakan image Alpine, sebuah image Linux yang sangat ringan.
Keuntungan dari multi-stage build ini adalah image akhir jauh lebih kecil, karena hanya berisi file binary aplikasi tanpa semua tool development yang diperlukan saat proses build.
Best Practices dalam Membuat Dockerfile
Agar Dockerfile lebih efisien dan aman, ada beberapa best practices yang sebaiknya Anda terapkan:
- Gunakan Base Image yang Ringan
Pilih base image yang ringan seperti Alpine. Ini membantu mengurangi ukuran image secara signifikan.Contoh:FROM node:14-alpine
- Hindari Penggunaan
latest
untuk Base Image
Sebaiknya hindari penggunaan taglatest
karena perubahan pada base image di masa depan bisa menyebabkan inkonsistensi atau bug yang tidak terduga. Selalu gunakan versi yang spesifik.Contoh:FROM node:14
- Gunakan
.dockerignore
Sama seperti.gitignore
, file.dockerignore
digunakan untuk mengecualikan file atau folder yang tidak perlu saat membangun image, seperti foldernode_modules
atau file konfigurasi lokal.Contoh.dockerignore
:node_modules .env
- Kompresi Layer dengan Menggabungkan
RUN
Commands
Setiap perintahRUN
dalam Dockerfile akan menambahkan layer baru ke image. Untuk mengurangi jumlah layer dan mengoptimalkan ukuran image, Anda bisa menggabungkan beberapa perintahRUN
menjadi satu. Contoh:RUN apt-get update && apt-get install -y \ curl \ git \ && rm -rf /var/lib/apt/lists/*
- Selalu Bersihkan Cache
Saat menggunakan paket manager sepertiapt-get
, selalu bersihkan cache di akhir untuk mengurangi ukuran image.Contoh:RUN apt-get update && apt-get install -y \ curl \ && rm -rf /var/lib/apt/lists/*
- Gunakan Multi-stage Builds
Seperti yang telah dijelaskan sebelumnya, multi-stage builds adalah cara yang sangat efektif untuk mengurangi ukuran image dengan hanya menyertakan hal-hal yang dibutuhkan untuk runtime.
Kesimpulan
Membuat Dockerfile adalah keterampilan penting bagi setiap pengembang yang ingin mengoptimalkan cara aplikasi mereka di-deploy menggunakan Docker. Dengan memahami dasar-dasar penulisan Dockerfile, menggunakan multi-stage builds, dan menerapkan best practices, Anda bisa membangun Docker Image yang lebih efisien, aman, dan mudah untuk dipelihara.
Dockerfile yang dirancang dengan baik tidak hanya membuat proses build lebih cepat, tetapi juga menghasilkan image yang lebih kecil dan cepat untuk di-deploy di berbagai lingkungan, baik itu di server lokal atau cloud.
Discover more from teknologi now
Subscribe to get the latest posts sent to your email.