Clone Github and Install Golang
Pada praktek docker kali ini kita akan mencoba Aplikasi Web Hello World dengan menggunakan bahasa pemrograman Golang yang di buat oleh Mas Noval Agung Prayogo
$ git clone --single-branch --branch only-app https://github.com/adamstudiogh/udemy-praktis-belajar-docker-dan-kubernetes-untuk-pemula.git
Pastikan host yang kita pakai sudah terinstall Bahasa Pemrograman Golang.
$ go version
go version go1.19.5 linux/amd64
Untuk install Bahasa Pemrograman Golang bisa lihat di dokumentasi. Jika sudah kita coba untuk menjalankan aplikasi Web Hello World nya.
$ PORT=8083 INSTANCE_ID="golang" go run main.go
2023/01/21 16:52:54 server starting at 0.0.0.0:8083
akses dengan web browser ke localhost:8083.
Dockerize Aplikasi Hello World
Untuk membungkus aplikasi web hello world menjadi image docker kita memerlukan nama nya Dockerfile. Apa itu Dockerfile? Dockerfile adalah sebuah script yang berisi untuk membuat sebuah Docker Image. Biasanya untuk mengautomasi proses pembuatan sebuah container image dengan depedensi, konfigurasi file dan elemen/komponen lain yang dibutuhkan oleh image.
Dockerfile
# instruksi ini menspesifikan base image yang digunakan sebagai dasar dari dockerfile
FROM golang:alpine
# intruksi untuk menjalankan command di container. command dieksekusi sebagai comand shell di dalam container, /bin/sh atau cmd di Windows. RUN akan membuat layer baru disetiap RUN command best practice penggunaan RUN dengan menggabung multiple command dengan &&
RUN apk update && apk add git
#menetapkan direktori kerja saat ini
WORKDIR /app
#intruksi untuk mengcopy dari host ke docker image,
# dot titik pertama mengarahkan ke direktori di host tempat dimana Dockerfile berada
# dot titik kedua mengarahkan ke current direktori dalam image dalam konteks ini berada di /app
COPY . .
#intruksi untuk memvalidasi source code golang
RUN go mod tidy
#Intruksi ini untuk membuild source code golang menjadi binary executeable
RUN go build -o binary
#intruksi ini berguna jika sewaktu build source code ini akan dijalankan dan image akan di run ke container, binary akan di execute
ENTRYPOINT ["./binary"]
setelah dockerfile dibuat, kita bisa menggunakan command docker build untuk membuat image.
$ docker build . -t my-app-image
check apakah sudah terbuat image dockernya, menggunakan perintah docker images
$ docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
my-app-image latest 567f9967c659 13 minutes ago 372MB
....
selanjutnya untuk membuat container dari image yang telah di buat dapat menggunakan command docker run.
$ docker run -i -t my-app-image
2023/01/21 10:05:43 PORT env is required
Pada command di atas flag yang sudah kita gunakan yaitu Flag -i -t
-i = interactive
-t = tty
jika terjadi error pada saat menjalankan docker kita dapat menambahkan flag -e.
Di docker ada banyak sekali flag yang tersedia yang bisa di lihat di dokumentasi Docker Run Reference
$ docker run -i -t -e PORT=8083 my-app-image
Expose Port dalam Container ke Luar Container
untuk dapat diakses melalui web browser kita terlebih dahulu expose port dalam container ke luar menggunakan flag -p
$ docker run -i -t -e PORT=8083 -p 8083:8083 my-app-image