Multistage Golang Container (Bahasa)

Hi gengs, pada hari ini saya akan sharing cara simple untuk membuat multistage golang container. Salah satu tujuan kita menggunakan multistage adalah agar dapat membuat container golang seminim mungkin sehingga tidak memakan banyak space. Yuk

Di tutorial ini saya asumsikan teman teman sudah bisa menginstall golang ya, mari kita buat folder baru, lalu membuat file baru bernama main.go

Yuk kita buat simple code untuk rest api

package main

import "github.com/gin-gonic/gin"

func main() {
	r := gin.Default()
	r.GET("/", func(c *gin.Context) {
		c.JSON(200, gin.H{
			"message": "Golang Multistage Container Build",
		})
	})
	r.Run(":5000")
}

Kita test dulu yuk, codenya run g nih, kalo tanpa container, mari kita init dulu modulenya

go mod init main

Kita coba testing dulu dengan menggunakan go run

Error terjadi, karena kita belum melakukan go get terhadap library gin-gonic, yuk go get dulu

go get github.com/gin-gonic/gin

Yuk coba kita run lagi via go run

go run main.go

Wow nice, running well gengz. Yuk coba compile truz kita coba jalanin lagi ya.

Mangstap, semua berjalan dengan baik, kita bisa check via browser untuk coba lihat hasilnya

Bisa kita lihat, bahwa saat melakukan access ke 0.0.0.0:5000, kita bisa melihat hasilnya, dan berhubung ini json, kita juga bisa melakukan manipulasi, contoh misalnya dengan python script dibawah ini

import requests
response = requests.get("http://0.0.0.0:5000")
print(f"Json response is : {response.json()}")
json_key_message = (response.json())["message"]
print(f"Accessing json key : {json_key_message}")

Bisa dilihat, karena memang dia json, kita bisa akses keynya. Semua sudah ok, yuk kita lanjut untuk membuat Dockerfile.

# Step 1, membuat binary file
FROM golang:alpine AS builder
RUN apk update && apk add --no-cache git
WORKDIR $GOPATH/src/mypackage/myapp/
# Tambahan ENV penting, karena bila tidak ditambahkan, binary tidak jalan pada saat running di scratch
ENV CGO_ENABLED=0
COPY . .
# Melakukan instalasi terhadap library yang kita gunakan, yaitu gin gonic
RUN go get -d -v
RUN go build -o /go/bin/main
# Step 2, meletakkan binary file diatas scratch
FROM scratch
COPY --from=builder /go/bin/main /go/bin/main
ENTRYPOINT ["/go/bin/main"]

Docker file kita sudah siap, yuk kita build dulu dengan menggunakan command dibawah

docker build -t multistage_golang .

Setelah selesai, yuk kita check dulu images nya

Mangstap, image sudah readeh ni gengz, dan mungil ya, cmn 8.95 MB yuk kita coba running dulu

docker run --name multistage_golang -d -p 5000:5000 multistage_golang

Bisa kita lihat container sudah running well, yuk coba check lagi di web browser

running well ya gengz. Ada juga yang saya mau mention, yaitu docker exec tidak bisa di eksekusi terhadap container multistage ini, kabar yang sangat baik untuk teman teman yang ingin meng-obfuscate app nya.

Semoga bermanfaat ya geng, source code bisa di check di link berikut

https://github.com/ludesdeveloper/multistage_docker_golang/tree/master

Tinggalkan Balasan

Isikan data di bawah atau klik salah satu ikon untuk log in:

Logo WordPress.com

You are commenting using your WordPress.com account. Logout /  Ubah )

Gambar Twitter

You are commenting using your Twitter account. Logout /  Ubah )

Foto Facebook

You are commenting using your Facebook account. Logout /  Ubah )

Connecting to %s

Situs yang Didukung WordPress.com.

Atas ↑

%d blogger menyukai ini: