はじめに
バックエンドにGoを使いたいと思ったときに作ったものです。
とりあえず動作する開発環境を作りたいという方におすすめです。
私自身、Dockerを用いたGoの開発環境の構築に苦労しましたので、同じく苦労している方の参考になれば幸いです。
フォルダ構成
フォルダ構成は以下のとおりです。
project
├backend
│ └Dockerfile
│ └cmd/
│ └─api/
│ └─main.go
└docker-compose.yml
具体的な手順
まず、Dockerfileを以下のとおり作成します。
FROM golang:1.19.1-alpine3.16
WORKDIR /app
# 最初は以下の部分はコメントアウトする
# COPY backend/go.mod .
# COPY backend/go.sum .
# RUN go mod download
# RUN apk add --no-cache gcc
# RUN apk add --no-cache musl-dev
# COPY ./backend .
# CMD ["go", "run", "./cmd/api"]
次に、docker-compose.ymlを以下のとおり作成します。
version: "3.3"
services:
backend:
build:
context: .
dockerfile: ./backend/Dockerfile
ports:
- 8080:8080
volumes:
- ./backend:/app
以上のファイルを作成したらprojectディレクトリで以下のコマンドを実行しイメージを作成します。
docker compose build
イメージが作成出来たら、以下のコマンドを実行しコンテナに入ります。
docker compose run --rm backend sh
コンテナに入ったら、以下のコマンドを実行します。
backendディレクトリ直下に「go.mod」が作成されます。
go mod init backend
続いて、何かモジュールをインストールします。ここでは、例えば、uuidをインストールします。すると、backendディレクトリ直下に「go.sum」が作成されます。
go get github.com/google/uuid
以上の作業を終えたらexitコマンドを実行しコンテナから抜けます。
exit
ここで、Dockerfileのコメントアウトを解除します。
FROM golang:1.19.1-alpine3.16
WORKDIR /app
# コメントアウトを解除
COPY backend/go.mod .
COPY backend/go.sum .
RUN go mod download
RUN apk add --no-cache gcc
RUN apk add --no-cache musl-dev
COPY ./backend .
CMD ["go", "run", "./cmd/api"]
解除したらprojectディレクトリで以下のコマンドを実行しイメージを再作成します。
docker compose build
ここで、main.goの中身を以下のとおり編集します。今回はサンプルなので簡単な内容にします。
package main
import (
"fmt"
)
func main() {
fmt.Println("Hello World!")
}
そして、以下のコマンドを実行し、ターミナルに「Hello World!」と表示されれば成功です。
docker compose up
・
・
・
Hello World!
まとめ
以上、とりあえず動作するDockerを用いたGoの開発環境の作り方を説明しました。