Docker - Dockerfile: Panduan untuk Pemula

Hai teman-teman, para ahli Docker masa depan! Saya sangat gembira untuk menjadi panduan Anda dalam perjalanan menarik ini ke dunia Dockerfiles. Sebagai seseorang yang telah mengajar ilmu komputer selama tahun tahun, saya telah melihat banyak siswa yang terangsang saat mereka memahami kekuatan kontainerisasi. Jadi, mari kita roll up our sleeves dan masuk ke dalam!

Docker - Dockerfile

Apa Itu Dockerfile?

Sebelum kita mulai membangun, mari kita pahami apa yang kita kerjakan. Dockerfile adalah seperti resep untuk membuat image Docker. Seperti seorang koki mengikuti resep untuk membuat makanan lezat, Docker menggunakan Dockerfile untuk membuat image khusus. Image ini berisi semua yang aplikasi Anda butuhkan untuk berjalan, dikemas dalam sebuah kontainer portabel.

Petunjuk Penting yang digunakan dalam Dockerfile

Sekarang, mari kita lihat bahan utama dalam resep Dockerfile kami. Instruksi-instruksi ini adalah blok pembangun image kita.

Instruksi Deskripsi
FROM Menentukan image dasar
RUN Eksekusi perintah di lapisan baru
CMD Menyediakan default bagi kontainer yang dieksekusi
EXPOSE Informasikan Docker bahwa kontainer mendengarkan port jaringan tertentu
ENV Mengatur variabel lingkungan
ADD Menyalin file baru, direktori, atau URL file remote
COPY Menyalin file atau direktori baru
ENTRYPOINT Mengonfigurasi kontainer yang akan berjalan sebagai eksekutable
VOLUME Membuat titik kait untuk volume eksternal
USER Mengatur nama pengguna untuk perintah RUN / CMD / ENTRYPOINT berikutnya
WORKDIR Mengatur direktori kerja
ARG Menentukan variabel yang pengguna dapat lempar saat waktu build
ONBUILD Menambahkan instruksi pemicu saat image digunakan sebagai dasar untuk build lain

Mari kita rinci ini dengan beberapa contoh:

FROM

FROM ubuntu:20.04

Baris ini mengatakan kepada Docker untuk menggunakan image Ubuntu 20.04 sebagai titik awal. Itu seperti mengatakan, "Saya ingin membangun rumah saya di lahan khusus ini."

RUN

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

Perintah ini memperbarui daftar paket dan menginstal Python 3. Itu seperti pergi ke toko pernak-pernik dan membeli alat yang Anda butuhkan untuk rumah Anda.

CMD

CMD ["python3", "app.py"]

Ini menetapkan perintah default untuk dijalankan saat kontainer mulai. Itu seperti menyiapkan welkom mat di depan pintu rumah Anda.

Praktik Terbaik untuk Dockerfile

Sekarang kita tahu bahan-bahan, mari bicarakan bagaimana menggunakannya secara efektif:

  1. Keep it lean: Gunakan image dasar minimal jika memungkinkan. Alpine Linux adalah pilihan populer karena ukurannya kecil.

  2. Layer wisely: Gabungkan perintah RUN untuk mengurangi lapisan. Sebagai contoh:

RUN apt-get update && \
apt-get install -y python3 && \
apt-get clean
  1. Gunakan .dockerignore: Seperti .gitignore, file ini membantu Anda menghapus file yang tidak diperlukan dari konteks build Anda.

  2. Manfaatkan cache build: Urutkan instruksi Anda dari yang paling jarang berubah ke yang paling sering berubah untuk optimalkan waktu build.

  3. Gunakan tag spesifik: Bukan FROM ubuntu, gunakan FROM ubuntu:20.04 untuk memastikan konsistensi.

Dockerfile - Contoh

Mari kita gabungkan semua ini dengan aplikasi web Python sederhana:

# Gunakan runtime Python resmi sebagai image induk
FROM python:3.9-slim

# Set direktori kerja di kontainer
WORKDIR /app

# Salin isi direktori saat ini ke kontainer di /app
COPY . /app

# Instal paket yang diperlukan yang ditentukan di requirements.txt
RUN pip install --no-cache-dir -r requirements.txt

# Buat port 80 tersedia ke dunia luar dari kontainer ini
EXPOSE 80

# Tentukan variabel lingkungan
ENV NAME World

# Jalankan app.py saat kontainer dimulai
CMD ["python", "app.py"]

Dockerfile ini mengatur lingkungan Python, salin aplikasi kita ke kontainer, instal dependensi, ekspos port, set variabel lingkungan, dan tentukan perintah untuk menjalankan aplikasi kita.

Bagaimana Cara Kerjanya?

Saat Anda menjalankan docker build, Docker membaca Dockerfile baris per baris, menjalankan setiap instruksi secara berurutan. Setiap instruksi menciptakan lapisan baru di image. Lapisan ini disimpan di cache, yang berarti jika Anda membuat perubahan pada aplikasi Anda tetapi tidak pada Dockerfile, Docker dapat menggunakan lapisan yang belum berubah, mempercepat proses build.

Itu seperti membuat kue lapis. Setiap instruksi menambahkan lapisan baru, dan jika Anda tidak mengubah lapisan yang lebih rendah, Anda hanya perlu menambahkan lapisan baru di atasnya tanpa membuat kue lagi.

Kesimpulan

Selamat! Anda baru saja mengambil langkah pertama ke dunia Dockerfiles. Ingat, seperti setiap keterampilan, menguasai Dockerfiles memerlukan latihan. Jangan takut untuk mencoba dan membuat kesalahan - itu adalah bagaimana kita belajar!

Buatlanjutkan eksplorasi Anda, terus bangun, dan terutama, bersenang-senang dengan Docker! Ingat, setiap master pernah menjadi pemula. Selamat Dockering!

FAQ

Q: Bisakah saya menggunakan beberapa FROM instruksi dalam Dockerfile?

A: Ya, ini disebut build multi-stage. Itu berguna untuk membuat image final yang lebih kecil dengan meninggalkan dependensi build di belakang.

Q: Apa perbedaan antara CMD dan ENTRYPOINT?

A: CMD menyediakan argumen default yang dapat diubah, sedangkan ENTRYPOINT menentukan perintah utama kontainer yang sulit untuk diubah.

Q: Bagaimana saya dapat optimalkan Dockerfile saya untuk build yang lebih cepat?

A: Gunakan file .dockerignore, manfaatkan cache build dengan urutkan instruksi secara cerdas, dan gabungkan perintah RUN untuk mengurangi lapisan.

Q: Bisakah saya menggunakan variabel lingkungan dalam Dockerfile?

A: Tentu saja! Gunakan instruksi ENV untuk mengatur variabel lingkungan yang akan tersedia bagi aplikasi Anda saat runtime.

Terus eksplorasi, terus bangun, dan terutama, bersenang-senang dengan Docker! Ingat, setiap master pernah menjadi pemula. Selamat Dockering!

Credits: Image by storyset