質問編集履歴

1

追記しました!

2020/12/17 08:22

投稿

Shika_Tech
Shika_Tech

スコア13

test CHANGED
File without changes
test CHANGED
@@ -145,3 +145,133 @@
145
145
  db-store:
146
146
 
147
147
  ```
148
+
149
+
150
+
151
+ ※追記
152
+
153
+
154
+
155
+ 以下のようなディレクトリ構成です。
156
+
157
+
158
+
159
+ ```tree
160
+
161
+ ├── DB
162
+
163
+ ├── client
164
+
165
+ ├── server
166
+
167
+ ├── nginx
168
+
169
+ └── docker-compose.yml
170
+
171
+ ```
172
+
173
+
174
+
175
+ それぞれにDockerイメージを立てて環境を構築しています。
176
+
177
+
178
+
179
+ 現在の開発だと、
180
+
181
+
182
+
183
+
184
+
185
+ goのイメージに当たるDockerfileです。
186
+
187
+
188
+
189
+ ```server/Dockerfile
190
+
191
+ # TODO マルチステージビルド(timezone) wait-for-it up時のコンテナ停止を防ぐ(DBの接続制御)
192
+
193
+ FROM golang:1.15-alpine
194
+
195
+
196
+
197
+ ENV CGO_ENABLED=0
198
+
199
+ ENV GOOS=linux
200
+
201
+ ENV GOARCH=amd64
202
+
203
+
204
+
205
+ WORKDIR /usr/src/app/server
206
+
207
+
208
+
209
+ COPY go.mod go.sum ./
210
+
211
+ RUN go mod download
212
+
213
+ COPY . .
214
+
215
+
216
+
217
+ RUN apk add --no-cache ca-certificates && \
218
+
219
+ apk --update add tzdata && \
220
+
221
+ cp /usr/share/zoneinfo/Asia/Tokyo /etc/localtime && \
222
+
223
+ apk del tzdata && \
224
+
225
+ rm -rf /var/cache/apk/*
226
+
227
+
228
+
229
+ RUN go build -o main ./cmd/index-indicator-apis/main.go
230
+
231
+
232
+
233
+ CMD ["/usr/src/app/server/./main"]
234
+
235
+
236
+
237
+ EXPOSE 8080
238
+
239
+
240
+
241
+ ```
242
+
243
+ ※こちらはまだ未完成であり、最終的にはalpineでマルチビルドをしたいと思っております。
244
+
245
+ 現状のイメージでは./mainコマンドでバイナリファイルを実行しているので、goのソースコードを変える度に毎回コンテナを再生成しなければならないという認識です。
246
+
247
+
248
+
249
+ そこでとりあえず前述したdocker-compose.ymlを以下のようにしました。
250
+
251
+ ```
252
+
253
+ services:
254
+
255
+ go:
256
+
257
+
258
+
259
+ //中略
260
+
261
+   volumes:
262
+
263
+ - "./server:/usr/src/app/server"
264
+
265
+ command: go run cmd/index-indicator-apis/main.go
266
+
267
+ //中略
268
+
269
+ ```
270
+
271
+ これによりdocker-compose upを叩けばソースコードが反映されるという認識です。
272
+
273
+
274
+
275
+ ですが検索すると
276
+
277
+ AirやRealizeのホットリロードライブラリにより、ローカルのvscodeでソースコードの変更を保存するだけでgoがbuildされるというような記事を見つけましたが、docker,go共に学習歴の浅い私ではそれなりに導入コストがかかると感じた為より導入しやすく現場で使われている可能性が高いものを選びたいと思い質問させて頂きました!