質問編集履歴
1
追記しました!
title
CHANGED
File without changes
|
body
CHANGED
@@ -71,4 +71,69 @@
|
|
71
71
|
- "3306:3306"
|
72
72
|
volumes:
|
73
73
|
db-store:
|
74
|
-
```
|
74
|
+
```
|
75
|
+
|
76
|
+
※追記
|
77
|
+
|
78
|
+
以下のようなディレクトリ構成です。
|
79
|
+
|
80
|
+
```tree
|
81
|
+
├── DB
|
82
|
+
├── client
|
83
|
+
├── server
|
84
|
+
├── nginx
|
85
|
+
└── docker-compose.yml
|
86
|
+
```
|
87
|
+
|
88
|
+
それぞれにDockerイメージを立てて環境を構築しています。
|
89
|
+
|
90
|
+
現在の開発だと、
|
91
|
+
|
92
|
+
|
93
|
+
goのイメージに当たるDockerfileです。
|
94
|
+
|
95
|
+
```server/Dockerfile
|
96
|
+
# TODO マルチステージビルド(timezone) wait-for-it up時のコンテナ停止を防ぐ(DBの接続制御)
|
97
|
+
FROM golang:1.15-alpine
|
98
|
+
|
99
|
+
ENV CGO_ENABLED=0
|
100
|
+
ENV GOOS=linux
|
101
|
+
ENV GOARCH=amd64
|
102
|
+
|
103
|
+
WORKDIR /usr/src/app/server
|
104
|
+
|
105
|
+
COPY go.mod go.sum ./
|
106
|
+
RUN go mod download
|
107
|
+
COPY . .
|
108
|
+
|
109
|
+
RUN apk add --no-cache ca-certificates && \
|
110
|
+
apk --update add tzdata && \
|
111
|
+
cp /usr/share/zoneinfo/Asia/Tokyo /etc/localtime && \
|
112
|
+
apk del tzdata && \
|
113
|
+
rm -rf /var/cache/apk/*
|
114
|
+
|
115
|
+
RUN go build -o main ./cmd/index-indicator-apis/main.go
|
116
|
+
|
117
|
+
CMD ["/usr/src/app/server/./main"]
|
118
|
+
|
119
|
+
EXPOSE 8080
|
120
|
+
|
121
|
+
```
|
122
|
+
※こちらはまだ未完成であり、最終的にはalpineでマルチビルドをしたいと思っております。
|
123
|
+
現状のイメージでは./mainコマンドでバイナリファイルを実行しているので、goのソースコードを変える度に毎回コンテナを再生成しなければならないという認識です。
|
124
|
+
|
125
|
+
そこでとりあえず前述したdocker-compose.ymlを以下のようにしました。
|
126
|
+
```
|
127
|
+
services:
|
128
|
+
go:
|
129
|
+
|
130
|
+
//中略
|
131
|
+
volumes:
|
132
|
+
- "./server:/usr/src/app/server"
|
133
|
+
command: go run cmd/index-indicator-apis/main.go
|
134
|
+
//中略
|
135
|
+
```
|
136
|
+
これによりdocker-compose upを叩けばソースコードが反映されるという認識です。
|
137
|
+
|
138
|
+
ですが検索すると
|
139
|
+
AirやRealizeのホットリロードライブラリにより、ローカルのvscodeでソースコードの変更を保存するだけでgoがbuildされるというような記事を見つけましたが、docker,go共に学習歴の浅い私ではそれなりに導入コストがかかると感じた為より導入しやすく現場で使われている可能性が高いものを選びたいと思い質問させて頂きました!
|