代码之家  ›  专栏  ›  技术社区  ›  mpen

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

  •  0
  • mpen  · 技术社区  · 4 年前

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

    1. PHP图像。运行php fpm,保存所有应用程序代码。
    2. Nginx公司。为静态内容提供服务,并为其他所有内容提供PHP服务。
    3. 网页包。这就是它变得毛茸茸的地方。

    我要做一个Dockerfile只为Webpack这将建立我所有的静态资产,但之后我不知道如何复制到其他两个图像。所有的静态文件都需要复制到Nginx映像中,除了一个JSON文件,它保存了关于生成什么文件的元数据,这样我就可以用PHP编写适当的HTML了。

    注意:我想重新使用这个Webpack Dockerfile来运行Webpack dev server进行开发,但是在prod中根本不需要它。如果这使事情复杂化,那就忽略它。这是以后的问题。

    0 回复  |  直到 4 年前
        1
  •  3
  •   camba1    4 年前

    在多阶段构建中,您只需将所需信息从一个映像复制到下一个映像,而无需复制所有文件。下面是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/

    在您的其他dockerfiles中可能是这样的:

    COPY —form=mywebpackimage /awesome/files /newimage/directory