🐳
Docker Composeで立ち上げたPostgreSQLにローカルからgo runで繋ぎたい最小構成
やりたかったこと
- 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