Published December 26, 2020 by with 0 comment

Docker : Using Multi-stage Build to reduce Docker Image sizes


 Halo semua, pada kesempatan kali ini kami akan share tutorial tentang multi-stage build pada Docker. Sebelum masuk ke tahapannya, perlu kita tahu apa tujuan dari multi-stage build ini sendiri. Tujuan dari penggunaannya sendiri salah satunya adalah untuk mengurangi ukuran dari image. Kenapa ini bisa terjadi ? ya karena yang akan digunakan adalah hanya file-file yang perlu saja dan menghapus yang tidak perlu digunakan. Ada beberapa cara yang dapat digunakan untuk mengecilkan ukuran dari image docker,  Contohnya seperti berikut :

    - 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!

      edit

0 comments:

Post a Comment