Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/apache-kafka/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
了解docker-容器如何包含所有必需的依赖项?_Docker - Fatal编程技术网

了解docker-容器如何包含所有必需的依赖项?

了解docker-容器如何包含所有必需的依赖项?,docker,Docker,我在努力理解Docker 我的理解是,容器实际上类似于运行sinatller后的应用程序,但只包含最终目的地中安装的文件。是这样吗 如果是,那么所有的依赖关系如何?创建容器的程序如何知道程序将需要的所有依赖项 很抱歉,这些问题都是无稽之谈,但我正在努力正确理解Docker。创建容器的程序是Docker守护进程。它对应用程序依赖项一无所知。它确实了解文件系统。通常从“基本映像”开始,这是一个可供安装的根文件系统,如ubuntu或centos。然后,当您添加新软件时,它会被添加到旧软件之上的新“映像

我在努力理解Docker

我的理解是,容器实际上类似于运行sinatller后的应用程序,但只包含最终目的地中安装的文件。是这样吗

如果是,那么所有的依赖关系如何?创建容器的程序如何知道程序将需要的所有依赖项


很抱歉,这些问题都是无稽之谈,但我正在努力正确理解Docker。

创建容器的程序是
Docker
守护进程。它对应用程序依赖项一无所知。它确实了解文件系统。通常从“基本映像”开始,这是一个可供安装的根文件系统,如
ubuntu
centos
。然后,当您添加新软件时,它会被添加到旧软件之上的新“映像”中

因此,如果将软件安装到容器中,则以持久方式安装的所有内容(例如,在磁盘上)都将保留在该文件系统中。事实上,由于该文件系统是一个“写时复制”文件系统,它确切地知道新文件是什么,因此它可以有效地将添加到“图像”层中的部分打包。这种新的“形象”永远不会改变。新映像和基础映像可以启动一个可运行的容器(现在添加了一个新层来捕获它所做的任何更改)


容器不仅仅是一个独立的文件系统。它也是一个独立的进程树和一个网络接口。

好的,所以我现在很困惑。如何在不同的基础映像上运行Docker映像?Docker图像是否经常依赖于它所基于的原始基础中的某些内容?是的,每个图像都依赖于它所基于的层。如果不重建基础图像上的所有层,则无法更改基础图像。因此,如果我的图像中需要node.js,我会将其安装到Dockerfile所在的目录中吗?我不必在Dockerfile中指定在生成映像时安装node.js的说明?您可以选择一个已经有nodej的映像,就像正式的nodej一样。例如,在
Dockerfile
顶部添加
FROM node:latest
,以使用最新节点。