🐙
Go×SQLiteをdockerで動かす
はじめに
GoとSQliteを使った簡単なアプリケーションをdockerを用いて作成しDeployするところまでを解説します。
実行環境
PC m2 MacBookAir
OS MacOS13.2.1
Docker Desktop 4.17.0
アプリ構成
main.goとsqlite.dbだけで構成された簡単なアプリを例とします。
├── go.mod
├── go.sum
├── main.go
└── sqlite.db
SQlite
SQLiteは軽量なRDBで面倒なインストールなどが不要です。また、クラウドのRDBMSは高額ですが、SQLiteを使うことで、手軽にRDBを使うことができます。
SQLite Driver
GoではSQLite Driverがいくつか提供されています。SQLiteはC言語で実装されておりGoの多くのDriverはcgoを用いています。Driverは好きなものを使えば大丈夫です。
- cgo依存
- pureGo
- Driver一覧
Dockerfile
Goは単一バイナリファイルで実行できるという強みがあります。Binaryファイルが実行できる小さいDockerimageを作成することで、Deployフローの高速化などにつながります。
multi-stage-build
multi-stage-buildを用いることで、buildで使用する環境と実行で使用する環境を分けることができます。この機能を使用することでDockerimageを小さくすることができます。
SQLiteを使う上での注意
Docker内で RUN apk add --no-cache git sqlite-dev gcc musl-dev
というコマンドでsqlite関連やgccを入れています。これをしないと、SQLiteを呼び出すことができないので注意してください。
Dokcerfile
# build環境
FROM golang:1.20.2-alpine as builder
WORKDIR /app
COPY go.mod go.sum ./
RUN go mod download
RUN apk add --no-cache git sqlite-dev gcc musl-dev
COPY . .
RUN go build -o main .
# 実行環境
FROM alpine
RUN apk update && apk upgrade
RUN mkdir /app
WORKDIR /app
COPY /app/main ./main
COPY ./sqlite.db ./sqlite.db
CMD ["./main"]
build
dockerをbuildします
$ docker build -t ${{tag}} .
起動
$ docker start [OPTIONS] CONTAINER [CONTAINER...]
Discussion