Skip to main content

Mengoptimalkan Build Time Aplikasi Menggunakan Docker Cache

· 4 min read
Jacky Rusly

Pada artikel kali ini saya akan membahas bagaimana caranya agar kita bisa Mengoptimalkan Build Time Aplikasi Menggunakan Docker Cache.

Sebelum mulai, jika kalian belum install Docker di local komputer, kalian harus menginstall Docker terlebih dahulu dengan cara mengikuti instruksi Docker Installation. Install Docker Desktop dan sesuaikan dengan OS komputer kalian.

Docker Cache

Berikut adalah cara kerja Docker Cache. Misalnya kita punya lima steps untuk build aplikasi kita:

Step 1
Step 2
Step 3
Step 4
Step 5

Ketika kita jalankan command docker build untuk pertama kali, maka Docker akan menjalankan semua steps. Kemudian misalnya kita ubah code kita yang mempengaruhi Step 4. Ketika kita jalankan build yang kedua, maka proses buildnya berjalan seperti berikut:

Step 1 - CACHED
Step 2 - CACHED
Step 3 - CACHED
Step 4
Step 5

Build Step 1 sampai Step 3 akan menggunakan cache, kemudian Step 4 dan Step 5 akan berjalan dengan tidak menggunakan cache. Artinya Step 4 dan semua yang dibawah Step 4 tidak akan menggunakan cache.

Setup Project

Untuk contoh project kali ini, kita akan menggunakan Next.js. Jalankan command berikut untuk membuat project Next.js:

yarn create next-app

Setup Project

Silakan isi sesuai dengan yang diinginkan. Contohnya:

  • Name: docker-cache-example.
  • TypeScript: Yes.
  • ESLint: Yes.

Dockerfile Yang Kurang Optimal

Buat satu file bernama Dockerfile di root project.

FROM node:18-alpine3.16

WORKDIR /app

COPY . .

RUN yarn install --production
RUN yarn build

EXPOSE 3000

CMD "yarn" "start"

Build Pertama

Kemudian kita akan coba jalankan command build:

docker build -t docker-cache-example .

Waktu yang dibutuhkan adalah sekitar 114 detik.

Build Without Cache First

Build Kedua

Sebelum build kedua kita akan coba melakukan sedikit changes, misalnya ada penambahan fitur. Di file pages/index.tsx kita akan menambahkan <div>Docker Cache Example</div>.

Make Some Changes

Kemudian kita akan jalankan build kedua dengan command yang sama.

Build Without Cache Second

Waktu yang dibutuhkan adalah sekitar 94 detik.


Di sini dapat kita lihat, tidak ada perbedaan waktu yang jauh antara build pertama dan kedua karena kita tidak memanfaatkan cache.

Dockerfile Yang Optimal

Kita akan coba ubah Dockerfile menjadi lebih optimal.

FROM node:18-alpine3.16

WORKDIR /app

COPY package.json yarn.lock .

RUN yarn install --production

COPY . .

RUN yarn build

EXPOSE 3000

CMD "yarn" "start"

Build Pertama

Kita coba jalankan perintah yang sama dengan sebelumnya:

docker build -t docker-cache-example .

Waktu yang dibutuhkan adalah sekitar 106 detik.

Build With Cache First

Build Kedua

Kita akan melakukan hal yang sama dengan percobaan sebelumnya. Di file pages/index.tsx kita akan menambahkan <div>Docker Cache Example</div>.

Make Some Changes

Kemudian kita akan jalankan build kedua dengan command yang sama.

Build Without Cache Second

Waktu yang dibutuhkan hanya sekitar 17 detik.


Bisa dilihat perbedaan yang signifikan antara build pertama dan kedua 106 detik vs 17 detik. Karena pada Dockerfile Yang Optimal kita memanfaatkan Docker Cache di step yarn install --production. Sedangkan pada Dockerfile Yang Kurang Optimal di step yarn install --production nya tidak tercache dikarenakan ada changes pada Step 3 yaitu COPY . ..

Kesalahan Yang Umum Dilakukan

Kesalahan yang umum kita lakukan adalah kita copy semua files kita pada step COPY dan melakukan install dependencies sehingga tidak memanfaatkan Docker Cache pada step install dependencies. Agar kita bisa memanfaatkan Docker Cache, kita bisa copy file yang dibutuhkan untuk install dependencies saja karena dependencies pada project kita tidak selalu berubah. Contohnya yang butuh di copy duluan:

  • Node.js -> package.json, package-lock.json, yarn.lock
  • Laravel -> composer.json, composer.lock

Kesimpulan

Step-step yang dibuat pada file Dockerfile sangat penting untuk diperhatikan. Kita harus mempertimbangkan mana yang harus duluan dieksekusi atau dieksekusi belakangan, karena ini mempengaruhi apakah Docker akan memakai cache atau tidak.

Penutup

Begitulah cara untuk Mengoptimalkan Build Time Aplikasi Menggunakan Docker Cache. Semoga artikel ini bisa bermanfaat bagi teman-teman.