Day 81 Prakerin Di Excellent ~ Dockerfile

 Hari ke-81 PKL: Dockerfile

Halo semuanya! Setelah kemarin kita membahas tentang perintah dasar Docker, kini kita akan melanjutkan dengan salah satu aspek penting dalam Docker: Dockerfile. Jika kalian sudah mulai menggunakan Docker, pasti kalian akan sering bertemu dengan Dockerfile, terutama saat membangun custom image untuk aplikasi kalian. Yuk, kita bahas lebih dalam tentang apa itu Dockerfile dan bagaimana cara menggunakannya!

Picture by: Code With and Blog


Apa Itu Dockerfile?

Dockerfile adalah sebuah file teks yang berisi serangkaian instruksi untuk membangun sebuah Docker image. Setiap instruksi dalam Dockerfile akan menghasilkan lapisan (layer) baru dalam image yang akan kita buat. Dockerfile adalah template yang menjelaskan langkah-langkah yang perlu diikuti untuk menciptakan environment aplikasi dalam kontainer. Dengan Dockerfile, kita bisa otomatisasi pembuatan image dan memastikan konsistensi di berbagai lingkungan.

Struktur Dockerfile

Dockerfile tersusun dari berbagai instruksi (commands) yang mengatur bagaimana image akan dibangun. Beberapa instruksi dasar dalam Dockerfile yang perlu kalian ketahui adalah:

  1. FROM: Menentukan base image yang akan digunakan untuk image yang kita buat.
  2. RUN: Menjalankan perintah di dalam container (seperti menginstal aplikasi).
  3. COPY / ADD: Menyalin file atau direktori ke dalam image.
  4. WORKDIR: Menentukan direktori kerja di dalam container.
  5. CMD: Perintah yang dijalankan saat container pertama kali dijalankan.
  6. EXPOSE: Menentukan port yang akan dibuka pada container.
  7. ENV: Menetapkan variabel lingkungan di dalam image.

Contoh Dockerfile Sederhana

Untuk lebih memahami Dockerfile, mari kita lihat contoh sederhana Dockerfile untuk membangun sebuah image yang menjalankan aplikasi web menggunakan Nginx:

dockerfile

# Menggunakan image Ubuntu sebagai base image FROM ubuntu:20.04 # Menentukan pengaturan label untuk image LABEL maintainer="developer@example.com" # Menambahkan perintah untuk memperbarui dan menginstal Nginx RUN apt-get update && apt-get install -y nginx # Menyalin file konfigurasi aplikasi ke dalam image COPY ./my-app.conf /etc/nginx/sites-available/my-app.conf # Menentukan port yang akan diekspos EXPOSE 80 # Menetapkan perintah untuk menjalankan Nginx di dalam container CMD ["nginx", "-g", "daemon off;"]

Penjelasan:

  1. FROM ubuntu:20.04: Menentukan bahwa image ini dibangun berdasarkan image ubuntu:20.04 sebagai dasar.
  2. LABEL maintainer="developer@example.com": Memberikan informasi tentang pembuat Dockerfile.
  3. RUN apt-get update && apt-get install -y nginx: Mengupdate package list dan menginstal Nginx pada image.
  4. COPY ./my-app.conf /etc/nginx/sites-available/my-app.conf: Menyalin file konfigurasi Nginx dari sistem lokal ke dalam image.
  5. EXPOSE 80: Memberitahu Docker bahwa kontainer ini akan menggunakan port 80.
  6. CMD ["nginx", "-g", "daemon off;"]: Menetapkan perintah yang dijalankan ketika kontainer dimulai, dalam hal ini menjalankan Nginx.

Menyusun Dockerfile dengan Baik

Ada beberapa tips yang dapat membantu kalian dalam menyusun Dockerfile dengan lebih efisien dan baik:

  1. Urutkan Instruksi dengan Bijak: Docker akan membuat layer baru untuk setiap instruksi di dalam Dockerfile. Oleh karena itu, urutkan instruksi yang sering berubah di bawah dan instruksi yang jarang berubah di atas. Misalnya, RUN apt-get update bisa dipasang lebih awal agar tidak terulang setiap kali ada perubahan kecil.

  2. Gunakan Multi-stage Builds: Jika kalian membutuhkan image yang lebih kecil dan efisien, kalian bisa menggunakan multi-stage builds. Ini memungkinkan untuk membangun aplikasi di satu stage, lalu menyalin hasil akhirnya ke stage lain yang lebih ringan.

    Contoh:

    # Stage 1: Build aplikasi FROM node:14 AS build WORKDIR /app COPY . . RUN npm install # Stage 2: Jalankan aplikasi menggunakan image ringan FROM nginx:alpine COPY --from=build /app /usr/share/nginx/html EXPOSE 80 CMD ["nginx", "-g", "daemon off;"]
  3. Minimalkan Jumlah Layer: Semakin banyak layer yang dibuat, semakin besar ukuran image yang dihasilkan. Cobalah untuk menggabungkan beberapa instruksi RUN jika memungkinkan, misalnya dengan menggunakan && untuk menggabungkan beberapa perintah dalam satu layer.

  4. Gunakan .dockerignore: Seperti .gitignore di Git, .dockerignore digunakan untuk mengecualikan file dan direktori tertentu yang tidak perlu dimasukkan dalam image. Misalnya file konfigurasi lokal atau cache yang tidak diperlukan untuk aplikasi.

    Contoh .dockerignore:

    node_modules .git Dockerfile

Membangun Image Menggunakan Dockerfile

Setelah memiliki Dockerfile, langkah selanjutnya adalah membangun image dari Dockerfile tersebut. Gunakan perintah docker build di direktori yang berisi Dockerfile kalian:

docker build -t my-app-image .

Perintah ini akan membaca Dockerfile yang ada di direktori saat ini (ditandai dengan .) dan membangun image dengan tag my-app-image.

Menjalankan Kontainer dari Docker Image

Setelah berhasil membangun image, kalian bisa menjalankan kontainer dari image tersebut dengan perintah:

docker run -d -p 8080:80 --name my-app-container my-app-image

Perintah ini akan menjalankan aplikasi dalam kontainer yang menggunakan port 80 di dalam kontainer dan memetakan port 8080 di host.

Penutup

Dockerfile adalah alat yang sangat kuat untuk membuat dan mengotomatiskan pembuatan image Docker. Dengan Dockerfile, kalian dapat memastikan bahwa aplikasi yang berjalan di kontainer akan konsisten di berbagai lingkungan. Semakin sering kalian menggunakan Docker, semakin terbiasa kalian dengan berbagai instruksi yang ada dalam Dockerfile.

Mungkin cukup sekian untuk pembahasan dockerfile berikut semoga bermanfaat! sampai jumpa di blog selanjutnya!

BABAI!

Komentar

Postingan Populer