82 lines
2.5 KiB
Docker
82 lines
2.5 KiB
Docker
FROM alpine:3.7 AS builder
|
|
|
|
RUN apk add --no-cache \
|
|
ca-certificates
|
|
|
|
# set up nsswitch.conf for Go's "netgo" implementation
|
|
# - https://github.com/golang/go/blob/go1.9.1/src/net/conf.go#L194-L275
|
|
# - docker run --rm debian:stretch grep '^hosts:' /etc/nsswitch.conf
|
|
RUN [ ! -e /etc/nsswitch.conf ] && echo 'hosts: files dns' > /etc/nsswitch.conf
|
|
|
|
ENV GOLANG_VERSION 1.10.3
|
|
|
|
# make-sure-R0-is-zero-before-main-on-ppc64le.patch: https://github.com/golang/go/commit/9aea0e89b6df032c29d0add8d69ba2c95f1106d9 (Go 1.9)
|
|
#COPY *.patch /go-alpine-patches/
|
|
|
|
RUN set -eux; \
|
|
apk add --no-cache --virtual .build-deps \
|
|
bash \
|
|
gcc \
|
|
musl-dev \
|
|
openssl \
|
|
go \
|
|
; \
|
|
export \
|
|
# set GOROOT_BOOTSTRAP such that we can actually build Go
|
|
GOROOT_BOOTSTRAP="$(go env GOROOT)" \
|
|
# ... and set "cross-building" related vars to the installed system's values so that we create a build targeting the proper arch
|
|
# (for example, if our build host is GOARCH=amd64, but our build env/image is GOARCH=386, our build needs GOARCH=386)
|
|
GOOS="$(go env GOOS)" \
|
|
GOARCH="$(go env GOARCH)" \
|
|
GOHOSTOS="$(go env GOHOSTOS)" \
|
|
GOHOSTARCH="$(go env GOHOSTARCH)" \
|
|
; \
|
|
# also explicitly set GO386 and GOARM if appropriate
|
|
# https://github.com/docker-library/golang/issues/184
|
|
apkArch="$(apk --print-arch)"; \
|
|
case "$apkArch" in \
|
|
armhf) export GOARM='6' ;; \
|
|
x86) export GO386='387' ;; \
|
|
esac; \
|
|
\
|
|
wget -O go.tgz "https://golang.org/dl/go$GOLANG_VERSION.src.tar.gz"; \
|
|
echo '567b1cc66c9704d1c019c50bef946272e911ec6baf244310f87f4e678be155f2 *go.tgz' | sha256sum -c -; \
|
|
tar -C /usr/local -xzf go.tgz; \
|
|
rm go.tgz; \
|
|
\
|
|
cd /usr/local/go/src; \
|
|
for p in /go-alpine-patches/*.patch; do \
|
|
[ -f "$p" ] || continue; \
|
|
patch -p2 -i "$p"; \
|
|
done; \
|
|
./make.bash; \
|
|
\
|
|
rm -rf /go-alpine-patches; \
|
|
apk del .build-deps; \
|
|
\
|
|
export PATH="/usr/local/go/bin:$PATH"; \
|
|
go version
|
|
|
|
ENV GOPATH /go
|
|
ENV PATH $GOPATH/bin:/usr/local/go/bin:$PATH
|
|
|
|
RUN mkdir -p "$GOPATH/src" "$GOPATH/bin" && chmod -R 777 "$GOPATH"
|
|
WORKDIR $GOPATH
|
|
|
|
ARG GOPROXY_VERSION=master
|
|
RUN apk update; apk upgrade; \
|
|
apk add --no-cache git; \
|
|
cd /go/src/; \
|
|
mkdir github.com; \
|
|
mkdir github.com/snail007; \
|
|
cd github.com/snail007; \
|
|
git clone https://github.com/snail007/goproxy.git; \
|
|
cd goproxy; \
|
|
git checkout ${GOPROXY_VERSION}; \
|
|
CGO_ENABLED=0 GOOS=linux go build -ldflags "-s -w" -a -installsuffix cgo -o proxy; \
|
|
chmod 0777 proxy
|
|
|
|
FROM 1.10.3-stretch
|
|
RUN mkdir /proxy && chmod 0777 /proxy
|
|
COPY --from=builder builder /go/src/github.com/snail007/goproxy/proxy /proxy/
|
|
CMD cd /proxy && /proxy ${OPTS} |