Blogger Jateng

Praktik Terbaik untuk Menggunakan Docker dalam Pengembangan Web

Docker telah merevolusi cara pengembang membangun, mengirim, dan menjalankan aplikasi dengan menyediakan lingkungan yang konsisten di semua tahap pengembangan. Dalam pengembangan web, Docker menyederhanakan alur kerja, meningkatkan kolaborasi, dan meningkatkan skalabilitas. Namun, untuk memanfaatkan potensi Docker secara penuh, mengikuti praktik-praktik terbaik sangatlah penting. Artikel ini menguraikan beberapa strategi utama untuk mengoptimalkan penggunaan Docker dalam pengembangan web.

1. Pilih Gambar Dasar yang Minimal dan Efisien

Gambar dasar yang Anda pilih memiliki implikasi penting untuk ukuran dan efisiensi kontainer Docker Anda. Selalu pilih gambar minimalis seperti alpine kapan pun Anda bisa, ukurannya lebih kecil dan lebih aman. Sebagai contoh:

FROM node:alpine

Ini menghasilkan permukaan serangan yang lebih sedikit dan waktu pembuatan yang lebih singkat. Namun, perlu diingat bahwa ketika membuat citra dasar minimal, terkadang citra dasar yang lebih tebal dengan alat yang sudah disediakan lebih cocok untuk aplikasi Anda.

sumber: nilebits.com

2. Membangun Dockerfile yang Bersih dan Modular

Dockerfile yang tertata dengan baik adalah kunci untuk pemeliharaan dan efisiensi. Ikuti panduan ini:

  • Urutkan Instruksi Secara Logis: Dorong perintah yang paling tidak stabil ke ENDUrutkan instruksi secara logis (COPY dan ADD adalah perintah yang paling sering dimodifikasi).
  • Gunakan Multi-Stage Builds: Pisahkan dependensi build dan runtime untuk ukuran citra yang lebih kecil: 

# Stage 1: Build

FROM node:alpine AS builder

WORKDIR /app

COPY package.json .

RUN npm install

COPY . .

RUN npm run build


# Stage 2: Runtime

FROM nginx:alpine

COPY --from=builder /app/build /usr/share/nginx/html

3. Leverage.dockerignore

File dockerignore dapat digunakan untuk mengecualikan berkas dan direktori yang tidak ingin disertakan dalam konteks build, yang dapat membuat proses build menjadi lebih cepat dan citra akhir menjadi lebih kecil. Sebagai contoh:

node_modules

*.log

.git

Hal ini mencegah file yang sensitif atau tidak relevan disertakan dalam gambar. 

4. Gunakan Variabel Lingkungan untuk Konfigurasi

Jangan meng-code informasi sensitif seperti kunci API atau kredensial basis data di dalam Dockerfile Anda. Gunakan variabel lingkungan dan rahasia Docker sebagai gantinya. Sebagai contoh:

ENV NODE_ENV=production

Pada saat runtime, berikan variabel dengan menggunakan bendera -e atau file .env:

docker run --env-file .env my-web-app

5. Mengoptimalkan Cache Lapisan

Meskipun Docker membangun citra dalam beberapa lapisan dan menyimpan cache di setiap lapisan untuk memungkinkan pembangunan berikutnya yang lebih cepat. Untuk memaksimalkan caching:

  • Atur instruksi dengan menyimpan instruksi yang terkait bersama-sama.
  • Jangan membatalkan lapisan yang tidak perlu.

Bedakan perintah RUN yang menginstal dependensi dengan perintah yang menyalin berkas aplikasi:

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

COPY . /app

6. Perbarui Gambar Secara Teratur

Ini adalah masalah keamanan yang juga akan membuat aplikasi Anda terekspos pada risiko keamanan. Agar tetap aman, secara berkala tarik gambar dasar terbaru dan bangun kembali gambar docker Anda: 

 docker pull node:alpine

Pertimbangkan untuk menggunakan alat bantu seperti Docker Scout untuk memindai gambar Anda dari kerentanan.

7. Aktifkan Pencatatan dan Pemantauan

Pencatatan dan pemantauan yang tepat sangat penting untuk pemecahan masalah dalam aplikasi web Anda. Alirkan log ke agregator log eksternal seperti fluentd menggunakan driver pencatatan seperti json-file. Untuk pemantauan, lihat alat bawaan Docker (statistik docker) atau solusi pihak ketiga seperti Prometheus dan Grafana.  

8. Docker Compose untuk Aplikasi Multi Kontainer

Jika Anda men-deploy aplikasi web dengan beberapa layanan (misalnya, frontend, backend, basis data), Docker Compose menyediakan orkestrasi yang lebih mudah. Definisi # Layanan dalam berkas yml docker-compose:

version: '3.8'

services:

  frontend:

    build: ./frontend

    ports:

      - "3000:3000"

  backend:

    build: ./backend

    ports:

      - "5000:5000"

  db:

    image: postgres:alpine

    environment:

      POSTGRES_PASSWORD: example

9. Batasi Penggunaan Sumber Daya

Gunakan opsi manajemen sumber daya pabrik Docker untuk mencegah pabrik mengonsumsi sumber daya sistem yang terlalu banyak. Sebagai contoh:

docker run --memory=512m --cpus=1 my-web-app

Ini menyediakan kinerja yang konsisten dan menghindari perebutan sumber daya.

10. Ingatlah Keamanan dalam Pikiran

Keamanan adalah yang terpenting dalam pengembangan web. Ikuti panduan berikut ini:

  • Gunakan pengguna non-root dalam kontainer:

RUN adduser -D myuser

USER myuser

  • Memindai gambar secara teratur untuk mencari kerentanan.
  • Batasi eksposur jaringan dengan mengikat kontainer ke antarmuka tertentu atau menggunakan jaringan pribadi.

Kesimpulan

Docker adalah alat yang kuat untuk pengembangan web, tetapi manfaatnya paling baik direalisasikan melalui perencanaan yang cermat dan kepatuhan terhadap praktik terbaik. Dengan mengoptimalkan ukuran gambar, memanfaatkan caching, mengamankan konfigurasi Anda, dan mengelola sumber daya secara efektif, Anda bisa menciptakan aplikasi web yang kuat dan efisien. Seperti halnya alat apa pun, pembelajaran dan adaptasi berkelanjutan adalah kunci untuk memaksimalkan potensinya.

Kembali ke>>>> Menggunakan Docker untuk Pengembangan Web: Panduan untuk Pemula