Golang + PostgreSQLの開発環境をDockerで構築

  • Docker
  • DB
  • Golang

はじめに

バックエンドをGolang(Go言語)とPostgreSQLで開発する機会があったので、そのときに作成したDockerによる開発環境について記事にしたいと思います。

ホストのマシンで環境を用意してもよいのですが、環境を汚したくないのでDockerで構築しました。さくっと実行環境が作れるのでDockerは本当に重宝します。🙏

リポジトリを用意しているので、興味のある方はご覧ください。README.mdに手順を記載しています。
🌐 https://github.com/nemuvski/dev-golang-psql

このまま終わってもよい感じですが... とはいえ、何も説明しないのもあれなので、内容について軽く触れたいと思います。

設定ファイル

ディレクトリ構成は次のようになっています。

|-- .gitignore
|-- README.md
|-- docker
|   |-- app
|   |   `-- Dockerfile
|   |-- pgadmin4
|   |   `-- .env.example
|   `-- postgresql
|       |-- .env.example
|       `-- Dockerfile
|-- docker-compose.yml
`-- src
    `-- main.go

.gitignoreREADME.md については説明は省略します。

🌐 https://github.com/nemuvski/dev-golang-psql をご参照ください。

srcディレクトリ

src/ にはGoのコードを格納します。ここでは main.go しか入れていませんが、好きなように変えていただければと思います。

go.mod といったファイルは src/ の1つ上の階層におかれる想定です。

docker/appディレクトリ

ここにはGolangの実行環境のイメージ定義ファイル Dockerfile を格納しています。

Dockerfileの内容はとてもシンプルにしていて、作業ディレクトリの設定とgitコマンドのインストールしかしていません。

もし、EchoGinなどを使って、Webアプリ・REST APIを開発するといった場合は、コンテナ外からアクセスできるようにEXPOSEで利用するポートを設定しておきましょう。

Goのバージョンを変えたい場合はFROMにあるイメージのタグを編集してください。軽量なAlpineベースのイメージを利用するのがおすすめです。タグの内容はGolangイメージのDocker Hubで確認できます。

docker/pgadmin4ディレクトリ

pgAdmin4はPostgreSQLをGUIで操作できるクライアントツールです。

このディレクトリには .env.example を入れています。実際にコンテナを作る際はこのファイルをコピーして .env で保存してください。

ファイルの内容は、pgAdmin4にログインするアカウントのメールアドレスとパスワードを記述しています。

もし、pgAdmin4が不要という場合は後述する docker-compose.yml からコンテナの定義を削除してください。

docker/postgresqlディレクトリ

Dockerfile.env.example を格納しています。

.env.example も同じように .env という名前でコピーして内容を記入してください。

Dockerfile ではロケールの設定をしています。これについては公式イメージの説明に書かれていますので、気になる方はご覧ください。

docker-compose.yml

コンテナの設定について記述しています。もし使われる際は好きなようにカスタマイズしまくっちゃってください。😉

コンテナはPostgreSQL、pgAdmin4、Golang実行環境の3つが立ちあがります。DBデータとpgAdmin4設定は残したいのでボリュームで永続化するようにしています。

特筆する点はないですが、1つだけ。コンテナごとにログドライバの設定をしていますが、変えていただいて問題ないです。

max-sizemax-fileを指定しないと延々とログが溜まり続けると容量圧迫に繋がるのが嫌なのと、ローカルの開発環境であれば直近のログがあればよいと考えるので指定するようにしています。開発する内容にもよるかと思いますが、3〜5MB分のログで十分かと思います。

おわりに

Golang + PostgreSQL(+pgAdmin4)の実行環境をDockerで構築するというお話でした。

実際にこの環境で快適に開発できています。GORM(GolangのORMライブラリの1つ)を使ってPostgreSQLとデータ操作をして、Echo使ってREST API開発なんてことをしています。

さくっとGolangでREST API作ってみたいという方に、ご参考になれば幸いです。使いやすいように独自にカスタマイズしていただければと思います!

この記事を共有

アバター

K.Utsunomiya
主にWeb技術について投稿していきます。
詳しいプロフィール