我想在 github 上为Linkurious项目构建一个 docker 镜像,它需要 Neo4j 数据库和 Node.js 才能运行。
我的第一种方法是为我的图像声明一个基本图像,其中包含 Neo4j。参考文档没有以任何有用的方式定义“基本图像”:
基础镜像:没有父镜像的镜像是基础镜像
我从中读到,如果该图像本身没有基本图像,我可能只有一个基本图像。
但什么是基本图像?这是否意味着如果我在 FROM 指令中声明 neo4j/neo4j,当我的图像运行时,neo 数据库将自动运行并在容器中的端口 7474 上可用?
阅读 Docker 参考资料(参见:https ://docs.docker.com/reference/builder/#from )我看到:
FROM 可以在单个 Dockerfile 中出现多次,以创建多个图像。只需在每个新的 FROM 命令之前记下提交的最后一个图像 ID 输出。
我要创建多个图像吗?看来我想要的是拥有一个包含其他图像内容的单个图像,例如 neo4j 和 node.js
我在参考手册中没有找到声明依赖项的指令。是否没有像 RPM 那样的依赖关系,为了运行我的图像,调用上下文必须首先安装它需要的图像?
我很困惑…
截至 2017 年 5 月,FROM单个 Dockerfile 中可以使用多个 s。 请参阅“构建器模式与 Docker 中的多阶段构建”(Alex Ellis撰写)和TCrerinis Tiigi 撰写的PR 31257。
FROM
一般语法涉及FROM在 Dockerfile 中添加额外的时间 - 以最后一条FROM语句为准,即为最终的基础映像。要从中间图像复制伪影和输出,请使用COPY --from=<base_image_number>.
COPY --from=<base_image_number>
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"]
结果将是两张图像,一张用于构建,一张仅包含生成的应用程序( 小得多 )
REPOSITORY TAG IMAGE ID CREATED SIZE multi latest bcbbf69a9b59 6 minutes ago 10.3MB golang 1.7.3 ef15416724f6 4 months ago 672MB
什么是基本图像?
一组文件,加上EXPOSE‘d 端口ENTRYPOINT和CMD. 您可以添加文件并基于该基础镜像构建新镜像,并以指令Dockerfile开头:后面提到的镜像是新镜像的“基础镜像”。FROM``FROM
EXPOSE
ENTRYPOINT
CMD
Dockerfile
FROM``FROM
这是否意味着如果我neo4j/neo4j在FROM指令中声明,当我的图像运行时,neo 数据库将自动运行并在端口 7474 上的容器中可用?
neo4j/neo4j
仅当您不覆盖CMDand时ENTRYPOINT。 但是图像本身就足够了:FROM neo4j/neo4j如果您必须添加与neo4j您的特定用途相关的文件,您将使用neo4j.
FROM neo4j/neo4j
neo4j