Dock build go get cache

I want to encapsulate golang module testing in a docker-compose script, because it depends on several external services. My application has quite a few dependencies, so it is required go get.

How can I cache packages so that the docker container can build without having to download all the dependencies every time I want to test?

My dockerfile:

FROM golang:1.7

CMD ["go", "test", "-v"]

RUN mkdir -p /go/src/app
WORKDIR /go/src/app

COPY . /go/src/app
RUN go-wrapper download
RUN go-wrapper install

Every time I want to run my unit tests, I run docker-compose up --build backend-testin the following script:

version: '2'
services:
  ...
  backend-test:
    build:
      context: .
      dockerfile: Dockerfile
    image: backend-test
    depends_on:
      ...

But now go-wrapper downloadit gets called every time I want to run tests, and it takes looong time to complete.

Decision? Thanks in advance!

+4
2

govendor. golang. .

. , pkg, . pkg, , . .

, , . .

script (get.sh) go get . ( Docker, )

go get github.com/golang/protobuf/proto
go get github.com/pborman/uuid
go get golang.org/x/net/context
go get golang.org/x/net/http2
go get golang.org/x/net/http2/hpack

Docker script. , get.sh, . - got get ./..., , . get.sh script, .

FROM golang:1.6

RUN mkdir -p /go/src/app

COPY get.sh /go/src/app

WORKDIR /go/src/app

RUN bash get.sh

COPY . /go/src/app

RUN go get ./...

CMD go test -v

, Docker .., . . , -, , .

+4

, , ( ). , . , ? , . :

-compose.dev.yml:

backend-test:
  volumes:
    - .:/path/to/myapp

//to/myapp - , . dev:

docker-compose up -f docker-compose.dev.yml

, , docker-compose, docker exec:

docker exec -it backend-test go test

, src-dir , . , .

EDIT: , , ( go get). , , . , , go get . go get , ssh SSH_AUTH_SOCK. , , - , , . , , , .

, , , , . ruby ​​ , Gemfile Gemfile.lock bundle install --deploy, , . , , 99% - . , golang Bundler: dep. dep, , Gopkg.toml Gopkg.lock workdir, dep ensure, . Gopkg - . !

0

Source: https://habr.com/ru/post/1653355/


All Articles