我对某些术语感到困惑。
Dockerile
是用来创建图像的,还是一组有关如何从图像创建容器的指令?
因为有命令,例如FROM
(用于获取基本映像),RUN
(用于在容器中运行可执行文件)等。这些命令看起来像是有关如何创建容器的指令。
答案 0 :(得分:1)
Docker镜像是静态的,并且是根据Dockerfile
中指定的指令构建的。他们使用联合文件系统(UnionFS),以便在构建映像时所做的更改彼此堆叠,从而生成构建历史记录的DAG(有向无环图)。 FROM
顶部的Dockerfile
指令仅指向现有图像,并在此图像之上开始构建。
容器只是图像的实例化版本,基本上就是这个UnionFS,在其顶部放置了一个读/写层。
有趣的是,如果您在运行docker build
时(在带有Dockerfile
的目录中)观看输出,您会发现正在发生的事情是每条指令根据当前状态启动一个容器图像,先运行命令(apt-get install ...
或其他命令),然后运行commit
更改为图像。这就是为什么最好在Dockerfile
中批处理命令的原因-因为每个命令都会启动一个新容器。
答案 1 :(得分:0)
Dockerfile用于创建图像,以后可用于使用docker build
创建容器。
来自文档
Docker可以通过阅读Dockerfile中的指令来自动构建映像。 Dockerfile是一个文本文档,其中包含用户可以在命令行上调用以组装映像的所有命令。使用docker build的用户可以创建自动执行的构建,该构建可以连续执行多个命令行指令。
RUN
还将指令在当前图像上方的新层中执行所有命令,并提交结果。生成的提交映像将用于Dockerfile
中的下一步,而不是“运行(在容器中运行可执行文件)”。有关详细信息,请参见this。
答案 2 :(得分:0)
图片:
data[i][j] Error btnManualSearch 'charmap' codec can't encode characters in position 10-24: character maps to <undefined>
使用Docker engine
引用从Dockerfile
指令(如FROM,RUN等)构建Image
容器:
Dockerfile
从Docker engine
开始容器,我们可以说Image
是Container
的运行时实例