我的项目结构
/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 image上构建的路径? (需要从父目录复制并构建)
任何设置我的开发环境的方法?
感谢。
答案 0 :(得分:1)
通常的方法是使用依赖关系管理器,例如dep。
另一种方法是直接在Dockerfile中复制供应商目录,但这并不理想,因为它会逐字复制整个供应商目录,即使它包含旧的或未使用的导入。
答案 1 :(得分:0)
假设您有一种monorepo设置,供应商位于顶层,然后是每个子目录(/ services)中的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
也许那个脚本(您需要在某处创建并放入您的仓库)可以使用像gin这样的实时重新加载工具,可能看起来像:
#!/bin/bash
go get github.com/codegangsta/gin
exec gin --immediate -appPort 8080 run
这仍然意味着你正在docker中构建应用程序(在OS中不是linux的应用程序将意味着更糟糕的性能)。但它确实意味着你获得了docker-compose方便,实时重载并且不需要重建容器。