📑

Go(Gin)でのDocker環境構築

2024/10/31に公開

はじめに

今Goのボイラーテンプレートを作っています。マイクロサービスが活発になっているので、
それに伴って作っています。その手始めにDockerの環境構築をしました。

GoのDocker Image(GinでのDockerの環境構築)

以下のサイトを参考にしてみました。

https://hub.docker.com/_/golang

まずはGo(Gin)の導入

インストール後、以下のコマンドでGoのバージョンを確認

go version
  • プロジェクトのディレクトリを作成
mkdir my-gin-app
cd my-gin-app
  • Goモジュールの初期化
go mod init my-gin-app
  • Ginのインストール
go get -u github.com/gin-gonic/gin
  • 基本的なアプリケーションの作成
package main

import "github.com/gin-gonic/gin"

func main() {
    router := gin.Default()

    // ルートエンドポイント
    router.GET("/", func(c *gin.Context) {
        c.JSON(200, gin.H{
            "message": "Hello, World!",
        })
    })

    // サーバーを起動
    router.Run(":8080") // ポート8080でリッスン
}
  • サーバーの起動
go run main.go

ブラウザでhttp://localhost:8080にアクセスすると、{"message": "Hello, World!"}というJSONレスポンスが表示

<img width="1433" alt="スクリーンショット 2024-10-26 11 28 44" src="https://github.com/user-attachments/assets/c0fc764d-d1ff-4dc7-a9a5-d0512c9d1e80">

Dokerfile

Dokerfileは以下のようにしました。それぞれを解説しました。

# ベースイメージを指定
FROM golang:1.23.2-alpine3.20 AS builder

# ワーキングディレクトリを設定
WORKDIR /app

# Goモジュールを取得するためにgo.modとgo.sumをコピー
COPY go.mod go.sum ./
RUN go mod download

# アプリケーションのソースコードをコピー
COPY . .

# アプリケーションをビルド
RUN go build -o main .

# 実行用の軽量イメージ

FROM alpine:latest

# ビルドしたバイナリをコピー
WORKDIR /root/
COPY --from=builder /app/main .

# アプリケーションを実行
CMD ["./main"]

# ポート8080を公開
EXPOSE 8080

docker-compose.yml

docker-compose.ymlは以下のようにしました。

version: '3.8'

services:
  web:
    build:
      context: ./app
      dockerfile: Dockerfile
    ports:
      - "8080:8080"
    environment:
      - PORT=8080

Dockerの実行

  • dockerをビルド
docker compose up --build
  • dockerを起動
docker compose up -d
  • dockerを止める
docker compose down

この挙動になったらOK

dockerを起動し、以下のURLでで出力されたらOKです。

http://localhost:8080

スクリーンショット 2024-10-27 0.17.27.png

Discussion