如何冻结具有依赖关系的微版本?

时间:2018-01-30 11:38:36

标签: go go-micro

我想使用固定版本的 micro 构建一个docker镜像并继续使用依赖项。我打算用dep

来做
git checkout git@github.com:micro/micro.git
dep ensure
git add Gopkg.toml
git add Gopkg.lock

# Build micro
CGO_ENABLED=0 GOOS=linux go build -a -installsuffix cgo -ldflags '-w' -i -o micro ./main.go 

# Build docker image
...

所以,我的问题是它是构建一致的 micro docker镜像的最佳解决方案吗?

2 个答案:

答案 0 :(得分:1)

Dockerfile的一个例子可以是:

FROM golang:1.9-alpine3.6 as builder

# Install package manager
RUN apk add --no-cache --virtual .go-dependencies git curl \
  && curl https://glide.sh/get | sh

# Copy files from context
WORKDIR /go/src/github.com/foo/bar
COPY . .

# Install project dependencies, test and build
RUN glide install \
  && go test ./... \
  && CGO_ENABLED=0 GOOS=linux go build -a -installsuffix cgo -ldflags '-w' -i -o ./entry ./main.go ./plugins.go

# Build final image with binary
FROM alpine:3.6
RUN apk add --update ca-certificates && \
    rm -rf /var/cache/apk/* /tmp/*
WORKDIR /
COPY --from=builder /go/src/github.com/foo/bar/entry .
ENTRYPOINT [ "/entry" ]

glide.yaml看起来像这样:

package: .
import:
- package: github.com/micro/go-micro
  version: ^0.3.0
  subpackages:
  - client
  - server
- package: github.com/micro/go-plugins
  version: ^0.6.1
  subpackages:
  - wrapper/trace/opentracing
  - broker/nats
  - transport/nats
- package: github.com/opentracing/opentracing-go
  version: ^1
- package: github.com/openzipkin/zipkin-go-opentracing
  version: ^0.3
testImport:
- package: github.com/golang/mock
  subpackages:
  - gomock
- package: github.com/smartystreets/goconvey
  subpackages:
  - convey

答案 1 :(得分:0)

就我而言,dep看上去非常好而且速度足够快,而且,它是官方的依赖经理,所以我认为这是一个正确的选择。