これまで私があなたの状況にあったとき、私はいつもあなたが言ったように単純なことではないすべての作業を行うために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
どのように聞こえるのですか?存在するもののようなものはありますか?私は始めなければならない?
なぜdownvoteですか? – krish7919