我正在尝试将我的应用容器化,以便可以使用Kubernetes托管它。
我打算像这样分割它:
我要为Webpack创建一个Dockerfile,它将构建我的所有静态资产,但是在那之后,我不确定如何将它们复制到其他两个映像中。除了一个JSON文件(其中包含有关生成的文件的元数据)之外,所有静态文件都需要复制到Nginx图像中,以便我可以用PHP编写适当的HTML。
如果Nginx映像中需要100%的资产,则可以使用多阶段构建,但是对于PHP映像,我需要一个资产。
解决此问题的最佳方法是什么?
我想重新使用此Webpack Dockerfile来运行webpack-dev-server进行开发,但在生产中根本不需要它。如果这使事情复杂化,则只需忽略。以后会有问题。
答案 0 :(得分:3)
您只需在多阶段构建中将所需的信息从一个映像复制到下一个映像,而无需复制所有文件。这是一个来自docker docs的示例,其功能类似:
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"]
在这种情况下,它仅将一个目录从初始映像复制到最终映像。
您还可以使用复制命令从外部图像复制。请参阅docker文档中的“将外部图像用作舞台”:https://docs.docker.com/develop/develop-images/multistage-build/
在您其他的dockerfile中会是这样的:
COPY —form=mywebpackimage /awesome/files /newimage/directory