Qiita Teams that are logged in
You are not logged in to any team

Log in to Qiita Team
Community
OrganizationAdvent CalendarQiitadon (β)
Service
Qiita JobsQiita ZineQiita Blog
Help us understand the problem. What is going on with this article?

GoのRealizeを使ってDocker-composeでホットリロードの開発環境を構築する

はじめに

この記事はITRC Advent Calendar 2020の14日目の記事です。
前の記事→ 助けてドッカーマン(Network編)
こんにちはRIN1208です今回はRealizeを使ってDocker-composeでホットリロードの開発環境を構築していきたいと思います。

必要環境

  • docker-compose
  • mac os

上記の環境で説明していきます

構築する

リポジトリはこちら

今回ホットリロードの開発環境を構築する上で必要なファイルは以下の5つです
- Dockerfile
- docker-compose.yml
- go.mod パッケージ管理
- .realize.yml realizeの設定ファイルです
- goのプロジェクト

まずはinstall

$ go get -u github.com/oxequa/realize

Dockerfileを書く

まずはDockerfileの作成です。こちらではファイルのコピーなどは行いません。理由は後ほど説明します。

FROM golang:1.14

RUN go get github.com/oxequa/realize 

ENV CGO_ENABLED=0 \
    GOOS=linux \
    GOARCH=amd64 \
    GO111MODULE=on

EXPOSE 8080

CMD ["realize", "start", "--build","--run"]

docker-compose.ymlを書く

次にdocker-compose.ymlを書きます。
ここでvolumesを設定します。
Dockerfileでコピーした場合コンテナのビルド時にコピーされてしまう為ホットリロードで開発できないので注意してください。
自分は気づかずにハマりました

version: '3'
services:

  api:
    build: .
    ports:
      - "8080:8080"
    tty: true
    volumes:
      - ./:/app
    working_dir: /app

.realize.ymlを書く

次に.realize.ymlを作成します。細かい説明はコメントにて説明していきます

settings:
  legacy:
    force: true
    interval: 0s
schema:
- name: test
  path: .
  commands:
    install: # ファイルが変更された際に実行されます。今回はbuildしてmainというファイルに指定しています
      status: true
      method: go build -o main main.go 
    run: # buildしたファイルを実行しています
      status: true
      method: ./main 
  watcher: # ここでは監視するファイルを選択しています
    extensions:
    - go
    - env
    paths: # ここでは監視するディレクトリを選択しています。/api配下のファイルのみ監視したい場合は/apiと変更すれば大丈夫です
    - /
    ignored_paths: # ここでは監視から除外するファイルを選択しています
    - .git
    - .realize
    - vendor

goのプロジェクトを作成する

適当にgoのプロジェクトを作成します。今回はginを使ったapiサーバーを作成します

package main

import (
    "github.com/gin-gonic/gin"
)

func main() {
    r := gin.Default()
    r.GET("/", hoge)
    r.Run() 
}

func hoge(c *gin.Context) {
    c.JSON(200, "hogeaaaaaae")
}

起動してみる

それでは起動してみましょう。

$ docker-compose build
$ docker-compose up -d 

上記のコマンドを実行しコンテナを起動します。
ブラウザやcurlでhttp://localhost:8080/ を確認してみるとhogeaaaaaaeと帰ってきます。
またhugaと変更すればhugaと帰ってくるようになっており、ホットリロードの開発環境が構築することができます

終わりに

ここまで読んでくださりありがとうございます。
Realize自体は半年以上前に触れていたのですが記事に書いていなかったので今回記事に書きました
Realizeを使ってDocker-composeでホットリロードの開発環境を構築しようとしている方の手助けになれば幸いです。
また間違っている点などがございましたらコメントなどで指摘していただけると助かります。

rin1208
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away