GoをAlpine Dockerイメージ内にインストールしようとしています。そのために、Alpine dockerイメージ内の here からtarファイルをダウンロードし、次のコマンドを使用してtarファイルを展開します。
tar -C/usr/local -xzf go1.10.3.linux-AMD64.tar.gz
pATHをエクスポートして、バイナリを次のようにします。
export PATH = $ PATH:/ usr/local/go/bin
ただし、go version
と言うと、sh: go: not found
と表示されます。私はアルパインには全く新しいです。私がここで何が欠けているのか、誰もが知っていますか?
再現する手順-
$ docker run -it Alpine sh
$ wget https://dl.google.com/go/go1.10.3.linux-AMD64.tar.gz
$ tar -C /usr/local -xzf go1.10.3.linux-AMD64.tar.gz
$ export PATH=$PATH:/usr/local/go/bin
$ go version
Alpineでは、glibcの代わりにlibmuslがあります。 Alpineのlibmuslは、1対1の置き換えではありません。 glibcに対してリンクされたコードは、実際には動的リンカーからのエラーが見つかりませんでした。 lddを使用して、バイナリにリンクされているライブラリを確認できます。
/ # ldd /usr/local/go/bin/go
/lib64/ld-linux-x86-64.so.2 (0x7f63ceed1000)
libpthread.so.0 => /lib64/ld-linux-x86-64.so.2 (0x7f63ceed1000)
libc.so.6 => /lib64/ld-linux-x86-64.so.2 (0x7f63ceed1000)
2つのオプションがあります。優先オプション、およびAlpineのdockerのgoイメージで使用されるオプションは、Alpineのgoバイナリをコンパイルすることです。 golangイメージのDockerfileでこれを確認できます。 https://github.com/docker-library/golang/blob/69f2d2a132565bf60afc91813801a3bdcc981526/1.10/Alpine3.8/Dockerfile
もう1つのオプションはglibcをAlpineにインストールすることですが、そのようなことを始めたら、Alpineを使用する理由と、DebianまたはCentOSがより適切なベースイメージであるかどうか疑問に思います。 Alpineには これに関するwikiトピック があり、 Alpineのglibcパッケージを作成したサードパーティ があります。
BMitchに感謝します。
Goソースコードをコンパイルし、Alpineイメージコンテナー内で以下の手順を実行しました。
echo "installing go version 1.10.3..."
apk add --no-cache --virtual .build-deps bash gcc musl-dev openssl go
wget -O go.tgz https://dl.google.com/go/go1.10.3.src.tar.gz
tar -C /usr/local -xzf go.tgz
cd /usr/local/go/src/
./make.bash
export PATH="/usr/local/go/bin:$PATH"
export GOPATH=/opt/go/
export PATH=$PATH:$GOPATH/bin
apk del .build-deps
go version
次のDockerfileが役に立ちました。よりシンプルで抽象的な。
FROM Alpine:latest
RUN apk add --no-cache git make musl-dev go
# Configure Go
ENV GOROOT /usr/lib/go
ENV GOPATH /go
ENV PATH /go/bin:$PATH
RUN mkdir -p ${GOPATH}/src ${GOPATH}/bin
# Install Glide
RUN go get -u github.com/Masterminds/glide/...
WORKDIR $GOPATH
CMD ["make"]
ソース: https://raw.githubusercontent.com/mickep76/Alpine-golang/master/Dockerfile
基本的な要件が特定のgoバージョンをAlpineベースのDockerイメージ内にインストールすることである場合は、これらを参照してください images 公式のgolang dockerhubアカウントで利用可能。
docker pull golang:1.12-Alpine
docker pull golang:1.11-Alpine