当前位置: 首页 > 面试题库 >

多个FROM-含义

严宏朗
2023-03-14
问题内容

我想在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中那样的依赖关系,为了运行我的映像,调用上下文必须首先安装它需要的映像?

我糊涂了…


问题答案:

什么是基本图片?

一组文件,加上EXPOSE端口ENTRYPOINTCMD
您可以添加文件并基于该基础图像构建新图像,Dockerfile并以FROM指令开头:后面提到的图像FROM是新图像的“基础图像”。

这是否意味着如果我neo4j/neo4jFROM指令中声明,则在运行映像时,neo数据库将自动运行并且可在端口7474的容器中使用?

仅当您不覆盖CMD和时ENTRYPOINT
但是图像本身就足够了:FROM neo4j/neo4j如果必须添加与neo4j的特定用途相关的文件,则可以使用neo4j

FROM 可以在一个Dockerfile中多次出现


:有一项建议无论如何都应删除该“功能”(发行13026)

问题14412提到:

使用倍数FROM并不是一个真正的功能,而是一个错误(哦,很好,限制很严格,并且FROM在Dockerfile中很少有用例的案例)。

使用docker(moby)17.05-ce更新2017年5月(18个月后)。

可以 在单个Dockerfile中使用多个FROM 。
请参阅“ Builder模式与多阶段建立在泊坞 ”(由 亚历克斯·埃利斯 )和PR
31257通过
TõnisTiigi

之前:

构建器模式涉及使用两个Docker映像-一个用于执行构建,另一个用于运送第一个构建的结果,而不会影响第一个映像中的构建链和工具。

后:

通用语法涉及FROM在Dockerfile中添加其他时间-以最后一条FROM语句为最终基础映像为准。要复制中间图像的伪像和输出,请使用COPY --from=<base_image_number>

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 .

相同的 (!)Dockerfile的第二部分:

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


 类似资料:
  • 问题内容: 据我所知,“ …”表示下面代码段中数组的长度。 另一方面,正如我猜想的那样,“ …”表示将以下代码段中的切片拆分为int的参数。我对此不太确定。 现在,两种含义的差异使我很难理解“ …”是什么。 问题答案: 您已经注意到Go中的两种情况。实际上,有3个: 在编译时 评估为[3] int {1,2,3} 解压缩作为函数的参数。这与您错过的一个(可变参数的定义)相匹配: 现在是另一个问题(

  • 问题内容: 我有两个表,我需要创建一个视图。这些表是: 我使用以下查询来执行此操作。不带“创建视图”部分的查询运行良好,但带有“创建视图”的查询则显示错误“视图的SELECT在FROM子句中包含子查询”。可能是什么问题和可能的解决方案: 问题答案: 根据文档: MySQL文档 SELECT语句在FROM子句中不能包含子查询。 解决方法是为每个子查询创建一个视图。 然后从您的视图中访问这些视图

  • 问题内容: 大多数SQL方言都接受以下两个查询: 现在显然当您需要外部联接时,需要第二种语法。但是,在进行内部联接时,为什么我应该更喜欢第二种语法(反之亦然)? 问题答案: 在大多数现代数据库中,不赞成使用仅列出表并使用子句指定连接条件的旧语法。 这不仅是为了展示,当您在同一查询中同时使用INNER和OUTER联接时,旧语法可能会变得模棱两可。 让我给你举个例子。 假设您的系统中有3个表: 每个表

  • 我需要一些“包含”和“不包含”的正则表达式。通常我会写: 包含:(.*WORD_A.*)$,不包含:(^((?!WORD_A.*)*)$ 如果单独使用,这很好,但我想写一些可以检测到的东西,比如“包含单词A和单词B”(顺序不相关!)和“包含单词A,但不包含单词B)。 基本上,我希望用户可以做出这样的声明“以单词a开头,包含单词B,但不是C和/或以D结尾”,程序返回真/假。最好的办法是只附加正则表达

  • 最近我一直在使用一些flutter插件。许多插件都工作得很好,但我多次遇到令人沮丧的错误,通常导致放弃插件。 这是我得到的最后一个,schedule_notifications: SO和GitHub上有许多类似问题的例子(见我文章的结尾),但唯一建议解决它们的是“使用,,,然后”。有时这可能足够了,但并不总是如此——在我的特殊情况下,我仍然会得到完全相同的错误。 值得注意的是,如果我克隆了插件的整

  • 嗨,我有相当不错的python和java知识,我最近决定在我的编程方面取得进一步的进步,就是创建我自己的语言,以便在我需要的时候使用和操作。我为eclipse安装了javacc插件,并浏览了一些教程。 我的问题是,当我创建一个新项目(文件 静态=假; “令牌上的语法错误,请删除这些令牌” Eclipse对除类名之外的所有内容都这样做,请注意,项目下的javacc模板没有错误。 请帮我找到一个解决方