
Initial Go mod
Buat Directory/folder Golang untuk menempatkan script golang. Disini saya menggunakan windows, jadi saya letakan di D:/Script/. Maka akan seperti ini.

Masuk ke dalam folder golang lalu buka terminal pada folder tersebut. Saat ini saya menggunakan git bash dengan klik kanan pada bagian kosong pada folder lalu pilih git bash here.
lalu ketik command go mod init namaweb . Saya menggunakan golang.example. Bisa dilihat pada gambar dibawah. Setelah melakukan init go mod, akan tercipta sebuah file bernama go.mod.
$ go mod init golang.example
go: creating new go.mod: module golang.example

Membuat Script Go
Kita akan membuat example program REST API paling sederhana menggunakan gin. Pertama-tama pada terminal kita jalankan commandgo get -u github.com/gin-gonic/gin, maka terminal akan mendownload package gin yang dibutuhkan. Lalu buat script golangnya. Buat file bernama main.go lalu isikan script sebagai berikut.
https://gist.github.com/adityazxzxz/8fcf9bb7b93cc94fc740adffe01aea12
maka difolder yang sudah dibuat td akan ada 2 file yaitu go.mod dan main.go

Test Aplikasi
Jalankan script main.go yang sudah dibuat tadi dengan command go run main.go pada terminal.
$ go run main.go
[GIN-debug] [WARNING] Creating an Engine instance with the Logger and Recovery middleware already attached.
[GIN-debug] [WARNING] Running in "debug" mode. Switch to "release" mode in production.
- using env: export GIN_MODE=release
- using code: gin.SetMode(gin.ReleaseMode)
[GIN-debug] GET /test --> main.main.func1 (3 handlers)
[GIN-debug] Listening and serving HTTP on :3000
lalu buka browser kalian dan buka localhost:3000/test. Bila hasilnya seperti berikut, program teman-teman berjalan dengan baik.

Build Aplikasi Go
Matikan program go sebelumnya dengan cara tekan CTRL + C pada terminal. Saat menggunakan go run, program go masih berupa script dan belum berbentuk file execute. Untuk build aplikasi go menjadi 1 file dengan menggunakan command go build. Pada kasus ini, program go akan saya buat menjadil file bernama main dan akan dijalankan pada sistem operasi linux. Maka commandnya seperti ini env GOOS=linux go build -o main. Setelah command tersebut dijalankan, maka akan ada file baru bernama main. File itu lah yang nanti akan kita running.
$ env GOOS=linux go build -o main

Membuat Image Docker
Selanjutnya kita akan membuat image docker dari file go yang sudah kita build tadi. Kita akan memasukan file build kita ke dalam docker image yang nanti akan dijalankan di docker container.
Pertama kita buat sebuah file. Beri nama file tersebut Dockerfile tanpa extention. Level file tersebut sama seperti file main.go, main dll. Jadi list file nya seperti ini.

Lalu isikan file tersebut dengan script ini.
FROM golang:alpine WORKDIR /app COPY . /app ENTRYPOINT ["/app/main"]
FROM adalah environment yang digunakan. Saya mengggunakan golang 1.13.4 dan menggunakan linux yang ringan yaitu alpine.
WORKDIR adalah tempat script atau file execute kita. Saya alokasikan ke dalam /app
COPY untuk mengcopy file. Saya menggunakan “.” karena ingin mengcopy semua file yang directorynya se-level dengan file Dockerfile yaitu main.go dll ke dalam WORKDIR yaitu /app.
ENTRYPOINT untuk mengeksekusi file. Dalam kasus ini yang akan dieksekusi adalah file main yang berada pada WORKDIR /app.
lalu jalankan command :
docker build — no-cache -t main:1.0 .
setelah selesai maka saat commanddocker images dijalankan akan menghasilkan image bernama “main” beserta tagnya yaitu 1.0
$ docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
main 1.0 c68a7a6f5a18 5 days ago 374MB
golang alpine 57ce7b9daa9b 2 weeks ago 359MB
Membuat Container untuk menjalankan Image
Setelah berhasil membuat image. Maka tahap selanjutnya menjalankan image tersebut didalam container. Yang pertama dilakukan adalah membuat sebuah container yang akan dijadikan tempat untuk run image yang sudah kita buat.
Buat container dengan command :
docker container create —-name main -p 3000:3000 main:1.0
- — name diatas untuk penamaan container
- -p untuk port yang akan dibuka saat container dijalankan.
- main:1.0 adalah nama image beserta tag nya yang ingin dipakai.
Setelah create container. Jalankan command docker container ls —-all untuk melihat apakah container yang sudah kita buat berhasil.
$ docker container ls --all
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
5917a317696b main:1.0 "/app/main" 56 seconds ago main
Bila create container berhasil, lalu jalankan command berikut untuk menjalankan containernya.
docker container start main
lalu lihat kembali list containernya. Bila berhasil maka statusnya akan menjadi Up dan port nya sudah terisi. Berikut contohnya.
$ docker container ls --all
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
5917a317696b main:1.0 "/app/main" 3 minutes ago Up 28 seconds 0.0.0.0:3000->3000/tcp main
Lalu coba buka localhost:3000/test pada browser.

Program diatas sudah dijalankan oleh docker, bukan secara manual dari terminal pada step sebelumnya.
Saat ini saya masih tahap mendalami golang dan docker. Apabila ada yang kurang atau ada saran bisa tulis di kolom komentar.
Terima kasih banyak.