📑
Go(Gin)でのDocker環境構築
はじめに
今Goのボイラーテンプレートを作っています。マイクロサービスが活発になっているので、
それに伴って作っています。その手始めにDockerの環境構築をしました。
GoのDocker Image(GinでのDockerの環境構築)
以下のサイトを参考にしてみました。
まずはGo(Gin)の導入
- Goのインストール
[Goの公式サイト]
https://golang.org/dl/からインストーラーをダウンロードしてインストール。
インストール後、以下のコマンドで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 /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
Discussion