- Gunakan file .dockerignore untuk menghapus konten yang tidak perlu dari konteks build
- Cobalah untuk menghindari menginstal paket dan dependensi yang tidak perlu
- Minimalkan lapisan pada gambar
- Gunakan image alpine jika memungkinkan
- Gunakan multi-stage build, yang akan saya kita coba pada tutorial kali ini.
Ya, mari kita coba ke multi-stage build. Multi-stage Build pada Docker adalah fitur baru yang diperkenalkan di Docker 17.05. Ini adalah metode untuk mengurangi ukuran image, membuat organisasi perintah Docker yang lebih baik, dan meningkatkan kinerja sekaligus menjaga Dockerfile mudah dibaca dan dipahami. Multi-stage Build adalah membagi Dockerfile menjadi beberapa tahap untuk meneruskan artefak yang diperlukan dari satu tahap ke tahap lainnya dan akhirnya mengirimkan artefak terakhir di tahap terakhir. Dengan cara ini, gambar akhir kami tidak akan memiliki konten yang tidak perlu kecuali artefak yang kami perlukan. Dan berikut adalah contoh perbandingannya :
1. Dockerfile tanpa menggunakan multi-stage build
```bash FROM node RUN apt-get update && apt-get upgrade -y \ && apt-get clean RUN mkdir /app WORKDIR /app COPY package*.json /app/ RUN npm install COPY src /app/src EXPOSE 3000 CMD [ "npm", "start" ] ```
2. Dockerfile menggunakan multi-stage build
```bash # base FROM node AS stage1 RUN apt-get update && apt-get upgrade -y \ && apt-get clean RUN mkdir /app WORKDIR /app COPY package*.json ./ # install dependecies FROM stage1 AS stage2 RUN npm install # release / final stage FROM gcr.io/distroless/nodejs COPY --from=stage2 /app/node_modules ./node_modules COPY src /app/src EXPOSE 3000 CMD [ "/app/src/server.js" ] ```
3. Verifikasi
```bash [nodejs_app] 09:51 >> docker images REPOSITORY TAG IMAGE ID CREATED SIZE multistage latest 8b71f3886b93 3 minutes ago 131MB without_multistage latest 9c570c03752a 2 weeks ago 1.01GB ```
Yaps, dari gambar verifikasi kita dapat membandingkan ukuran antara menggunakan multi-stage build dan tanpa menggunakannya, dalam membuat sebuah image pada docker. Sekian dulu sampai bertemu di tutorial berikutnya!
0 comments:
Post a Comment