📝
go の container app を remote debugging できるようにする
はじめに
前回の go のサンプルアプリを dockerize した 続きです。
アプリを 仮想化できたものの、debugging できないと開発では使えないので
その設定をしていく。
本記事で対応したPRになります。
無知なのでまず勉強
毎度のことですが調査してみたことを記す。
delve というデバッガを go は使用しているのでそれについて改めて調べる。
-
internal architecture of delve (内部構造をさらっとみる)
https://speakerdeck.com/aarzilli/internal-architecture-of-delve -
delve の document (今回はおもにこっちを見ました)
https://github.com/go-delve/delve/tree/master/Documentation/usage
Dockerfile を書いてみる
以前作成した、 Dockerfile に 下記の変更点を加える。
- delve の install
- remote debug 用の port 設定
- debug 起動
# syntax=docker/dockerfile:1
##
## Build
##
FROM golang:1.16-buster AS build
# Build Delve
RUN go install github.com/go-delve/delve/cmd/dlv@latest
WORKDIR /app
# Download necessary Go modules
COPY go.mod ./
COPY go.sum ./
RUN go mod download
COPY *.go ./
RUN go build -gcflags="all=-N -l" -o /web-service-gin
##
## Deploy
##
FROM gcr.io/distroless/base-debian10
WORKDIR /
COPY --from=build /web-service-gin /web-service-gin
COPY --from=build /go/bin/dlv /
EXPOSE 8081 40000
USER nonroot:nonroot
ENTRYPOINT ["/dlv", "--listen=:40000", "--headless=true", "--api-version=2", "--accept-multiclient", "exec", "/web-service-gin"]
IDEでの設定
Dockerfile の build の設定
- 使用するDockerfile を指定
- 任意のcontainer name を付与
- application の trafficを受けつける 8080 to 8081 と remote debug用の 40000 to 40000 を設定
Remote Debug の設定
- 任意の Name を付与
- Host を localhost とする
- デバッガ用の port number を指定
デバッグしてみる
わかりやすく 最初に呼ばれる router の設定の箇所に break point を張ってみました。
しっかり止まってくれました。
さいごに
go の container app を remote debug できるようにして見ました。
これで、local で e2e を通したい時には 資材さえ確保すれば 簡単に試すことができそうです。
現状 data は array の値を返しているだけなので 次回以降は これを redis とかに変更できたらよいなと思っています。
Discussion