Last active
September 14, 2024 05:34
-
-
Save ernestboey/5beb875a7798519bc563aca294c9e1c9 to your computer and use it in GitHub Desktop.
Create Docker image with Alpine 3.9 + Golang 1.12.9 + Node.js 10.16.3
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
FROM node:10.16.3-alpine | |
# Golang From: https://github.com/docker-library/golang/blob/master/1.12/alpine3.10/Dockerfile | |
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.12.9 | |
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 'ab0e56ed9c4732a653ed22e232652709afbf573e710f56a07f7fdeca578d62fc *go.tgz' | sha256sum -c -; \ | |
tar -C /usr/local -xzf go.tgz; \ | |
rm go.tgz; \ | |
\ | |
cd /usr/local/go/src; \ | |
./make.bash; \ | |
\ | |
rm -rf \ | |
# https://github.com/golang/go/blob/0b30cf534a03618162d3015c8705dd2231e34703/src/cmd/dist/buildtool.go#L121-L125 | |
/usr/local/go/pkg/bootstrap \ | |
# https://golang.org/cl/82095 | |
# https://github.com/golang/build/blob/e3fe1605c30f6a3fd136b561569933312ede8782/cmd/release/releaselet.go#L56 | |
/usr/local/go/pkg/obj \ | |
; \ | |
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 |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment