37
25

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

GolandでDocker上のサーバーをRemote Debug

Last updated at Posted at 2018-06-13

今回やりたかったこと

会社の同僚から以前作成していたアプリを配布するためのサイトをDocker上でリバースプロキシで接続できるようにしてくれ。ということで、なんとかサーバーを起動するまではできたのですが、Docker上でデバッグすることにはどうすればいいかわかりませんでした。

ということで、今回やりたかったことは、docker-composeでechoサーバーをDockerに立ち上げて、Remote Debugすることです。

docker-composeで複数のコンテナを管理したかったのですが、GolandのブログではDockerfileのRemote Debugの方法しかなかったので苦戦しました。

(成果物はGithubにアップしています。)

ディレクトリ構成

echo+MySQL+Nginx(リバースプロキシサーバー)の構築を想定しています。

スクリーンショット 2018-06-13 23.34.02.png

#docker-compose.ymlの設定
ブログにあるように

–security-opt=”apparmor=unconfined” –cap-add=SYS_PTRACE

をdocker-compose.ymlに追加します。
デバッガに使用するdelveのために2345を公開します。

docker-compose.yml

version: '3'
services:
  db:
    image: mysql:5.7
    ports:
      - "3306:3306"
    environment:
      MYSQL_DATABASE: archive
      MYSQL_ROOT_PASSWORD: password
      MYSQL_USER: user
      MYSQL_PASSWORD: password
    volumes:
      - ./mysql/volumes:/var/lib/mysql
  web:
    build: ./go
    privileged: true
    ports:
      - "9000"
      - "2345:2345"
    links:
      - db
    security_opt:
      - apparmor:unconfined
    cap_add:
      - SYS_PTRACE
  proxy:
    build: ./proxy
    ports:
      - "80:80"
    links:
      - web

#GoのDockerfileの設定
必要なライブラリを取得して、delveを起動するように書きました。
(最後のコマンドが実行されても、サーバーは起動していない状態です。)

Dockerfile
FROM golang:1.10

RUN go get github.com/labstack/echo
RUN go get github.com/labstack/echo/middleware

RUN go get github.com/derekparker/delve/cmd/dlv

COPY ./src /go/src
WORKDIR /go/src/app

RUN go build -gcflags "all=-N -l" -o /server app.go

CMD ["dlv", "--listen=:2345", "--headless=true", "--api-version=2", "exec", "/server"]

#デバッグの設定
受話器を持ったゴーファーくんがかわいい。
スクリーンショット 2018-06-14 0.18.40.png

#GOPATHの設定
この設定にたどり着くのに数時間かかりました...。デフォルトの設定ではGlobal GOPATHに最初に設定したであろうGOPATHが設定されています。Project GOPATHに注目してください。2種類GOPATHが設定されています。

まず1つ目のGOPATHはDockerのgoコンテナのGOPATHである/goに合わせたGOPATHです。これを設定することでブレイクポイントで止めることができるようになりました。

次に2つ目のGOPATHはGlobal GOPATHに設定されていたGOPATHです。これがないとコード補完が機能しなくなります。

スクリーンショット 2018-06-14 0.20.47.png

#docker-compose up
echoのコンテナ、MySQLのコンテナ、nginxのコンテナが立ち上がった状態です。
スクリーンショット 2018-06-14 0.32.25.png

#デバッグ
先程設定したデバッグの設定でDebugボタンを押します。
スクリーンショット 2018-06-14 0.35.16.png

http://localhost/app/index
にアクセスしてブレイクポイントで止まったら成功です。

37
25
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
37
25

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?