Dockerfile:在将所需文件复制到图像之前,如何构build项目?

FROM golang:1.8 RUN apt-get -y update && apt-get install -y curl RUN go get -u github.com/gorilla/mux RUN go get github.com/mattn/go-sqlite3 RUN curl -sL https://deb.nodesource.com/setup_6.x | bash - && \ apt-get install -y nodejs COPY . /go/src/beginnerapp WORKDIR ./src/beginnerapp/beginner-app-react RUN npm run build RUN go install beginnerapp/ WORKDIR /go/src/beginnerapp/beginner-app-react VOLUME /go/src/beginnerapp/local-db WORKDIR /go/src/beginnerapp ENTRYPOINT /go/bin/beginnerapp EXPOSE 8080 

在开始时,golang项目以及reactjs代码不存在于图像上,需要在能够构build(js)/ install(golang)之前被复制。 有没有一种方法可以将文件复制到映像之前的构build/安装过程? 理想情况下,我只需要复制golang可执行文件和reactjs生产版本。

是的,现在可以使用多阶段构build。 这个想法是,你可以在你的docker文件中有多个FROM,你的主图像将使用最后一个FROM来构build。 以下是伪结构示例

 FROM node:latest as reactbuild WORKDIR /app COPY . . RUN webpack build FROM golang:latest as gobuild WORKDIR /app COPY . . RUN go build FROM alpine WORKDIR /app COPY --from=gobuild /app/myapp /app/myapp COPY --from=reactbuild /app/dist /app/dist 

请阅读以下文章了解更多详情

https://docs.docker.com/engine/userguide/eng-image/multistage-build/