這裏是碼頭工人的新手。我按照here的指示爲我的Go項目製作了一個纖細的&裝飾容器。我不完全理解它在做什麼,希望有人能夠啓發我。這個Docker命令如何生成一個小GoLang容器?
具體來說有兩個步驟來生成這個碼頭集裝箱。
docker run --rm -it -v "$GOPATH":/gopath -v "$(pwd)":/app -e "GOPATH=/gopath" -w /app golang:1.8 sh -c 'CGO_ENABLED=0 go build -a --installsuffix cgo --ldflags="-s" -o hello'
docker build -t myDockerImageName .
的DockerFile本身只包含
FROM iron/base
WORKDIR /app
COPY hello /app/
ENTRYPOINT ["./hello"]
我理解(廣義上的)的第一個步驟是編譯圍棋程序和靜態鏈接C依賴關係(並在一個未命名的docker容器中完成所有這些)。第二步根據DockerFile中的指令生成Docker鏡像。
我不明白爲什麼第一個命令是以docker run
開頭的(爲什麼它需要在Docker容器中運行?爲什麼我們不只是在它外面生成Go二進制文件,然後將其複製進來? )
如果它在Docker容器中運行,Docker容器中的二進制文件如何在我的本地機器的文件系統上丟失?(例如,爲什麼我需要將二進制文件複製回映像 - 就像它似乎在DockerFile的第3行上做什麼?)
你安裝你的本地目錄,用'-v'標誌卷。參見docker run --help輸出。另外,沒有C依賴關係,你有'CGO_ENABLED = 0'。 – JimB
任何你知道爲什麼需要CGO_ENABLED = 0標誌的機會呢?(在能夠最小化最終碼頭容器輸出的情況下) – nciao
'CGO_ENABLED = 0'和'-a --installsuffix'確保_nothing_是使用cgo構建的,以便生成的二進制文件不被鏈接到任何特定版本的libc。 – JimB