DockerでGoとPostgreSQLの環境構築
間違っている部分、エラーが発生する部分、わかりにくい部分などがございましたら、是非ご指摘をお願い致します。
この記事の内容
この記事はGo,GraphQL,PostgreSQLと使用してサーバの実装のPart1になります。
今回はDockerを用いてGoとPostgreSQLの環境構築を行います。
Github Repo
この記事で紹介するコードはGithubに置いています。
dockerファイルの作成
今回のディレクトリ構成
gqlgen-todos
├── docker
│ └── go
│ └── Dockerfile
└── docker-compose.yaml
Dockerfile
Goのイメージには軽量なalpineを使用しています。
- git: go getが内部的に呼び出しているらいしい! alpineにはgitが入っていないのでインストール
- alpine-sdk: build-essentialのようなもの。開発に必須のビルドツールみたい。
docker/go/Dockerfile
# goバージョン
FROM golang:1.19.1-alpine
# アップデートとgit、alpine-sdkのインストール
RUN apk update && apk add git && apk add alpine-sdk
# 環境変数の設定
ENV APP_ROOT /app
# ディレクトリの作成
RUN mkdir $APP_ROOT
# ワーキングディレクトリの設定
WORKDIR $APP_ROOT
# Goの詳細設定
ENV CGO_ENABLED=1 \
GOOS=linux \
GOARCH=amd64 \
GO111MODULE=on
# ルートディレクトリを作業ディレクトリにコピー
COPY . $APP_ROOT
EXPOSE 8080
docker-compose.yml
GoとDBのコンテナを立てるため、docker-compose.yamlを作成
docker-compose.yml
version: '3.9'
services:
server: #サービス名
build:
context: ./docker/go #ビルドに使用するDockerfileの場所
dockerfile: Dockerfile
container_name: gqlgen-todos #コンテナの名前
tty: true #コンテナの永続化
ports:
- '8080:8080'
depends_on: #依存関係
- db
volumes: #マウントディレクトリ
- .:/app
- go-data:/go
db: #サービス名
image: postgres:latest #ビルドに使用するimageファイル
container_name: postgres #コンテナの名前
environment:
POSTGRES_DB: 'todo' #データベース名
POSTGRES_PASSWORD: 'password' #データベースパスワード
POSTGRES_USER: 'postgres' #データベースユーザ名
TimeZone: Asia/Tokyo #タイムゾーン
ports:
- '5432:5432'
volumes: #マウントディレクトリ
- /var/lib/postgres/data
volumes:
go-data:
コンテナの作成・実行
下記コマンドを実行し、コンテナを作成し実行します。
$ docker-compose
Successfully built ....
$ docker-compose up -d
Creating postgres ... done
Creating gqlgen-todos ... done
###コンテナの中にアクセスする
コンテナを停止
$ docker-compose stop
Stopping gqlgen-todos ... done
Stopping postgres ... done
まとめ
GoとPostgreSQLの環境構築を行いました。
次回からは、gqlgenを使用してGo、Graphql、PostgreSQLを使用したTodoアプリの作成を行っていきます。
次回(Part2)の投稿