공식 소스 코드 (내 호스트 컴퓨터는 Mac)를 컴파일하기 위해 공식 골란 고산 이미지를 사용하고 있습니다. 컨테이너 내부에 전체 $GOPATH
을 마운트 할 때도 인식하지 못했습니다 이전 빌드의 캐시 된 데이터를 사용하십시오. $GOPATH/pkg
디렉토리에 생성했는지 확인했지만 후속 빌드 속도에는 영향을 미치지 않습니다. 시간이 주위에 남아Docker의 Golang 컴파일 캐시
다른 용기를 사용하여 28- : 나는 여러 컴파일 같은 용기를 재사용하는 경우
그러나, 캐시의 어떤 종류의 사용을하지, 당신은 내가 한이 실험의 결과를 볼 수 있습니다 각 빌드에서 30 대 :
$ rm -r $GOPATH/pkg/linux_amd64
$ time docker run -v$GOPATH:/go -e CGO_ENABLED=0 golang:1.9-alpine3.6 go build -i github.com/myrepo/mypackage
...
0.02s user 0.08s system 0% cpu 30.914 total
$ time docker run -v$GOPATH:/go -e CGO_ENABLED=0 golang:1.9-alpine3.6 go build -i github.com/myrepo/mypackage
...
0.02s user 0.07s system 0% cpu 28.128 total
같은 컨테이너, 이후의 빌드를 재사용 훨씬 빠릅니다 :
$ rm -r $GOPATH/pkg/linux_amd64
$ docker run -d -v$GOPATH:/go -e CGO_ENABLED=0 golang:1.9-alpine3.6 tail -f /dev/null
bb4c08867bf2a28ad87facf00fa9dcf2800ad480fe1e66eb4d8a4947a6efec1d
$ time docker exec bb4c08867bf2 go build -i github.com/myrepo/mypackage
...
0.02s user 0.05s system 0% cpu 27.028 total
$ time docker exec bb4c08867bf2 go build -i github.com/myrepo/mypackage
0.02s user 0.06s system 0% cpu 7.409 total
밖으로 어떤 장소에서 캐시의 어떤 종류를 사용하여 이동인가 $GOPATH
의?
첫 번째 명령 집합에서 pkg 디렉토리를 재사용하지 않으며 src 만 사용하십시오. pkg에는 "캐시"가 들어 있습니다. – Peter
죄송합니다. @Peter, 맞아요, 잘못된 예를 붙였습니다 (두 번째'rm' 명령이 실패했기 때문에 문제가 있음을 알았습니다). 결과는 $ GOPATH 폴더 전체와 동일한 마운팅 – colega