2017-01-18 36 views
-1

我正在尋找一個解決方案來解決一個簡單的配置問題;一段時間以來我一直在嘮叨我。 :)爲golang靜態二進制文件構建,部署並推送docker鏡像

我在github上有一個golang項目,它給了我一個靜態二進制文件,並使用godeps。

現在我想確保在從本地新建二進制文件構建git克隆和docker容器後,可以運行godep go install ...命令。

作爲一個選項,用戶應該能夠將其推到泊塢窗轂或私人回購適用。

我正在考慮使用Makefiles,但這似乎太複雜了(設置gopath,然後godep構建,動態修改Dockerfile指向二進制文件所在的位置,然後是docker版本)。

有沒有更簡單的方法來做到這一點?

+0

爲什麼downvote? – krish7919

回答

1

到目前爲止,我已經對你的情況,我總是拿出一個Makefile做了所有的工作,其中,像你說的,從來都不是簡單的。儘管從未如此簡單,但我至少使用了兩種不同的方法,依賴於構建過程和開發環境之間所需的依賴關係。

最簡單的方法是,如你所說,只是一個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。

下面是一個最小的一個(工作):我已經測試

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

具有在同一個頂級項目目錄既是Makefile文件和Dockerfile一個main.go,如果你有一個main.go嵌套在一些內部目錄(「ROOT/cmd/bla」是常見的),那麼你應該改變「去建設」行來說明這一點。

雖然我一直在做這樣的事情了一段時間,現在我明白了(想想)你的問題我來看到一個專門的工具,特別是知道如何做到這一點可能是巨大的,有。具體的工具,模仿「去建立/獲取/安裝」,但可以建立泊塢窗圖片...所以在這裏你可以運行下面的命令來獲得一個二進制:

go install github.com/my/program 

你也可以運行下面的命令來獲取一個簡單的碼頭圖像:

goi install github.com/my/program 

這聽起來怎麼樣?有沒有類似的東西存在?我應該開始嗎?

+0

早些時候,我每次代碼更新時都會將靜態的二進制文件提交到存儲庫。這是一個簡單的問題,運行一個腳本來建立和推動。 現在,我想擺脫從git回購的二進制文件,並希望有一個更好的方式來做到這一點。 是的。肯定似乎需要一些工具。我讀過的論壇提出了一個類似的方法,使用makefile。也許是構建二進制文件並調用docker API來構建映像的go腳本。似乎對於一件小事來說太麻煩了。我開始使用makefile方法,如果時間允許的話,它會開始。 – krish7919

0

提供一個base圖像(GOPATH,godep ...預配置)。

創建基於base圖像Dockerfile,然後用戶只需要改變COPY路徑。

+0

我相信OP不打算在生成的圖像上有一個去環境,只有編譯的二進制文件。 –

相關問題