teratail header banner
teratail header banner
質問するログイン新規登録

質問編集履歴

1

追記しました!

2020/12/17 08:22

投稿

Shika_Tech
Shika_Tech

スコア13

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共に学習歴の浅い私ではそれなりに導入コストがかかると感じた為より導入しやすく現場で使われている可能性が高いものを選びたいと思い質問させて頂きました!