Golangでバックエンド開発する用のDockerfile
1701 ワード
File構成(参考程度に)
メモ用、できるだけ簡潔かつ快適にするためのDockerfile
FROM golang:1.16.3-alpine
# 軽量
RUN apk add --update && apk add git
# git
ADD ./app /go/src/app
# ソースコードのコピー
WORKDIR /go/src/app
# 作業ディレクトリの指定
ENV GO111MODULE=on
# go.mod使うことを明示
RUN go get -u github.com/cosmtrek/air
# airの導入(後述)
RUN go mod download
# go.modの中身をダウンロード
EXPOSE 8000
# ポート
CMD ["air"]
続いて使う用のdocker-compose.yml。部分的だと想像がつきにくいので全て載せておく。
基本的に普通の分離構造ならフロント-バックエンド-データベースみたいな構成にしがちだと思う(フロントの言語でバックエンドもやるならその限りではない)。
version: '3'
services:
db:
image: postgres:latest
container_name: "db"
restart: always
environment:
POSTGRES_USER: admin
POSTGRES_PASSWORD: admin
ports:
- '9000:9000'
server:
build: ./server
container_name: "server"
ports:
- '8000:8000'
depends_on:
- db
volumes:
- ./server/app/:/go/src/app
front:
build: ./front
container_name: "front"
ports:
- '3000:3000'
volumes:
- ./front/app/:/usr/src/app
command: /bin/sh -c 'npm install && npm run dev'
airの導入(ホットリロード)
これはかなり開発速度に影響が出るので入れておきたい。最初にDockerfileとかだけ作っておいて
docker exec server go mod init <hoge>
docker exec server go get -u github.com/cosmtrek/air
docker exec server air
とかで試せる。しかしながらこれは本番環境で使うpackageではないのでDockerfileに滑り込ませる。
volumesによる同期
これもやっておかないと致命的、自分は最初このvolumesの意味が分かってなかったので職場で「なんでこれdocker上と同期してるんだ...?」ってなっていた。
Author And Source
この問題について(Golangでバックエンド開発する用のDockerfile), 我々は、より多くの情報をここで見つけました https://zenn.dev/energy_saving/articles/4056ca30e75e2a著者帰属:元の著者の情報は、元のURLに含まれています。著作権は原作者に属する。
Collection and Share based on the CC protocol