2017-09-20 37 views
-1

我有一个C/C++项目,并希望从Alpine构建2个图像进行开发并单独运行。如何构建dev并运行docker镜像?

  • 开发图像:使用dev软件包(例如:boost-dev)安装所有像gcc,cmake,库一样的开发环境。

  • 运行图像:包含从开发图像成功构建后只有二进制文件,并且只有运行的正常库包(例如:boost)。

因此,运行图像与开发图像相比尺寸最小。

我可以使用1个Dockerfile来构建两个图像吗?我使用ONBUILD指令做了一些研究,但没有找到解决方案。

请帮我解决这个问题。

感谢&问候,

+0

请张贴代码让其他人可以帮助你。 [https://stackoverflow.com/help/how-to-ask](https://stackoverflow.com/help/how-to-ask) – jfeferman

回答

0

它曾经是,这将需要两个多克的图像,但码头工人的支持multi-stage builds最新版本。这将使您能够通过一个Dockerfile实现您的目标。

您可以阅读链接的文档以了解详细信息,但想法是您的Dockerfile分为多个阶段,每个阶段都以新的FROM行开始。只有最后一个阶段用于生成最终的输出图像,并且它可以通过索引从其他阶段访问文件系统。从文档的例子:

FROM golang:1.7.3 
WORKDIR /go/src/github.com/alexellis/href-counter/ 
RUN go get -d -v golang.org/x/net/html 
COPY app.go . 
RUN CGO_ENABLED=0 GOOS=linux go build -a -installsuffix cgo -o app . 

FROM alpine:latest 
RUN apk --no-cache add ca-certificates 
WORKDIR /root/ 
COPY --from=0 /go/src/github.com/alexellis/href-counter/app . 
CMD ["./app"] 

这里,第一阶段建立一个围棋应用,而第二级建立与所述编译的可执行文件的图像,它使用--from=0参数从第一级拷贝到COPY指令。

相关问题