📝

go の container app を remote debugging できるようにする

2022/07/11に公開

はじめに

前回の go のサンプルアプリを dockerize した 続きです。
アプリを 仮想化できたものの、debugging できないと開発では使えないので
その設定をしていく。

本記事で対応したPRになります。
https://github.com/d-angelo-2049/go-challenge/pull/6

無知なのでまず勉強

毎度のことですが調査してみたことを記す。
delve というデバッガを go は使用しているのでそれについて改めて調べる。

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 を設定

Docker build の設定

Remote Debug の設定

  • 任意の Name を付与
  • Host を localhost とする
  • デバッガ用の port number を指定
    Remote Debug の設定

デバッグしてみる

わかりやすく 最初に呼ばれる router の設定の箇所に break point を張ってみました。
しっかり止まってくれました。

break point で止まりました

さいごに

go の container app を remote debug できるようにして見ました。
これで、local で e2e を通したい時には 資材さえ確保すれば 簡単に試すことができそうです。
現状 data は array の値を返しているだけなので 次回以降は これを redis とかに変更できたらよいなと思っています。

GitHubで編集を提案

Discussion