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)/安装(golang)。在将文件复制到镜像之前,有什么方法可以执行该构建/安装过程?理想情况下,我只需要复制golang可执行文件和reactjs生产版本。

最佳答案

是的,现在可以使用多阶段构建。这个想法是,您可以在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/

关于docker - Dockerfile:在仅将所需文件复制到镜像之前,如何构建项目?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/46188215/

10-16 21:54