Cara Membuat Docker Container Untuk Developer Golang

Golang saat ini menjadi bahasa pemrograman yang digunakan sebagai backend. Saat kita ingin melakukan debug coding kita bisa menggunakan perinah go run main.go. Jika kita sebagai developer yang selalu menjalankan perintah tersebut ketika akan akan melakukan debug maka akan menghabiskan banyak waktu. Pada docker kita bisa membuat container yang bisa melakukan reload otomatis ketika ada perubahan file pada source code. Proses tersebut biasa disebut sebagai Hot Reload. 

Buat Dockerfile untuk membuat docker images project Golang yang akan kita kerjakan. Kita akan menggunakan Golang:1.21 dan library Fresh untuk melakukan hot reload. Dalam perjalanan develop jika kita perlu menaikan versi Golang karena keperluan tertentu pada saat itu maka kita hanya perlu membuat ulang Dockerfile dengan versi yang dibutuhkan saat itu. Silahkan paste sintak berikut pada file Dockerfile di root project.

FROM golang:1.21
WORKDIR /usr/src/app
EXPOSE 8080
RUN go install github.com/gravityblast/fresh@latest

# Start the application with nodemon for hot-reloading
CMD ["fresh"]

Kemudian jalankan perintah berikut:

docker build -t fresh-go1.21.4 .

Proses tersebut akan mengeksekusi isi Dockerfile menjadi Docker Image yang bisa digunakan membuat container. Silahkan tunggu sampai proses create berhenti.  Setelah selesai kita bisa membuat container untuk working project dengan perintah:

docker run -itd --restart unless-stopped -p {port browser}:8080 -v {directory project pada laptop}:/usr/src/app --name {nama container} fresh-go1.21.4
  • {port browser} silahkan ganti denga port yang digunakan akses container pada browser. contah: 2023
  • {directory project pada laptop} adalah lokasi coding golang. sebagai contoh: /home/riset/poc-grpc/server-product.
  • {nama container} adalah nama container yang mewakili project contoh: poc-go-server-product

Jika sudah berhasil maka aplikasi golang bisa diakses menggunakan http://127.0.0.1:2023 dan ketika ada perubahan source code container akan melukan reload otomatis. Jika ada perlu diskusi silahkan hubungi saya disini. Semoga bermanfaat.