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
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 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>
.
Kemudian kita akan jalankan build kedua dengan command yang sama.
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 Kedua
Kita akan melakukan hal yang sama dengan percobaan sebelumnya. Di file pages/index.tsx
kita akan menambahkan <div>Docker Cache Example</div>
.
Kemudian kita akan jalankan build kedua dengan command yang sama.
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.