golang
docker
DockerHub
Arukas

Goで書いたサーバーをArukasで動作させるまでのステップ

GoでHTTPサーバーを用意する

シンプルなHTTPサーバーを用意する

package main

import (
    "fmt"
    "net/http"
)

func handler(w http.ResponseWriter, r *http.Request) {
    fmt.Fprintf(w, "Hello world\n")
}

func main() {
    fmt.Println("Starting server")
    http.HandleFunc("/", handler)
    http.ListenAndServe(":8080", nil)
}

Dockerfileを用意する

FROM golang:latest as builder

ENV CGO_ENABLED=0
ENV GOOS=linux
ENV GOARCH=amd64
WORKDIR /go/src/github.com/yokoe/go-server-example
COPY . .
RUN go build main.go

# runtime image
FROM alpine
RUN apk add --no-cache ca-certificates
COPY --from=builder /go/src/github.com/yokoe/go-server-example /app
RUN ls /app
EXPOSE 8080
CMD /app/main

ビルドしてみて動作確認する

docker build -t go-server-example .
docker run -p 8080:8080 -t go-server-example

curlでAPIを叩いてみて、ちゃんとレスポンスが帰って来ればOK

curl http://localhost:8080/

Dockerhubにデプロイする

DockerでSign Inする

Docker.app(macOS)の場合はメニューからSign Inできる。

イメージをPushする

docker images

docker imagesで、ビルドしたイメージのImage IDを調べる。

docker tag 3da5154 yokoe/go-server-example:latest
docker push yokoe/go-server-example:latest

そのImage IDに対してlatestタグをつけてPushする。

Arukasにデプロイする

  • Arukasにログインして、「新しいアプリケーションを作成」を選ぶ
  • ImageにDockerhubのレポジトリのイメージ名を指定する
  • 公開レポジトリの場合はFreeプランで運用できる
  • 「アプリケーションを作成」する
  • Action欄で「起動」をするとインスタンスが立ち上がる
  • curlでアクセスしてみて動作確認する