- 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