FROM golang:1.20.4-alpine3.18 as golang
ARG GO_USER_UID=300
ARG GO_USER_GID=300
WORKDIR /usr/src/app
COPY --chown=${GO_USER_UID}:${GO_USER_GID} . .
ENV GO111MODULE="on" \
CGO_ENABLED="0" \
GOARCH="amd64" \
GOOS="linux" \
GOPATH="/"
RUN apk update \
&& apk -u list \
&& apk upgrade \
&& apk --no-cache --update add upx
RUN go mod tidy \
&& go mod verify \
&& go build --ldflags "-r -w" -o main . \
&& upx --no-progress -9 ./bca \
&& upx -t ./main
FROM alpine:latest as final
ARG USER_ACCOUNT=alpine
ARG DEFAULT_USER_ACCOUNT=root
ARG USER_UID=600
ARG USER_GID=600
WORKDIR /usr/src/app
COPY --chown=${USER_UID}:${USER_GID} --from=golang ./usr/src/app ./usr/src/app
RUN apk update \
&& apk -u list \
&& apk upgrade \
&& apk --no-cache --update add build-base \
shadow
RUN groupadd -r -g $USER_GID $USER_ACCOUNT \
&& useradd -r -u $USER_UID -g $USER_GID $USER_ACCOUNT -s /bin/false -d /home/$USER_ACCOUNT -M \
&& groupmod -g $USER_GID $USER_ACCOUNT \
&& usermod -u $USER_UID -g $USER_GID $USER_ACCOUNT
USER $USER_ACCOUNT
ENTRYPOINT ["./usr/src/app/main"]