解決する簡単な構成の問題の解決策を探しています。それはかなり長い間私を悩ませてきました。:)
私はgithubに静的なバイナリを提供し、godepsを使用するgolangプロジェクトを持っています。
ここでgodep go install ...
、gitクローンとdockerコンテナーがこの新しくビルドされたバイナリからローカルでビルドされた後にコマンドを実行できることを確認したいと思います。
オプションとして、ユーザーはそれをDockerハブまたはプライベートリポジトリに適宜プッシュできる必要があります。
Makefileの使用を考えていますが、複雑すぎるようです(gopathを設定してからgodepビルドを作成し、バイナリが配置されている場所を指すようにDockerfileを動的に変更してから、Dockerビルドを作成します)。
それを行う簡単な方法はありますか?
これまでのところ、私があなたの状況にあったとき、私はいつも、すべての作業を行うためのMakefileを思い付きました。決して簡単なことではありませんが、ビルドプロセスと開発環境の間に必要な依存関係のレベルに応じて、少なくとも2つの異なるアプローチを使用してそれを実行しました。
最も簡単な方法は、あなたが言うように、Makefileに自分で行うステップを投げるだけです。ビルド中にDockerfileを変更する必要がないように、Dockerfiles ARGumentsを使用してバイナリ名をパラメーター化できます。
ここに、私があなたを始めるために作った、速くて汚い(動作する)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 $@ $^
そのMakefileは、Dockerfileと同じディレクトリにあると想定しています。
これは最小限のものです(機能します):
FROM alpine:3.5
ARG APP_BINARY
ADD ${APP_BINARY} /app
ENTRYPOINT /app
main.goをMakefileとDockerfileの両方と同じ最上位プロジェクトディレクトリに置くことをテストしました。main.goがディレクトリ内にネストされている場合( "ROOT / cmd / bla"が一般的です)、次にこれを考慮して、「ビルド」行を変更する必要があります。
私はしばらくそのようなことをしてきましたが、今あなたの質問を見て(そして考えて)いるので、具体的にこれを行う方法を知っている専用のツールが素晴らしいかもしれないことがわかりました。具体的には、「go build / get / install」を模倣しているが、Dockerイメージをビルドできるツールです。そのため、次のコマンドを実行してバイナリを取得できます。
go install github.com/my/program
次のコマンドを実行して、シンプルなドッカーイメージを取得することもできます。
goi install github.com/my/program
どうですか?そのようなものは存在しますか?始めましょうか?
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加