7
2

More than 1 year has passed since last update.

GoとGraphQLでサーバー実装 【環境構築編(Docker)】

Last updated at Posted at 2022-12-30

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)の投稿

7
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
7
2