久々に個人開発で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