久々に個人開発でGoのプロジェクト作ったので手順メモ。
簡単なCLIで1コンテナしか使わない予定なのでローカルに直接構築 or docker-compose使わずDockerfileのみでもいいかな、と思ったけど以下の理由で結局docker-compose使った。
- ローカルで動かすとGOPATHの問題があって自分の開発プロジェクトが全部置いてある
$HOME/workspaceに置けないのが嫌 - Dockerfileだけだとコマンドの数が多くなって混乱しがち。
- 複数コンテナ使わなくてもyamlにvolumeなどdockerコマンドオプションの内容全部指定できるdocker-composeはやっぱ楽
用意したファイル
とりあえず「Hello World」するだけのGoプログラム
/cmd/main.go
package main
import "fmt"
func main() {
fmt.Println("Hello, World!")
}
Dockerfile。開発用なのでbuildからのバイナリ実行ではなくgo runコマンドで実行しています。
FROM golang:1.21-bullseye WORKDIR /app CMD ["go","run","/app/cmd/main.go"]
docker-compose.yaml プロジェクト名は「goroutine-scraping-cli」
version: '3'
services:
goroutine-scraping-cli:
build:
context: .
dockerfile: Dockerfile
image: goroutine-scraping-cli:latest
volumes:
- ./:/app
go.mod作成
docker-compose run goroutine-scraping-cli go mod init goroutine-scraping-cli
これでdocker-compose buildすれば動く
docker-compose build docker-compose run goroutine-scraping-cli