yikegaya’s blog

仕事関連(Webエンジニア)と資産運用について書いてます

Goのプロジェクト環境をdocker-composeで構築した時のメモ

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