🥽
【Hello World⑯】gin @ Go
ginでGoのWebアプリを作ります
Windows11のDocker環境上で
Go言語のginを使い、Hello Worldアプリを作ります。
環境
Windows 11 Pro 23H2
WLS 2.1.5.0(Ubuntu 22.04.1 LTS)
Docker Desktop 4.29.0
Visual Studio Code
①フォルダ・ファイルを作成
以下の構成でフォルダとファイルを作ります。
フォルダ構成
gin
├─app
│ └─main.go
├─compose.yaml # コンテナ作成時の指示を記載したファイル
└─Dockerfile # イメージ作成時の指示を記載したファイル
PowerShell
mkdir gin ;`
cd gin ;`
mkdir app ;`
New-Item compose.yaml ;`
New-Item Dockerfile ;`
New-Item app/main.go ;`
code compose.yaml ;`
code Dockerfile ;`
code app/main.go
compose.yaml
services:
gin:
build : .
image : gin
container_name : gin
working_dir : /app
command : bash -c "go mod tidy && go run main.go"
ports:
- "8080:8080"
volumes:
- ./app:/app
Dockerfile
FROM golang:1.22-bullseye
RUN apt update && apt upgrade && apt -y install git \
&& go env -w GOPROXY=direct \
&& git config --global http.sslverify false \
&& export GOINSECURE=*
main.go
package main
import (
"net/http"
"github.com/gin-gonic/gin"
)
func main() {
r := gin.Default()
r.GET("/", func(c *gin.Context) {
c.JSON(http.StatusOK, gin.H{
"message": "Hello World by Gin of Go on Docker!",
})
})
r.Run()
}
②プロジェクトを作成
以下のコマンドを実行し、プロジェクトを作成します。
※Dockerのイメージ内でプロジェクトの作成と、ginのインストールを行い、作成されたgo.mod
とgo.sum
をホストにコピーします。
PowerShell
docker run -it --rm -v .:/host golang:1.22-bullseye `
bash -c "apt update && apt upgrade && apt -y install git && `
go env -w GOPROXY=direct && `
git config --global http.sslverify false && `
export GOINSECURE=* && `
mkdir /app && cd /app && `
go mod init sample && `
go get github.com/gin-gonic/gin && `
cp /app/* /host/app/"
作成されるフォルダ・ファイルの構成と「go.mod」の内容
フォルダ構成
go
├─app
│ ├─go.mod
│ ├─go.sum
│ └─main.go
├─compose.yaml # コンテナ作成時の指示を記載したファイル
└─Dockerfile # イメージ作成時の指示を記載したファイル
go.mod
module sample
go 1.22.2
require github.com/gin-gonic/gin v1.9.1
require (
github.com/bytedance/sonic v1.9.1 // indirect
github.com/chenzhuoyu/base64x v0.0.0-20221115062448-fe3a3abad311 // indirect
github.com/gabriel-vasile/mimetype v1.4.2 // indirect
github.com/gin-contrib/sse v0.1.0 // indirect
github.com/go-playground/locales v0.14.1 // indirect
github.com/go-playground/universal-translator v0.18.1 // indirect
github.com/go-playground/validator/v10 v10.14.0 // indirect
github.com/goccy/go-json v0.10.2 // indirect
github.com/json-iterator/go v1.1.12 // indirect
github.com/klauspost/cpuid/v2 v2.2.4 // indirect
github.com/leodido/go-urn v1.2.4 // indirect
github.com/mattn/go-isatty v0.0.19 // indirect
github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd // indirect
github.com/modern-go/reflect2 v1.0.2 // indirect
github.com/pelletier/go-toml/v2 v2.0.8 // indirect
github.com/twitchyliquid64/golang-asm v0.15.1 // indirect
github.com/ugorji/go/codec v1.2.11 // indirect
golang.org/x/arch v0.3.0 // indirect
golang.org/x/crypto v0.9.0 // indirect
golang.org/x/net v0.10.0 // indirect
golang.org/x/sys v0.8.0 // indirect
golang.org/x/text v0.9.0 // indirect
google.golang.org/protobuf v1.30.0 // indirect
gopkg.in/yaml.v3 v3.0.1 // indirect
)
③コンテナを起動
以下のコマンドを実行し、Dockerのイメージを作成してコンテナを起動します。
PowerShell
docker compose up -d
④Hello Worldが表示されることを確認
http://localhost:8080に接続して、Hello Worldが表示されることを確認します。
Discussion