🐳

Docker Composeで立ち上げたPostgreSQLにローカルからgo runで繋ぎたい最小構成

2023/06/03に公開

やりたかったこと

  • GoでPostgreSQLを使ったアプリケーションを開発したい
  • PostgreSQLをローカルで管理したくなかったので、Docker Composeを使いたい
  • GoもDocker化すると再ビルドが面倒なので、Goはローカルで実行したい

やったこと

docker-compose.yml
version: "3"
services:
  postgres:
    image: postgres
    restart: always
    environment:
      POSTGRES_PASSWORD: mysecretpassword
    ports:
      - "5432:5432"
main.go
package main

import (
	"database/sql"
	"os"

	_ "github.com/lib/pq"
)

func main() {
	sqldb, err := sql.Open("postgres", os.Getenv("DATABASE_URL"))
	if err != nil {
		println(err)
	}
	defer sqldb.Close()

	// 疎通確認
	if err := sqldb.Ping(); err != nil {
		println(err)
	}

	println("OK")
}
# 1.postgresコンテナを立ち上げる
docker-compose up -d postgres

# 2.go runで実行
DATABASE_URL="postgres://postgres:mysecretpassword@localhost:5432/postgres?sslmode=disable" go run main.go
OK 

このやり方のメリット

Goのソースコードに変更があったときも、go runの再実行だけで済むので早い。
GoもDocker化した場合は、Dockerの再ビルドが必要なので、ちょっと遅い。

まあ業務やチームで開発するときにはGoをDocker化するメリットの方が上回ると思います。
逆に、GoをDocker化してもコンパイルorビルドがすぐ出来るやり方があればぜひ知りたいので、コメント頂けると助かります!

Discussion