Docker:如何与其他两个映像共享文件?

时间:2020-05-20 02:27:26

标签: docker

我正在尝试将我的应用容器化,以便可以使用Kubernetes托管它。

我打算像这样分割它:

  1. PHP映像。运行php-fpm,保存所有应用程序代码。
  2. Nginx。提供静态内容,并为PHP服务提供其他服务。
  3. Webpack。这是毛茸茸的地方。

我要为Webpack创建一个Dockerfile,它将构建我的所有静态资产,但是在那之后,我不确定如何将它们复制到其他两个映像中。除了一个JSON文件(其中包含有关生成的文件的元数据)之外,所有静态文件都需要复制到Nginx图像中,以便我可以用PHP编写适当的HTML。

如果Nginx映像中需要100%的资产,则可以使用多阶段构建,但是对于PHP映像,我需要一个资产。

解决此问题的最佳方法是什么?

我想重新使用此Webpack Dockerfile来运行webpack-dev-server进行开发,但在生产中根本不需要它。如果这使事情复杂化,则只需忽略。以后会有问题。

1 个答案:

答案 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