🤖

[API構築1] Golang appのdockerビルドと起動

2023/06/22に公開

概要

API作るものと構成 の環境構築のために、CI/CD周りの技術選定 で選んだ技術を用いてGitHub ActionsでGolang ApplicationのdockerビルドとEC2デプロイする。
今回はGolang Appのdockerビルドまで。

コマンドやオプションなどはよく使うdockerコマンドとdockerfile設定にまとめる。

Golangアプリケーションのdockerビルド

Dockerの基本的な使い方はDockerのgolang公式イメージのリファレンスを参考にする
https://hub.docker.com/_/golang

ginの初歩的なサーバコードについては以下から持ってきた
https://qiita.com/Syoitu/items/8e7e3215fb7ac9dabc3a

ファイルレイアウト

.
├── README.md
├── api
│   └── main.go
└── Dockerfile

Dockerfile

FROM golang:latest

WORKDIR /usr/local/app

COPY go.mod go.sum ./
RUN go mod download && go mod verify

COPY . .
RUN go build -v -o /usr/local/bin/app ./...

CMD ["app"]

main.go(最低限のginサーバ)

package main

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

import "net/http"

func main() {
    engine:= gin.Default()
    engine.GET("/", func(c *gin.Context) {
        c.JSON(http.StatusOK, gin.H{
            "message": "hello world",
        })
    })
    engine.Run(":8080")
}

あらかじめDocker Desktopを起動しておく。

buildとrun

# go appの作成
go mod init aichatbot
go get -u github.com/gin-gonic/gin
go mod tidy

# docker imageのbuild
docker build -t aichatbot-app ./

# docker起動
docker run -it --rm -p 80:8080 --name aichatbot-app-running aichatbot-app

できた。

docker Desktop上でも確認できる。

イメージサイズは1.2GBだった。まだGinしか入れてないのにこれは先行き不安


https://zenn.dev/tofucode/articles/b0f6282c323879

参考

https://docs.github.com/ja/actions/automating-builds-and-tests/building-and-testing-go

https://qiita.com/smi/items/4a7149759bad15f966a0

https://www.utakata.work/entry//golang/tutorial/2-docker-go-gin

GitHubで編集を提案

Discussion