2017-01-18 4 views
-1

解決するための簡単な構成問題の解決策を探しています。それは今かなり長い間私を悩ませてきました。 :)golangスタティックバイナリのドッキングイメージを構築、展開、プッシュ

私は静的なバイナリを与え、godepsを使うgithubのgolangプロジェクトを持っています。

今度は、godep go install ...コマンドをgitクローンとドッキング・コンテナがこの新しくビルドされたバイナリからローカルに構築された後に実行できるようにします。

オプションとして、ユーザーはドッキングステーションハブまたはプライベートレポに適切にプッシュする必要があります。

私はMakefilesを使うことを考えていますが、それはあまりにも複雑です(gopathを設定し、godepをビルドし、Dockerfileを動的に変更してバイナリがある場所を指し示してから、ドッカービルドします)。

もっと簡単な方法はありますか?

+0

なぜdownvoteですか? – krish7919

答えて

1

これまで私があなたの状況にあったとき、私はいつもあなたが言ったように単純なことではないすべての作業を行うためにMakefileを思いついた。それは決して簡単ではありませんが、ビルドプロセスと開発環境の間で必要とする依存性のレベルに応じて少なくとも2つの異なるアプローチを使用して行っています。

あなたが言うように、最も簡単な方法は、自分で行うステップをMakefileにスローすることです。 Dockerfiles ARGumentsを使用してバイナリ名をパラメータ化して、ビルド中にDockerfileを変更する必要はありません。ここで

私はちょうどあなたが入門用に作った間に合わせ(作業)Makefileを持っている:

APP_IMAGE=group/example 
APP_TAG=1.0 
APP_BINARY=example 

.PHONY: clean image binary 

all: image 

clean: 
    if [ -r $(APP_BINARY) ]; then rm $(APP_BINARY); fi 
    if [ -n "$$(docker images -q $(APP_IMAGE):$(APP_TAG))" ]; then docker rmi $(APP_IMAGE):$(APP_TAG); fi 

image: binary 
    docker build --build-arg APP_BINARY=$(APP_BINARY) -t $(APP_IMAGE):$(APP_TAG) $(dir $(abspath $(lastword $(MAKEFILE_LIST)))) 

binary: $(APP_BINARY) 

$(APP_BINARY): main.go 
    go build -o [email protected] $^ 

のMakefileがDockerfileと同じディレクトリにあることを期待しています。ここで

は、最小限の1(作品)です:

FROM alpine:3.5 
ARG APP_BINARY 
ADD ${APP_BINARY} /app 
ENTRYPOINT /app 

私はMakefileとDockerfile両方と同じトップレベルプロジェクトディレクトリ内main.goを有する場合にはあなたが持っていることをテストしてみましたいくつかの内部ディレクトリ( "ROOT/cmd/bla"は普通です)にネストされているmain.goの場合、 "go build"行を変更してそれを考慮する必要があります。

私はしばらくの間このようなことをしてきましたが、私はあなたの質問を見て(そして考えています)、これを行う方法を特に知っている専用のツールは、 。模倣は、「構築/取得/インストール行く」が、ドッキングウィンドウのイメージを構築することができます...ので、あなたがバイナリを取得するには、次のコマンドを実行することができますどこ具体ツール:

go install github.com/my/program 

ます。また、取得するには、次のコマンドを実行することができ簡単なドッカー画像:

goi install github.com/my/program 

どのように聞こえるのですか?存在するもののようなものはありますか?私は始めなければならない?

+0

以前私は、コードが更新されるたびに静的なgoバイナリをリポジトリにコミットするために使用しました。作成してプッシュするスクリプトを実行するのは簡単なことでした。 今、私はgit reposからバイナリを取り除きたいと思っています。 はい。間違いなく必要な工具があるようです。私が読んだフォーラムは、メイクファイルを使って同様の方法を提案します。たぶん、バイナリをビルドし、ドッカーAPIを呼び出してイメージを構築するgoスクリプトです。しかし、小さなもののために面倒すぎるように思える。私はmakefileのアプローチから始め、時間が許せばそれに到達します。 – krish7919

0

baseイメージを提供します(GOPATH、godep ... pre configured)。

baseイメージに基づいてDockerファイルを作成すると、ユーザーはCOPYパスを変更するだけで済みます。

+0

私は、OPは、生成されたイメージ上に、コンパイルされたバイナリのみを持つ環境を持つつもりはないと信じています。 –

関連する問題