Cara Menggunakan Dockerfile untuk Membangun Citra Docker
Apa yang dimaksud dengan Dockerfile?
Dockerfile adalah skrip yang berisi serangkaian instruksi yang memberi tahu Docker cara membangun citra. Instruksi ini menentukan citra dasar, menyalin berkas, mengatur variabel lingkungan, dan menjalankan perintah di dalam kontainer. Saat Docker memproses Dockerfile, Docker akan menciptakan citra baru berdasarkan instruksi tersebut.
Alur kerja dasar terlihat seperti ini:
- Tulis berkas Docker dengan instruksi yang diperlukan.
- Bangun citra Docker menggunakan Dockerfile.
- Jalankan kontainer Docker dari citra yang dibangun.
Panduan Langkah-demi-Langkah untuk Membuat Dockerfile dan Membangun Citra
Langkah 1: Siapkan Proyek Anda
Untuk memulai, Anda memerlukan aplikasi sederhana untuk melakukan kontainerisasi. Dalam contoh ini, kita akan membuat aplikasi Node.js dasar. Jika Anda belum menginstal Node.js, Anda dapat mengikuti langkah-langkah berikut untuk membuat aplikasi Node.js sederhana.
- Buat direktori proyek:
- Buat berkas package.json untuk aplikasi Node.js Anda:
- Membuat berkas server.js:
- Tambahkan konten berikut ini ke file server.js:
const http = require('http');
const hostname = '0.0.0.0';
const port = 3000;
const server = http.createServer((req, res) => { res.statusCode = 200;
res.setHeader('Content-Type', 'text/plain');
res.end('Hello World\n'); });
server.listen(port, hostname, () => {
console.log(Server running at http://${hostname}:${port}/); });
Setelah Anda memiliki aplikasi dasar, langkah selanjutnya adalah membuat berkas Docker yang akan digunakan untuk membangun citra Docker untuk aplikasi ini.
- Buat Dockerfile di direktori root proyek Anda:
- Menambahkan instruksi ke Dockerfile:
Berikut ini adalah Dockerfile sederhana untuk aplikasi Node.js Anda:
FROM node:14 # Use an official Node.js runtime as a base image
WORKDIR /app # Set the working directory inside the container
COPY package*.json ./ # Copy package.json and install dependencies
RUN npm install
COPY . . # Copy the rest of the application code
EXPOSE 3000 # Expose the port that the app runs on
CMD ["node", "server.js"] # Command to run the application
Penjelasan tentang Dockerfile:
- FROM: Menentukan citra dasar yang akan digunakan untuk membangun citra Anda. Dalam kasus ini, citra resmi Node.js 14.
- WORKDIR: Menetapkan direktori kerja di dalam kontainer. Semua perintah selanjutnya akan dijalankan di dalam direktori ini.
- COPY: Menyalin berkas dari mesin host ke dalam kontainer Docker.
- COPY package*.json ./: Ini menyalin berkas package.json dan package-lock.json .
- COPY . .: Menyalin seluruh proyek ke dalam kontainer.
- RUN: Menjalankan perintah di dalam kontainer, dalam hal ini, menjalankan npm install untuk menginstal dependensi Node.js.
- EXPOSE: Menginformasikan kepada Docker bahwa kontainer mendengarkan pada porta 3000.
- CMD: Menentukan perintah yang akan dijalankan di dalam kontainer saat kontainer dimulai (dalam hal ini, menjalankan aplikasi Node.js dengan node server.js).
Langkah 3: Membangun Citra Docker
Setelah Anda menyiapkan berkas Docker, Anda dapat membangun citra Docker menggunakan perintah docker build.
- Di direktori proyek Anda, jalankan perintah berikut:
Inilah yang dilakukan oleh perintah tersebut:
- –t my-docker-app: Menandai citra dengan nama my-docker-app.
- . menentukan direktori saat ini (tempat Dockerfile berada).
Docker akan memproses Dockerfile, langkah demi langkah, membangun citra sesuai instruksi Anda. Jika semuanya telah diatur dengan benar, Anda akan melihat pesan bahwa citra telah berhasil dibangun.
Langkah 4: Jalankan Kontainer Docker
Setelah citra dibangun, Anda dapat membuat dan menjalankan kontainer menggunakan perintah docker run.
- –p 3000:3000: Memetakan port 3000 pada mesin lokal Anda ke port 3000 di dalam kontainer.
- my-docker-app: Nama citra Docker yang Anda buat.
Anda seharusnya melihat pesan ini: Server berjalan di http://0.0.0.0:3001/.
Untuk menguji aplikasi, buka peramban web Anda atau gunakan curl untuk mengunjungi:
Langkah 5: Dorong Citra Docker ke Docker Hub (Opsional)
Jika Anda ingin berbagi citra dengan orang lain atau menerapkannya ke server, Anda dapat mendorongnya ke Docker Hub.
- Pertama, masuk ke Docker Hub:
- Kemudian tandai gambar Anda dengan nama pengguna Docker Hub Anda:
- Dorong citra ke Docker Hub:
Kini, citra Docker Anda tersedia secara publik (atau pribadi) di Docker Hub.
Praktik Terbaik untuk Dockerfile
- Gunakan gambar dasar yang kecil dan spesifik: Jika memungkinkan, gunakan gambar dasar yang ringan seperti alpine untuk mengurangi ukuran gambar.
- Minimalkan jumlah lapisan: Setiap perintah di dalam sebuah Dockerfile akan membuat sebuah layer baru. Cobalah untuk meminimalkan jumlah lapisan dengan menggabungkan perintah jika memungkinkan (misalnya, gunakan && untuk menggabungkan beberapa perintah dalam satu instruksi RUN ).
- Gunakan pembuatan multi-tahap: Ini membantu mengurangi ukuran gambar akhir dengan memisahkan lingkungan build dari lingkungan runtime.
- Memanfaatkan cache: Docker menyimpan cache setiap lapisan citra, sehingga menggunakan kembali perintah yang sama (seperti COPY dan RUN) membantu mempercepat proses build berikutnya.