golang通过复制供应商文件夹来构build

我的项目结构

/github.com/user - libraries - services - service-api-signup - Dockerfile - main.go - service-api-second - ... - vendor 

在service-api-signup里面的Docker文件

 FROM golang COPY . /go/src/github.com/user/services/service-api-signup # need to copy all the dependencies on vendor to /go/src/github.com/.. 

如何复制所有我的依赖关系的供应商和库文件夹走上docker形象的path来build立? (需要从父目录复制和构build)

任何方式来设置我的开发环境?

谢谢。

正常的方法是使用依赖性pipe理器,如dep 。

另一种方法是将供应商目录直接复制到Dockerfile中,但这并不理想,因为它将逐字复制整个供应商目录,即使它包含旧的或未使用的导入。

假设你有一种monorepo设置,供应商在顶层,然后dockerfiles在每个子目录(/服务),你可以使用顶级docker-compose.yml文件( docs )来定义所有的服务,然后使用卷装来确保供应商在容器内部结束。

以你为例

 .../repo - libraries - services - service-api-signup - Dockerfile - main.go - service-api-second - ... - vendor - docker-compose.yml 

docker-compose.yml看起来像这样:

 version: '3' services: service-api-signup: container_name: api-signup build: context: ./service-api-signup volumes: - ./vendor:/go/src/github.com/user/services/service-api-signup/vendor service-api-second: container_name: api-second build: context: ./service-api-second volumes: - ./vendor:/go/src/github.com/user/services/service-api-second/vendor 

还有一个选项可以覆盖dockerfile的命令和入口点,允许您在通过docker-compose运行时将自定义脚本设置为入口点

 entrypoint: /go/src/github.com/user/services/service-api-signup 

也许这个脚本(你需要创build并放入你的仓库)可以使用像杜松子酒一样的实时重载工具,看起来像这样:

 #!/bin/bash go get github.com/codegangsta/gin exec gin --immediate -appPort 8080 run 

这仍然意味着你正在Docker中构build应用程序(在操作系统中,这不是Linux将意味着更糟的性能)。 但是这意味着你得到了docker-compose的便利,实时重载并且不需要重build容器。