Taufik Mulyana
Taufik Mulyana
Linux System Administrator, Interested in Linux, Cloud, Containers
September 1, 2018 3 min read

Deploy Aplikasi Go ke Docker Container

deploy aplikasi go ke docker container

Deploy Aplikasi Go ke Docker Container, di era modern software development saat ini khususnya pada arsitektur microservices, sudah tidak lagi menggunakan infra berbasis vm, tapi sudah menggunakan infra berbasis container, dengan adanya docker sangat membantu untuk membuat dan mengelola environtment container, dengan menggunakan docker kita dapat membungkus aplikasi dan semua yang dibutuhkan oleh aplikasi tersebut, seperti pustaka, depedensi, konfigurasi environment dll.

dalam kasus kali ini saya akan mencoba men-deploy aplikasi yang ditulis menggunakan bahasa pemograman go

berikut contoh aplikasi sederhana go

> file main.go

package main

import (
  "fmt"
  "log"
  "net/http"
)

func index(w http.ResponseWriter, r *http.Request) {
  fmt.Fprintf(w, "index page")
}

func about(w http.ResponseWriter, r *http.Request) {
  fmt.Fprintf(w, "about page")
}

func main() {
  http.HandleFunc("/", index)
  http.HandleFunc("/about", about)

  log.Println("application started at port :8000")
  log.Fatal(http.ListenAndServe(":8000", nil))
}

Membuat Dockerfile

untuk membangun sebuah image docker kita perlu membuat subuah Dockerfile yang berisi instruksi untuk membangun sebuah image

> file Dockerfile

FROM golang:1.10.5-alpine3.8

WORKDIR /go/src/app
COPY main.go .
RUN go build -o main .
EXPOSE 8000
CMD ["./main"]

pada intruksi di atas saya menggunakan base image golang yang menggunakan alpine linux, menambahkan berkas main.go ke direktori /app, dan mengkompilasi aplikasi go ke bentuk biner, membuka port 8000 dan menjalankan aplikasinya dengan peirntah ./main.go

selanjutnya saya akan coba buat image baru yang berisi aplikasi go tadi menggunakan docker build

$ sudo docker build -t taufik/goapps:1.0 .

Sending build context to Docker daemon 7.68kB
Step 1/6 : FROM golang:1.10.5-alpine3.8
---> 2f577258bd10
Step 2/6 : WORKDIR /go/src/app
---> Running in 9ae2d84afbb5
Removing intermediate container 9ae2d84afbb5
---> 1f989215185c
Step 3/6 : COPY main.go .
---> 6abeebc01c99
Step 4/6 : RUN go build -o main .
---> Running in d74e1c271f81
Removing intermediate container d74e1c271f81
---> 465995cb4d0e
Step 5/6 : EXPOSE 8000
---> Running in 68df606808db
Removing intermediate container 68df606808db
---> 7bbdeff067a8
Step 6/6 : CMD ["./main"]
---> Running in a4c157d9e33e
Removing intermediate container a4c157d9e33e
---> 862033d5319d
Successfully built 862033d5319d
Successfully tagged taufik/goapps:1.0

image sudah terbuat, kita bisa cek dengan perintah berikut

$ sudo docker images

REPOSITORY      TAG   IMAGE ID       CREATED        SIZE
taufik/goapps   1.0   862033d5319d   6 minutes ago  265MB

lalu kita akan coba untuk menjalankan container dari image yang dibuat tadi

$ sudo docker run -d --name goapps -p 8000:8000 taufik/goapps:1.0

dengan perintah di atas kita menjalankan container dengan nama goapps dan meng-expose port 8000 ke host dalam mode detach kita bisa cek container yang sedang berjalan dengan perintah berikut

$ sudo docker ps

CONTAINER ID   IMAGE              COMMAND    CREATED        STATUS       PORTS                   NAMES
4cc6579120f5   taufik/goapps:1.0  "./main"   7 seconds ago  Up 4 seconds 0.0.0.0:8000->8000/tcp  goapps

dan selanjutnya bisa kita coba akses dengan menggunakan curl

$ curl localhost:8000
index page

$ curl localhost:8000/about
about page

Leave a Reply

Your email address will not be published. Required fields are marked *