カテゴリ: Go言語 更新日: 2026/06/25

Go言語でDocker上のDB(PostgreSQL・MySQL)に接続する方法を完全解説!初心者向けガイド

Go言語でDocker上のDB(PostgreSQL/MySQL)と接続する方法
Go言語でDocker上のDB(PostgreSQL/MySQL)と接続する方法

先生と生徒の会話形式で理解しよう

生徒

「Go言語でデータベースを使いたいんですが、Dockerって何ですか?」

先生

「Dockerは、アプリやデータベースを簡単に動かせる箱のようなものです。環境をまとめて持ち運べる便利な仕組みです。」

生徒

「その中のデータベースにGoから接続するにはどうすればいいですか?」

先生

「接続情報を設定して、専用のライブラリを使えば簡単に接続できます。順番に見ていきましょう。」

1. Go言語とDockerとデータベースの関係とは

1. Go言語とDockerとデータベースの関係とは
1. Go言語とDockerとデータベースの関係とは

Go言語とDockerとデータベースの関係は、初心者にとって少し難しく感じるかもしれません。しかし仕組みはとてもシンプルです。

まずDockerとは、アプリケーションを動かすための環境を箱のようにまとめて管理する技術です。この箱の中にPostgreSQLやMySQLといったデータベースを入れて動かします。

そしてGo言語のプログラムは、その箱の中にあるデータベースへネットワーク経由で接続します。つまり、Goアプリとデータベースは別の箱にあり、お互いに通信しているイメージです。

例えるなら、Go言語はお店の店員で、データベースは倉庫です。Dockerはその建物のようなものです。店員が倉庫に在庫を取りに行くように、Goはデータベースからデータを取得します。

2. DockerでPostgreSQLとMySQLを起動する

2. DockerでPostgreSQLとMySQLを起動する
2. DockerでPostgreSQLとMySQLを起動する

まずはDocker上でデータベースを起動します。これはGo言語から接続するための準備です。


docker run -d -p 5432:5432 \
-e POSTGRES_USER=user \
-e POSTGRES_PASSWORD=password \
-e POSTGRES_DB=testdb \
postgres

これはPostgreSQLを起動するコマンドです。ポート番号やユーザー名、パスワードを設定しています。


docker run -d -p 3306:3306 \
-e MYSQL_ROOT_PASSWORD=password \
-e MYSQL_DATABASE=testdb \
mysql

こちらはMySQLの起動です。Dockerコンテナ内でデータベースが動き始めます。

3. Go言語でデータベース接続するための準備

3. Go言語でデータベース接続するための準備
3. Go言語でデータベース接続するための準備

Go言語でデータベースに接続するには、専用のドライバというものが必要です。ドライバとは、Goとデータベースをつなぐための橋のようなものです。

PostgreSQLの場合はpq、MySQLの場合はgo-sql-driverというライブラリを使います。


go get github.com/lib/pq
go get github.com/go-sql-driver/mysql

これで準備は完了です。Goプログラムからデータベースに接続できるようになります。

4. PostgreSQLに接続するGoコード

4. PostgreSQLに接続するGoコード
4. PostgreSQLに接続するGoコード

ここではGo言語でPostgreSQLに接続する基本的なコードを紹介します。


package main

import (
    "database/sql"
    "fmt"
    _ "github.com/lib/pq"
)

func main() {
    connStr := "user=user password=password dbname=testdb sslmode=disable"
    db, err := sql.Open("postgres", connStr)
    if err != nil {
        panic(err)
    }

    err = db.Ping()
    if err != nil {
        panic(err)
    }

    fmt.Println("PostgreSQL接続成功")
}

sql.Openはデータベースとの接続を準備する関数です。Pingは実際に接続できるか確認するために使います。

5. MySQLに接続するGoコード

5. MySQLに接続するGoコード
5. MySQLに接続するGoコード

次にMySQLへ接続する方法です。書き方は似ていますが、接続文字列の形式が異なります。


package main

import (
    "database/sql"
    "fmt"
    _ "github.com/go-sql-driver/mysql"
)

func main() {
    dsn := "root:password@tcp(localhost:3306)/testdb"
    db, err := sql.Open("mysql", dsn)
    if err != nil {
        panic(err)
    }

    err = db.Ping()
    if err != nil {
        panic(err)
    }

    fmt.Println("MySQL接続成功")
}

dsnは接続情報のことです。ユーザー名やパスワード、接続先の情報をまとめています。

6. Dockerコンテナとの接続で重要なポイント

6. Dockerコンテナとの接続で重要なポイント
6. Dockerコンテナとの接続で重要なポイント

Docker環境での接続では、いくつか注意点があります。

まずlocalhostという言葉です。これは自分のパソコンを意味しますが、Docker内では意味が変わることがあります。

もしGoアプリもDockerで動かしている場合は、localhostではなくコンテナ名を指定します。

またポート番号も重要です。PostgreSQLは5432、MySQLは3306が基本です。

ネットワークの設定が間違っていると接続できないため、Dockerのポート公開設定を確認しましょう。

7. データ取得の簡単なサンプル

7. データ取得の簡単なサンプル
7. データ取得の簡単なサンプル

接続できたら、次はデータを取得してみましょう。SQLという命令でデータを取得します。


rows, err := db.Query("SELECT id, name FROM users")
if err != nil {
    panic(err)
}
defer rows.Close()

for rows.Next() {
    var id int
    var name string
    rows.Scan(&id, &name)
    fmt.Println(id, name)
}

Queryはデータを取得するための関数です。rows.Nextで一件ずつ取り出します。

8. 接続エラーが出たときの対処方法

8. 接続エラーが出たときの対処方法
8. 接続エラーが出たときの対処方法

初心者がつまずきやすいポイントとして、接続エラーがあります。

例えば接続できない場合は、ユーザー名やパスワードが間違っている可能性があります。

またDockerコンテナが起動していない場合も接続できません。

ポート番号の設定ミスや、データベース名の間違いもよくある原因です。

エラーが出た場合は、一つずつ確認していくことが大切です。焦らずに原因を切り分けることで、確実に解決できます。

Go言語を基礎からスッキリ学びたい人や、 文法だけでなく「実用的な使い方」まで押さえたい人には、 定番の入門書がこちらです。

基礎からわかるGo言語をAmazonで見る

※ Amazon広告リンク

まとめ

まとめ
まとめ

Go言語とDockerとデータベース接続の総復習

本記事ではGo言語とDockerを組み合わせてPostgreSQLやMySQLといったデータベースに接続する方法について丁寧に解説しました。Go言語でのデータベース接続は現代のバックエンド開発において非常に重要なスキルでありDockerと組み合わせることで開発環境の再現性や効率が大きく向上します。

まずDockerはアプリケーションとデータベースを分離して管理できる便利な仕組みであり開発環境構築の手間を大幅に削減できます。PostgreSQLやMySQLをコンテナとして起動することでローカル環境を汚さずに安全にデータベースを扱える点が大きなメリットです。

次にGo言語からデータベースへ接続するためにはドライバの導入が必要でありPostgreSQLではpqライブラリMySQLではgo sql driverが使用されます。これらのドライバはGoの標準パッケージであるdatabase sqlと連携して動作するため統一的なインターフェースで扱える点が特徴です。

また接続処理ではsql Openで接続準備を行いPingで実際の接続確認を行う流れが基本です。さらにQueryを使ってデータを取得しrows Nextで一件ずつ処理することでデータベース操作を実現できます。

Docker環境での接続ではlocalhostの扱いやポート番号の設定が非常に重要です。特にコンテナ同士の通信ではコンテナ名を使う必要があるためネットワーク構成を正しく理解することが安定した接続のポイントになります。

エラーが発生した場合にはユーザー名パスワードポート番号データベース名コンテナの起動状態などを一つずつ確認することが重要です。このようなトラブルシューティングの経験を積むことで実践的なスキルが身につきます。

実践で役立つサンプルコードの振り返り

以下にGo言語でデータベース接続からデータ取得までを行う基本的な流れをまとめたサンプルコードを示します。開発現場でもそのまま応用できる形になっているため繰り返し実行して理解を深めましょう。


package main

import (
    "database/sql"
    "fmt"
    _ "github.com/go-sql-driver/mysql"
)

func main() {
    dsn := "root:password@tcp(localhost:3306)/testdb"
    db, err := sql.Open("mysql", dsn)
    if err != nil {
        panic(err)
    }

    err = db.Ping()
    if err != nil {
        panic(err)
    }

    rows, err := db.Query("SELECT id, name FROM users")
    if err != nil {
        panic(err)
    }
    defer rows.Close()

    for rows.Next() {
        var id int
        var name string
        rows.Scan(&id, &name)
        fmt.Println(id, name)
    }

    fmt.Println("データ取得成功")
}

理解を深めるためのポイント整理

Go言語 Docker PostgreSQL MySQL データベース接続というキーワードはバックエンド開発において非常に重要でありこれらを組み合わせて使えるようになることで実務レベルの開発が可能になります。特にDockerを使った開発環境構築とGoのシンプルな構文は相性が良く効率的な開発を実現します。

またデータベース接続は単なる接続だけでなくデータの取得更新削除といった基本操作に発展していくため今回学んだ内容を土台としてさらに理解を深めていくことが重要です。

先生と生徒の振り返り会話

生徒

Go言語でDocker上のデータベースに接続する流れがかなり理解できました。Dockerでデータベースを起動してGoから接続するという考え方が大事なんですね。

先生

その通りです。Dockerは環境を分離するための仕組みでありGo言語はその環境にアクセスするクライアントの役割を担っています。この関係を理解することが重要です。

生徒

データベース接続ではドライバが必要という点も理解できました。PostgreSQLとMySQLで使うライブラリが違うのも覚えました。

先生

よく理解できていますね。さらにsql OpenとPingの役割を理解することで接続処理の流れが明確になります。

生徒

Docker環境ではlocalhostではなくコンテナ名を使う場合があるという点も重要ですね。ここでつまずきそうだと思いました。

先生

その気付きはとても大切です。ネットワーク設定は初心者がつまずきやすいポイントなのでしっかり理解しておきましょう。

生徒

今回の内容を応用すればWebアプリケーションのバックエンドも作れそうな気がしてきました。

先生

その通りです。今回のGo言語とDockerとデータベース接続の知識は実務でも非常に重要な基礎になります。繰り返し練習して確実に身につけていきましょう。

関連セミナーのご案内

【超入門】ゼロから始めるGo言語プログラミング:最速で「動くアプリ」を作るマンツーマン指導

「プログラミングの仕組み」が根本からわかる。Go言語でバックエンド開発の第一歩を。

本講座を受講することで、単なる文法の暗記ではなく、「プログラムがコンピュータの中でどう動いているか」という本質的な理解につながります。シンプルながら強力なGo言語(Golang)を通じて、現代のバックエンドエンジニアに求められる基礎体力を最短距離で身につけます。

具体的な開発内容と環境

【つくるもの】
ターミナル(黒い画面)上で動作する「対話型計算プログラム」や、データを整理して表示する「ミニ・ツール」をゼロから作成します。自分の書いたコードが形になる感動を体験してください。

【開発環境】
プロの現場でシェアNo.1のVisual Studio Code (VS Code)を使用します。インストールから日本語化、Go言語用の拡張機能設定まで、現場基準の環境を一緒に構築します。

この60分で得られる3つの理解

1. 環境構築の完全な理解

「なぜ動くのか」という設定の仕組みを理解し、今後の独学で詰まらない土台を作ります。

2. Go言語の基本構造(変数・型)

データの種類やメモリの概念など、他言語にも通じるプログラミングの本質を学びます。

3. 読みやすいコードの書き方

ただ動くだけでなく、誰が見ても分かりやすい「綺麗なコード」を書くための考え方を伝授します。

※本講座は、将来的にバックエンドエンジニアクラウドインフラに興味がある未経験者のためのエントリー講座です。マンツーマン形式により、あなたの理解度に合わせて進行します。

セミナー画像

初めてのGo言語を一緒に学びましょう!

カテゴリの一覧へ
新着記事
New1
Go言語
Go言語のswitchで複雑な条件分岐を整理するテクニック
New2
Go言語
Go言語の構造体の初期化パターンとコンストラクタ的関数の書き方を徹底解説!初心者でもわかる基本と実用例
New3
Go言語
Go言語のスライスを引数に渡す際の注意点!値渡しと参照渡しをわかりやすく解説
New4
Go言語
Go言語の構造体タグ(jsonタグなど)の使い方と活用例を初心者向けにやさしく解説
人気記事
No.1
Java&Spring記事人気No1
Kotlin
Android Studioのインストール手順と初期設定を初心者向けに完全解説!
No.2
Java&Spring記事人気No2
Swift
Swift StoryboardとAuto Layout|レスポンシブUIの作り方
No.3
Java&Spring記事人気No3
C#
C#の歴史とは?初心者向けに誕生理由と進化の流れをわかりやすく解説
No.4
Java&Spring記事人気No4
Kotlin
Gradleファイル(build.gradle.kts)の書き方と役割をやさしく解説!Kotlin初心者向け完全ガイド
No.5
Java&Spring記事人気No5
Swift
Swift入門ガイド|基本構文と書き方をマスターしよう
No.6
Java&Spring記事人気No6
Go言語
Go言語で条件式を1行で書くコツ!三項演算子の代替と短縮記法
No.7
Java&Spring記事人気No7
Swift
Swiftのcontinue・breakの使い方と注意点を徹底解説!初心者向け制御構文ガイド
No.8
Java&Spring記事人気No8
C#
C#の開発環境構築を完全ガイド!初心者でもわかる.NET SDKのインストール方法

💻 作業効率アップに

ノートPCを縦置きしてデスクを広く。
省スペースで片づく定番スタンド

UGREEN 縦型スタンドをAmazonで見る

※ Amazon広告リンク