如何构建开发人员和运行docker映像?

如何构建开发人员和运行docker映像?,docker,Docker,我有一个C/C++项目,希望从alpine中构建两个映像进行开发并单独运行 dev镜像:安装所有开发环境,如gcc、cmake、带有开发包的库(例如:boostdev) 运行映像:仅包含从dev映像成功构建后的二进制文件,以及仅用于运行的普通库包(例如:boost) 因此,与dev映像相比,run映像的大小最小 我可以使用1个Dockerfile来构建两个映像吗?我对ONBUILD指令做了一些研究,但没有找到解决方案 请帮我解决这个问题 谢谢和问候 Anh过去,这需要两个Docker映像,但

我有一个C/C++项目,希望从alpine中构建两个映像进行开发并单独运行

  • dev镜像:安装所有开发环境,如gcc、cmake、带有开发包的库(例如:boostdev)

  • 运行映像:仅包含从dev映像成功构建后的二进制文件,以及仅用于运行的普通库包(例如:boost)

因此,与dev映像相比,run映像的大小最小

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

请帮我解决这个问题

谢谢和问候


Anh

过去,这需要两个Docker映像,但最新版本的Docker支持。这将允许您通过一个
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"]  

在这里,第一个阶段构建Go应用程序,而第二个阶段构建一个包含已编译可执行文件的映像,它使用
--from=0
参数将该映像从第一个阶段复制到
COPY
指令。

请发布代码,以便其他人可以帮助您。