Docker - Dockerfile: A Panduan Pemula

Hai daar, para ahli Docker masa depan! Saya begitu senang untuk menjadi panduan Anda dalam perjalanan menarik ini ke dunia Dockerfile. Sebagai seseorang yang telah mengajar ilmu komputer selama bertahun-tahun, saya telah melihat banyak siswa yang terangsang saat mereka memahami kekuatan kontainerisasi. Jadi, mari kita lipatkan lengan dan masuk ke dalam!

Docker - Dockerfile

Apa Itu Dockerfile?

Sebelum kita mulai membangun, mari kita pahami apa yang kita kerjakan. Dockerfile mirip dengan resep untuk membuat image Docker. Seperti seorang koki yang mengikuti resep untuk membuat makanan lezat, Docker menggunakan Dockerfile untuk membuat image khusus. Image ini berisi semua yang diperlukan aplikasi Anda untuk berjalan, diemas dalam kontainer portabel.

Petunjuk Penting yang Digunakan dalam Dockerfile

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

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

Mari kitauraikan 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 tertentu."

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 mengetahui bahan-bahan, mari bicarakan cara menggunakannya secara efektif:

  1. Jaga agar ringan: Gunakan image dasar minimaliser saat memungkinkan. Alpine Linux adalah pilihan populer karena ukurannya kecil.

  2. Layer secara bijaksana: Gabungkan perintah RUN untuk mengurangi lapisan. Misalnya:

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 pembangunan.

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

  3. Gunakan tag khusus: Sebaliknya FROM ubuntu, gunakan FROM ubuntu:20.04 untuk memastikan konsistensi.

Contoh Dockerfile

Mari kita gabungkan semuanya dengan aplikasi web Python sederhana:

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

# Set direktori kerja dalam kontainer
WORKDIR /app

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

# Instal paket yang diperlukan yang ditentukan dalam 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 dalam kontainer, instal dependensi, ekspos port, tentukan variabel lingkungan, dan menentukan perintah untuk menjalankan aplikasi kita.

Bagaimana Cara Kerjanya?

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

Itu seperti membuat kue lapis. Setiap instruksi menambahkan lapisan baru, dan jika Anda tidak mengubah lapisan bawah, Anda hanya perlu menambahkan lapisan baru di atas tanpa membuat kue lagi.

Kesimpulan

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

Saat Anda terus melanjutkan perjalanan Docker Anda, Anda akan menemukan bahwa Dockerfiles adalah alat yang sangat kuat untuk membuat lingkungan dan pengiriman yang dapat direproduksi. Mereka adalah saus rahasia yang membuat Docker begitu lezat bagi pengembang dan tim operasi.

FAQ

Q: Bisakah saya menggunakan beberapa FROM instruksi dalam Dockerfile?

A: Ya, ini disebut pembangunan multi-tahap. Hal ini berguna untuk membuat image final yang lebih kecil dengan meninggalkan dependensi pembangunan dibelakang.

Q: Apa perbedaan antara CMD dan ENTRYPOINT?

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

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

A: Gunakan file .dockerignore, manfaatkan cache pembangunan dengan menempatkan instruksi secara bijaksana, 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 jelajahi, terus bangun, dan terutama, bersenang-senang dengan Docker! Ingat, setiap master pernah menjadi pemula. Selamat Dockering!

Credits: Image by storyset