はじめに
この記事は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でホットリロードの開発環境を構築しようとしている方の手助けになれば幸いです。
また間違っている点などがございましたらコメントなどで指摘していただけると助かります。