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代码不存在于图像上,需要在构建(js)/ install(golang)之前复制。在将文件复制到图像之前,有没有办法可以进行构建/安装过程?理想情况下,我只需要复制golang可执行文件并反应生成构建。
答案 0 :(得分:2)
是的,现在可以使用多阶段构建了。这个想法是你可以在docker文件中有多个FROM,你的主图像将使用最后一个FROM构建。下面是一个伪结构示例
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/