我想在 github 上为 Linkurious 项目构建一个 docker 镜像,它需要 Neo4j 数据库和 Node.js 才能运行。
我的第一种方法是为我的图像声明一个基本图像,其中包含 Neo4j。参考文档没有以任何有用的方式定义“基本图像”:
基础镜像:没有父镜像的镜像是基础镜像
我从中读到,如果该图像本身没有基本图像,我可能只有一个基本图像。
但是什么是基本图像?这是否意味着,如果我在 FROM 指令中声明 neo4j/neo4j,当我的图像运行时,neo 数据库将自动运行并在容器中的端口 7474 上可用?
阅读我看到的 Docker 参考资料:
FROM 可以在单个 Dockerfile 中出现多次,以创建多个图像。只需在每个新的 FROM 命令之前记下提交的最后一个图像 ID 输出。
我要创建多个图像吗?看来我想要的是拥有一个包含其他图像内容的单个图像,例如 neo4j 和 node.js。
我在参考手册中没有找到声明依赖项的指令。是否没有像 RPM 那样的依赖关系,为了运行我的图像,调用上下文必须首先安装它需要的图像?
我很困惑…
原文由 ekkis 发布,翻译遵循 CC BY-SA 4.0 许可协议
截至 2017 年 5 月,多个
FROM
可以在单个 Dockerfile 中使用。请参阅“ 构建器模式与 Docker 中的多阶段构建”( Alex Ellis 撰写)和 Tõnis Tiigi 撰写的 PR 31257 。
结果将是两张图像,一张用于构建,一张仅包含生成的应用程序( _小得多_)
一组文件,加上
EXPOSE
’d 端口,ENTRYPOINT
和CMD
。您可以添加文件并基于该基础映像构建新映像,使用新的
Dockerfile
以FROM
指令开头:在FROM
之后提到的图像是“新图像的基本图像”。仅当您不覆盖
CMD
和ENTRYPOINT
。但是图像本身就足够了:如果您必须添加与 --- 相关的文件,您将使用
FROM neo4j/neo4j
neo4j
用于您对neo4j
。