From 67358d1e85b037c4f3a415cf889708bbe5bef1cb Mon Sep 17 00:00:00 2001 From: Svarog Date: Wed, 3 Apr 2019 12:46:00 +0300 Subject: [PATCH] [NOD-95] Added docker file and scripts to run dev instances for debugging (#241) * [NOD-95] Added docker file and scripts to run dev instances for debugging * [NOD-95] Enabled debugging from dockers * [NOD-95] Removed redundant entrypoint.sh file * [NOD-95] Removed multi-stage build artifacts from Dockerfile.dev * [NOD-95] Add --help to run-dev.sh --- docker/Dockerfile.dev | 25 ++++++++++++++++ docker/docker-compose.yml | 61 ++++++++++++++++++++++++++++++++++----- run-dev.sh | 39 +++++++++++++++++++++++++ 3 files changed, 117 insertions(+), 8 deletions(-) create mode 100644 docker/Dockerfile.dev create mode 100755 run-dev.sh diff --git a/docker/Dockerfile.dev b/docker/Dockerfile.dev new file mode 100644 index 000000000..734e6ff83 --- /dev/null +++ b/docker/Dockerfile.dev @@ -0,0 +1,25 @@ +FROM golang:1.12-alpine + +ENV PATH="${GOPATH}/bin:${PATH}" + +RUN mkdir -p /go/src/github.com/daglabs/btcd + +WORKDIR /go/src/github.com/daglabs/btcd + +RUN apk add --no-cache curl git openssh binutils gcc musl-dev tini bash +# Allow delve to run on Alpine based containers. +RUN apk add --no-cache libc6-compat + +RUN curl https://raw.githubusercontent.com/golang/dep/master/install.sh | sh + +RUN go get github.com/derekparker/delve/cmd/dlv + +COPY ./Gopkg.* ./ + +RUN dep ensure -v -vendor-only + +COPY . . + +RUN CGO_ENABLED=0 GOOS=linux go build -gcflags "all=-N -l" -a -installsuffix cgo -o btcd . + +ENTRYPOINT [ "/sbin/tini", "--" ] diff --git a/docker/docker-compose.yml b/docker/docker-compose.yml index 3d9f2d3fa..a4a04a74a 100644 --- a/docker/docker-compose.yml +++ b/docker/docker-compose.yml @@ -1,26 +1,71 @@ version: '3' services: first: - image: 956501169541.dkr.ecr.us-east-1.amazonaws.com/btcd:latest + image: btcd:latest + security_opt: + - apparmor=unconfined + cap_add: + - SYS_PTRACE command: [ - "btcd", + "./btcd", "--testnet", "--addrindex", - "--generate", + # "--generate", + "--nodnsseed", "--miningaddr=dagtest:qrm4zaetvny2yuh4wudf8y43fd20lunkxs8quragg8", "--rpcuser=user", "--rpcpass=pass", "--rpclisten=0.0.0.0:18334", - "--rpccert=docker/rpc.cert", - "--rpckey=docker/rpc.key" + "--rpccert=/go/src/github.com/daglabs/btcd/docker/rpc.cert", + "--rpckey=/go/src/github.com/daglabs/btcd/docker/rpc.key" ] ports: ["18334:18334"] + second: - image: 956501169541.dkr.ecr.us-east-1.amazonaws.com/btcd:latest + image: btcd:latest links: ["first"] + security_opt: + - apparmor=unconfined + cap_add: + - SYS_PTRACE command: [ - "btcd", + "./btcd", "--testnet", "--addrindex", - "--connect=first" + "--connect=first", + "--rpcuser=user", + "--rpcpass=pass", + "--miningaddr=dagtest:qrm4zaetvny2yuh4wudf8y43fd20lunkxs8quragg8", + "--rpclisten=0.0.0.0:18334", + "--rpccert=/go/src/github.com/daglabs/btcd/docker/rpc.cert", + "--rpckey=/go/src/github.com/daglabs/btcd/docker/rpc.key" ] + ports: ["18335:18334"] + + second-debug: + image: btcd:latest + links: ["first"] + security_opt: + - apparmor=unconfined + cap_add: + - SYS_PTRACE + command: [ + "dlv", + "--listen=:40000", + "--api-version=2", + "--headless=true", + "exec", + "./btcd", + "--", + # here starts btcd parameters + "--testnet", + "--addrindex", + "--connect=first", + "--rpcuser=user", + "--rpcpass=pass", + "--miningaddr=dagtest:qrm4zaetvny2yuh4wudf8y43fd20lunkxs8quragg8", + "--rpclisten=0.0.0.0:18334", + "--rpccert=/go/src/github.com/daglabs/btcd/docker/rpc.cert", + "--rpckey=/go/src/github.com/daglabs/btcd/docker/rpc.key" + ] + ports: ["18335:18334", "40000:40000"] diff --git a/run-dev.sh b/run-dev.sh new file mode 100755 index 000000000..aace61164 --- /dev/null +++ b/run-dev.sh @@ -0,0 +1,39 @@ +#!/bin/bash + +# This is a short script that compiles the code inside a docker container, and runs two instances connected to each other +# docker defenition is in docker/Dockerfile.dev +# instances defenition is in docker/docker-compose.yml + +set -e + +if [[ $* == *--help* ]] +then + echo "Usage:" + echo -e "\t./run-def.sh [--rm] [--debug]" + echo "" + echo -e "\t--rm\t\tRemove dockers prior to running them, to clear data" + echo -e "\t--debug\t\tEnable debugging on second server. Server will not start until debugger is attached" + exit +fi + +export SERVICE_NAME=btcd +export GIT_COMMIT=$(git rev-parse --short=12 HEAD) + +docker build -t "${SERVICE_NAME}:${GIT_COMMIT}" . \ + -f docker/Dockerfile.dev \ + || fatal 'Failed to build the docker image' +docker tag "${SERVICE_NAME}:${GIT_COMMIT}" "${SERVICE_NAME}:latest" + +cd docker + +if [[ $* == *--rm* ]] +then + docker-compose rm -f +fi + +if [[ $* == *--debug* ]] +then + docker-compose up first second-debug +else + docker-compose up first second +fi