2017-08-25 93 views
0

所有依赖的包,我可以得到我所有的依赖包,当我做到以下几点:一开始走的内部泊坞窗

$ cd myrepo 
$ go get -d ./... 

但什么是搬运工做到这一点的最好方法是什么?我不希望所有的回购在我的码头应用程序内,所以我正在寻找一种方法在docker容器内执行一些内容(或类似的东西)并重用它。

我正在考虑类似的东西。 Dockerfile

FROM golang:1.8 

WORKDIR /app 
ADD ./src 

生成图像

$ docker build -t myapp . 

$ docker run myapp go get -d ./... 

我怎么能不重用拉/每次下载它们的依赖关系?我希望他们在某种程度上。我知道码头卷有点但我不知道在这种情况下如何使用它。

+0

。 Docker缓存一层(包含依赖关系),并且只要它存在于系统中就不会每次都拉它(它除非使用docker rmi移除图像,否则它会存在) – Vasif

+0

@Vasif不是我的图像不会很大吗? (有很多依赖回购) – DenCowboy

+0

是的图像将是巨大的。但是,如果你没有它的形象..每当你的容器被删除(说出于更新的目的),你将需要把所有的依赖关系放回到图像再次..此外,我觉得在容器内的依赖关系是一个核心原则。因此,集装箱是提供隔离运行时环境的解决方案。你可能不想削减边缘..如果我可以问,尺寸是多少? – Vasif

回答

0

这样做的最好方法是使用构建器模式。 在第一张图片中,您下载了所有依赖关系并构建可执行文件。 在第二个复制可执行文件到一个新的图像。您可以使用临时图像作为基础,但阿尔派可能更好,因为它也很小,但为https等证书提供了外壳和数据包管理器。

如果您第一次复制源代码并安装依赖项,它们将随每次源代码更改一起下载,因此最好使用go dep等。有了它,您可以复制Gopkg文件,安装您的依赖关系,然后复制源代码。

官方文章https://docs.docker.com/engine/userguide/eng-image/multistage-build/ 和详细 https://blog.alexellis.io/mutli-stage-docker-builds/

您使用RUN和dockerfile安装依赖