web-dev-qa-db-ja.com

GoをAlpine Linuxにインストールする方法

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
12
Yogesh Jilhawar

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パッケージを作成したサードパーティ があります。

9
BMitch

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
10
Yogesh Jilhawar

次の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

6
Bevilaqua

基本的な要件が特定のgoバージョンをAlpineベースのDockerイメージ内にインストールすることである場合は、これらを参照してください images 公式のgolang dockerhubアカウントで利用可能。

docker pull golang:1.12-Alpine
docker pull golang:1.11-Alpine
2
mchawre