我想创建一个可以在其他Dockerfile中使用的Docker映像来构建这些项目。因此,我需要将文件从特定项目的上下文复制到所构建的容器中。
docker是否可以创建可在其他Dockerfile中使用的映像,并在构建特定于项目的Dockerfile时执行该映像的Dockerfile中指定的命令?还是对此有其他解决方案?像“模板”映像或Dockerfiles。
我想要实现的是一个可以在我的项目Dockerfile中简单指定的映像,它可以构建当前项目。当我更新每个项目的图像时,都应该更新。
您所寻找的被称为多阶段构建,并且您可能会在文档中找到一整页的内容。
通常,您可以在上层阶段使用它来构建依赖关系,以便以后使用。
这是文档的示例之一:
FROM golang:1.7.3 AS builder 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=builder /go/src/github.com/alexellis/href-counter/app . CMD ["./app"]
来源:https : //docs.docker.com/develop/develop-images/multistage-build/#name-your-build-stages
以及进一步的文档:
使用多阶段构建时,您不仅限于从之前在Dockerfile中创建的阶段进行复制。您可以使用
COPY --from
指令从单独的映像进行复制,方法是使用本地映像名称,本地或Docker注册表上可用的标签或标签ID。Docker客户端在必要时提取映像并从那里复制工件。语法为:COPY --from=nginx:latest /etc/nginx/nginx.conf /nginx.conf
因此,您可以从Dockerfile中明确拥有自己的映像,并使用以下命令构建它:
docker build . -t my-namespace/template
然后在“应用程序” Dockerfile中复制所需的文件:
FROM alpine
COPY --from=my-namespace/template:latest /path/from/template /path/in/app
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句