|
| 1 | +# syntax = docker/dockerfile:1.2 |
| 2 | +FROM docker.io/library/golang:1.19-bullseye AS builder |
| 3 | + |
| 4 | +RUN apt update |
| 5 | +RUN apt install -y build-essential git bash ca-certificates libstdc++6 |
| 6 | + |
| 7 | +WORKDIR /app |
| 8 | +ADD go.mod go.mod |
| 9 | +ADD go.sum go.sum |
| 10 | + |
| 11 | +RUN go mod download |
| 12 | +ADD . . |
| 13 | + |
| 14 | +RUN --mount=type=cache,target=/root/.cache \ |
| 15 | + --mount=type=cache,target=/tmp/go-build \ |
| 16 | + --mount=type=cache,target=/go/pkg/mod \ |
| 17 | + make all |
| 18 | + |
| 19 | + |
| 20 | +FROM docker.io/library/golang:1.19-alpine3.16 AS tools-builder |
| 21 | + |
| 22 | +RUN apk --no-cache add build-base linux-headers git bash ca-certificates libstdc++ |
| 23 | +WORKDIR /app |
| 24 | + |
| 25 | +ADD Makefile Makefile |
| 26 | +ADD tools.go tools.go |
| 27 | +ADD go.mod go.mod |
| 28 | +ADD go.sum go.sum |
| 29 | + |
| 30 | +RUN mkdir -p /app/build/bin |
| 31 | + |
| 32 | +RUN make db-tools |
| 33 | + |
| 34 | +FROM docker.io/library/debian:bullseye |
| 35 | + |
| 36 | +# install required runtime libs, along with some helpers for debugging |
| 37 | +RUN apt update |
| 38 | +RUN apt install -y ca-certificates libstdc++6 tzdata |
| 39 | +RUN apt install -y curl jq dnsutils |
| 40 | + |
| 41 | +# Setup user and group |
| 42 | +# |
| 43 | +# from the perspective of the container, uid=1000, gid=1000 is a sensible choice |
| 44 | +# (mimicking Ubuntu Server), but if caller creates a .env (example in repo root), |
| 45 | +# these defaults will get overridden when make calls docker-compose |
| 46 | +ARG UID=1000 |
| 47 | +RUN adduser --uid $UID erigon |
| 48 | +USER erigon |
| 49 | +RUN mkdir -p ~/.local/share/erigon |
| 50 | + |
| 51 | +# copy compiled artifacts from builder |
| 52 | +## first do the mdbx ones - since these wont change as often |
| 53 | +COPY --from=tools-builder /app/build/bin/mdbx_chk /usr/local/bin/mdbx_chk |
| 54 | +COPY --from=tools-builder /app/build/bin/mdbx_copy /usr/local/bin/mdbx_copy |
| 55 | +COPY --from=tools-builder /app/build/bin/mdbx_drop /usr/local/bin/mdbx_drop |
| 56 | +COPY --from=tools-builder /app/build/bin/mdbx_dump /usr/local/bin/mdbx_dump |
| 57 | +COPY --from=tools-builder /app/build/bin/mdbx_load /usr/local/bin/mdbx_load |
| 58 | +COPY --from=tools-builder /app/build/bin/mdbx_stat /usr/local/bin/mdbx_stat |
| 59 | + |
| 60 | +## then give each binary its own layer |
| 61 | +COPY --from=builder /app/build/bin/devnet /usr/local/bin/devnet |
| 62 | +COPY --from=builder /app/build/bin/downloader /usr/local/bin/downloader |
| 63 | +COPY --from=builder /app/build/bin/erigon /usr/local/bin/erigon |
| 64 | +COPY --from=builder /app/build/bin/erigon-cl /usr/local/bin/erigon-cl |
| 65 | +COPY --from=builder /app/build/bin/evm /usr/local/bin/evm |
| 66 | +COPY --from=builder /app/build/bin/hack /usr/local/bin/hack |
| 67 | +COPY --from=builder /app/build/bin/integration /usr/local/bin/integration |
| 68 | +COPY --from=builder /app/build/bin/lightclient /usr/local/bin/lightclient |
| 69 | +COPY --from=builder /app/build/bin/observer /usr/local/bin/observer |
| 70 | +COPY --from=builder /app/build/bin/pics /usr/local/bin/pics |
| 71 | +COPY --from=builder /app/build/bin/rpcdaemon /usr/local/bin/rpcdaemon |
| 72 | +COPY --from=builder /app/build/bin/rpctest /usr/local/bin/rpctest |
| 73 | +COPY --from=builder /app/build/bin/sentinel /usr/local/bin/sentinel |
| 74 | +COPY --from=builder /app/build/bin/sentry /usr/local/bin/sentry |
| 75 | +COPY --from=builder /app/build/bin/state /usr/local/bin/state |
| 76 | +COPY --from=builder /app/build/bin/txpool /usr/local/bin/txpool |
| 77 | +COPY --from=builder /app/build/bin/verkle /usr/local/bin/verkle |
| 78 | + |
| 79 | +EXPOSE 8545 \ |
| 80 | + 8551 \ |
| 81 | + 8546 \ |
| 82 | + 30303 \ |
| 83 | + 30303/udp \ |
| 84 | + 42069 \ |
| 85 | + 42069/udp \ |
| 86 | + 8080 \ |
| 87 | + 9090 \ |
| 88 | + 6060 |
| 89 | + |
| 90 | +# https://github.com/opencontainers/image-spec/blob/main/annotations.md |
| 91 | +ARG BUILD_DATE |
| 92 | +ARG VCS_REF |
| 93 | +ARG VERSION |
| 94 | +LABEL org.label-schema.build-date=$BUILD_DATE \ |
| 95 | + org.label-schema.description="Erigon Ethereum Client" \ |
| 96 | + org.label-schema.name="Erigon" \ |
| 97 | + org.label-schema.schema-version="1.0" \ |
| 98 | + org.label-schema.url="https://torquem.ch" \ |
| 99 | + org.label-schema.vcs-ref=$VCS_REF \ |
| 100 | + org.label-schema.vcs-url="https://github.com/ledgerwatch/erigon.git" \ |
| 101 | + org.label-schema.vendor="Torquem" \ |
| 102 | + org.label-schema.version=$VERSION |
0 commit comments