agent/Dockerfile
Rama master · réplica de lectura del repositorio original.
ARG DOCKERHUB_MIRROR=
ARG GOLANG_VERSION
ARG ALPINE_VERSION
ARG AIR_VERSION
ARG GOLANGCI_LINT_VERSION
ARG MOCKERY_VERSION
FROM --platform=$BUILDPLATFORM ${DOCKERHUB_MIRROR}cosmtrek/air:${AIR_VERSION} AS air
FROM --platform=$BUILDPLATFORM ${DOCKERHUB_MIRROR}golangci/golangci-lint:${GOLANGCI_LINT_VERSION}-alpine AS golangci-lint
FROM --platform=$BUILDPLATFORM ${DOCKERHUB_MIRROR}vektra/mockery:${MOCKERY_VERSION} AS mockery
FROM --platform=$BUILDPLATFORM ${DOCKERHUB_MIRROR}golang:${GOLANG_VERSION} AS toolchain
RUN apk add --no-cache ca-certificates git
FROM toolchain AS base
ARG TARGETARCH
ARG TARGETOS=linux
WORKDIR $GOPATH/src/github.com/shellhub-io/shellhub
COPY ./go.mod ./go.sum ./
WORKDIR $GOPATH/src/github.com/shellhub-io/shellhub/agent
COPY ./agent/go.mod ./agent/go.sum ./
RUN go mod download
FROM base AS builder
ARG SHELLHUB_VERSION=latest
ARG TARGETARCH
ARG TARGETVARIANT
ARG TARGETOS=linux
COPY ./pkg $GOPATH/src/github.com/shellhub-io/shellhub/pkg
COPY ./agent .
WORKDIR $GOPATH/src/github.com/shellhub-io/shellhub
RUN go mod download
WORKDIR $GOPATH/src/github.com/shellhub-io/shellhub/agent
RUN CGO_ENABLED=0 GOOS=${TARGETOS} GOARCH=${TARGETARCH} GOARM=${TARGETVARIANT#v} go build -tags docker -ldflags "-s -w -X main.AgentVersion=${SHELLHUB_VERSION}" -o agent
FROM ${DOCKERHUB_MIRROR}alpine:${ALPINE_VERSION} AS runtime-utils
RUN apk add --no-cache util-linux setpriv ca-certificates libgcc
FROM toolchain AS tools
RUN apk add --no-cache openssl openssh-client util-linux setpriv
COPY --from=air /go/bin/air /usr/local/bin/air
COPY --from=golangci-lint /usr/bin/golangci-lint /usr/local/bin/golangci-lint
COPY --from=mockery /usr/local/bin/mockery /usr/local/bin/mockery
FROM tools AS development
COPY --from=base $GOPATH/pkg/mod $GOPATH/pkg/mod
COPY --from=base $GOPATH/src/github.com/shellhub-io/shellhub $GOPATH/src/github.com/shellhub-io/shellhub
WORKDIR $GOPATH/src/github.com/shellhub-io/shellhub
RUN go mod download
ARG USERNAME
ARG PASSWORD
RUN [ -z "$USERNAME" ] || { adduser -D "$USERNAME" && echo "$USERNAME:$PASSWORD" | chpasswd; }
COPY ./agent/entrypoint-dev.sh /entrypoint.sh
WORKDIR $GOPATH/src/github.com/shellhub-io/shellhub/agent
ENTRYPOINT ["/entrypoint.sh"]
FROM scratch
ARG TARGETARCH
COPY --from=runtime-utils /etc/ssl/certs/ca-certificates.crt /etc/ssl/certs/
COPY --from=runtime-utils /usr/bin/nsenter /usr/bin/
COPY --from=runtime-utils /bin/setpriv /bin/
COPY --from=runtime-utils /usr/lib/libcap-ng.so.* /usr/lib/
COPY --from=runtime-utils /usr/lib/libeconf.so.* /usr/lib/
COPY --from=runtime-utils /usr/lib/libgcc_s.so.1 /usr/lib/
COPY --from=runtime-utils /lib/ld-musl-*.so.1 /lib/
COPY --from=builder /go/src/github.com/shellhub-io/shellhub/agent/agent /bin/agent
ENTRYPOINT ["/bin/agent"]