Docker Fundamental - Sesi 1

Docker Fundamental - Sesi 1

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