/
/
Run NodeJS dengan Docker Untuk Development
Posted 7 months ago • 317 Dibaca

Run NodeJS dengan Docker Untuk Development

Berawal dari harus mengerjakan beberapa project yang dibangun dengan NodeJS dalam satu waktu, dan ternyata kebutuhan node version untuk masing-masing project berbeda. Sehingga saya pun harus switch version dengan NVM atau N, tentu hal ini merepotkan, solusi lainnya adalah menjalankan tiap-tiap project di container masing-masing, dengan setup Node sesuai dengan requirements, berikut adalah caranya.

Setup

Karena sebelumnya saya telah menggunakan Docker jadi saya bisa skip bagian instalasi Docker, namun hal ini wajib dilakukan jika kamu belum ada setup Docer, silahkan download dari link berikut sesuai dengan OS yang kamu gunakan https://docs.docker.com/desktop/ .

Menyiapkan prerequisite project, karena ini adalah pembahasan seputar project NodeJS tentu kamu juga harus menyiapkan project ini perlu run di Node JS versi bersama, dan apakah akan menggunakan NPM, Yarn atau PNPM dan versi berapa juga.

Untuk semua case di postingan ini, kamu menggunakan sample project yang telah di push ke Github https://github.com/maucoding-collections/dockerize-nodejs-for-beginner . Untuk project ini memerlukan setup, Node JS V 16.x.x dengan NPM bawaannya.

Memastikan Project Jalan Terlebih Dahulu

Sebelum saya setup containernya Dockernya, saya pastikan dulu programnya jalan dengan normal di local, tapi bagian ini bisa kamu skip jika tidak menginginkan install Node JS di lokal. 

Untuk run saya memerlukan script 

npm run start

Dan program akan berjalan di port 3000.

Oke 2 point diatas perlu di perhatikan untuk setup docker container, script apa yang digunakan untuk start, dan jalan di port apakah. Tentu beda project bisa beda script dan port yang digunakan.

Setup Dockerfile

FROM node:16

WORKDIR /usr/app

COPY . .

RUN npm install

EXPOSE 3000

CMD ["npm", "start"]

Sesuai dengan parameter diatas maka menghasilkan dockerfile diatas, dan peletakannya satu level dengan root project.

Oke mari saya jelas line-line perline.

FROM node:16

Line ini untuk import image yang akan gunakan di container, image sendiri semacam OS yang didalam bisa sudah terinstall beberapa software yang siap pakai , dalam case ini saya menggunakan image node:16 , karena didalamnya sudah terdapat Node JS versi 16 dan beberapa paket lain seperti NPM. https://hub.docker.com/_/node/ .

WORKDIR /usr/app

Didalam container, sama saja kita memiliki komputer sendiri, untuk Workdir ini adalah directori utama setelah melakukan login. Dalam case ini saya ini Workdir saya berada di direktori /usr/app .

COPY . .

Untuk menstrasfer file project ke container kita bisa menggunakan sytax ini, formatnya COPY <source local> <destination containter>, sehingga line ini sama saja saya copy seluruh isi project ke dalam direktori /usr/app di container.

RUN npm install

Tiap membuat container baru, sama saja install ulang komputer baru, yang artinya kita perlu install semua module untuk menjalankan project ini, dalam case ini cukup npm install.

EXPOSE 3000

Di test running sebelumnya kita tahu, bahwa sample project jalan di port 3000. Agar bisa kita akses dengan container, maka di dockerfile perlu di expose terlebih dahulu port 3000 tersebut dengan command EXPOSE 3000 , tentu angka 3000 ini tidak mutlak tergantung project kamu jalan di port berapa.

CMD ["npm", "start"]

Step terakhir tentu menjalankan projectnya, dengan npm start, hanya saja dockerfile berbeda penulisannya, di pisah ke dalam array of string.

Create Image and Run Container

Urutan untuk run di Docker adalah, dari dockerfile tadi akan build Docker Images, untuk kemudian run Docker Image tadi sebagai Docker Container.

Build Docker Image

Command yang digunakan adalah docker build . -t <image name> , pastikan untuk ekseskusi build image ini kamu berada di directory satu level dengan Dockerfile, dan untuk docker image namenya bebas.

Untuk case ini saya gunakan command docker build . -t mcdg/node-run. 

Untuk memastikan docker image sudah terbuat, gunakan command docker image ls , seharusnya image name kamu ada disana.

Run Docker Container

Step berikutnya setelah images success terbuat, adalah run sebagai container.

docker run -p <port source>:<port target> -d <image name>

Sebenarnya untuk docker run masih banyak argument yang bisa di tambahkan, namun dalam kasus ini kita goal cuma run docker container di port 3000 saja, untuk opsi seperti name dan lain-lain biar tergenerate auto oleh docker.

docker run -p 3000:3000 -d mcdg/node-run

dan untuk cek apakah runingnya normal dengan command docker ps

 

Terlihat di gambar atas, statusnya up.

Dan terlihat ketika akses ke http://localhost:3000 web jalan sesuai ekspetasi.

Watch Code Changes

Untuk run container diatas hanyalah sekedar run saja. Jika kamu melakukan changes pada line codes di project, maka tidak ada perubahan yang didapakan ketika akses http://localhost:3000 yups, karena container dan local adalah 2 komputer yang berbeda.

Solusinya adalah dengan menambahkan volumes ketika run docker container. Volumes konsepnya mirip sync folder di local dan docker, ketika kamu change code di local, maka code di container akan ikut berubah.

Untuk memulai step ini, kita kembali setelah membuat docker images dan abaikan docker container yang tadi telah run. Berikut command untuk run container sekaligus menambahkan volumes.

docker run --volume=<local source>:<target container> -p <port source>:<port target> -d <image name>

Sehingga dalam case ini menjadi

docker run --volume=/Users/yusufakhsanhidayat/Projects/maucoding-youtube/dockerize-nodejs-for-beginner/_recording/run:/usr/app -p 3000:3000 -d mcdg/node-run  

Untuk local source, silahkan sesuai dengan lokasi direktori kamu di local.

Pastikan container up, dengan check di command di docker ps .

Saya pun melakukan pengecekan change code, dan sukses code changes berhasil tersync dengan code yang ada di dalam docker.

MauCoding © 2024 powered by YMG Team