なんとなくGolangのブロジェクトに機能追加しようと思いました。
Golangの開発用に、Dockerfile等を準備する手順を書いておこうと思います。
サンプルにnfpm
サンプルとして、Forkしたnfpmを題材にします。
まぁなんでもいいんですが一応、目標が合ったほうがやる気が出るので。
環境
- WSL2
- ubuntu 24.04 LTS
- Docker 26.1.0
Dockerfile.golang
nfpmはgolang 1.22なので1.22の最新版を元にします。
FROM golang:1.22.2-alpine
RUN apk update && apk add git build-base
ENV CGO_ENABLED 1
RUN go install mvdan.cc/gofumpt@latest
docker buildからrunまで
dockerをbuildし、testを起動するまでの環境を整えます。
$ docker build . -f ./Dockerfile.golang
$ docker image ls
REPOSITORY TAG IMAGE ID CREATED SIZE
<none> <none> 0df06e58a41f 3 minutes ago 465MB
### 0df06e58a41f はIMAGE ID
$ docker tag 0df06e58a41f golang-dev:latest
$ docker run --name golang-dev -v `pwd`:/src --rm -it golang-dev /bin/sh
taskfile.dev
nfpmはtaskというmake的なコマンドを前提として設定してあります。
なので以下のようにtaskコマンドをダウンロードしておきます。
$ curl -LO https://github.com/go-task/task/releases/download/v3.36.0/task_linux_amd64.tar.gz
$ tar xfz task_linux_amd64.tar.gz
### カレントディレクトリに./taskコマンドを置く
test
Docker内で、testは以下のようにできます。
# cd /src
# ./task test
...
--- PASS: TestIgnoreUnrelatedFiles (0.00s)
PASS
coverage: 22.0% of statements in ./...
ok github.com/goreleaser/nfpm/v2/rpm 5.031s coverage: 22.0% of statements in ./...
build
buildは以下のようにできます。最近のgitは脆弱性対策としてsafe.directoryを指定する必要があります。
# git config --global --add safe.directory /src
# ./task build
終わりに
buildまでの手順を記述しました。
とっさになかなか出ないのでメモ書きとして使えればいいかなと思います。
参考
https://qiita.com/___yusuke49/items/0f6577b0b6af5f63671b
https://qiita.com/KEINOS/items/fd6a299961e3b8f3864f