在使用Docker时,我们从一个基本映像开始。我们启动它,创建更改,这些更改被保存在图层中形成另一个图像。
因此,最终我为我的PostgreSQL实例和我的web应用程序提供了一个图像,对这些图像的更改将持续保存。
什么是容器?
在使用Docker时,我们从一个基本映像开始。我们启动它,创建更改,这些更改被保存在图层中形成另一个图像。
因此,最终我为我的PostgreSQL实例和我的web应用程序提供了一个图像,对这些图像的更改将持续保存。
什么是容器?
当前回答
Docker容器正在运行一个映像的实例。你可以将图像与程序关联起来,将容器与进程关联起来:)
其他回答
Dockerfile→(Build)→Image→(Run)→Container。
Dockerfile:包含一组Docker指令,以您喜欢的方式配置您的操作系统,并安装/配置所有软件。 图片:编译好的Dockerfile。节省了每次需要运行容器时重新构建Dockerfile的时间。这是一种隐藏供应代码的方法。 容器:虚拟操作系统本身。您可以ssh进入其中并运行任何命令,就像它是一个真实的环境一样。您可以从同一个映像运行1000多个容器。
尽管阅读了这里所有的问题,我还是无法理解图像和图层的概念,然后最终偶然发现了Docker的这个优秀文档(废话!)
这里的例子是理解整个概念的关键。这是一篇很长的文章,所以我总结了需要真正抓住的要点,以使文章变得清晰。
镜像:Docker镜像由一系列只读层构建而成 层:每一层代表图像Dockerfile中的一条指令。
示例:下面的Dockerfile包含四个命令,每个命令创建一个层。
从ubuntu: 15.04 副本。/应用程序 运行make /app CMD python /app/app.py
重要的是,每一层都只是与前一层的一组差异。
容器。 当你创建一个新的容器时,你在底层的层上添加了一个新的可写层。这一层通常被称为“容器层”。对正在运行的容器所做的所有更改,例如写入新文件、修改现有文件和删除文件,都将写入这个薄的可写容器层。
因此,容器和映像之间的主要区别是 最上面的可写层。所有写入添加new或 修改现有数据都存储在这个可写层中。当 容器被删除,可写层也被删除。的 底层图像保持不变。
从磁盘大小的角度理解映像cnd容器
要查看正在运行的容器的大致大小,可以使用docker ps -s命令。你得到size和virtual size作为两个输出:
大小:用于每个容器的可写层的数据量(在磁盘上) 虚拟大小:容器使用的只读映像数据所使用的数据量。多个容器可以共享部分或全部只读映像数据。因此它们不是相加的。也就是说,你不能把所有的虚拟大小相加来计算镜像占用了多少磁盘空间
另一个重要的概念是写时复制策略
如果一个文件或目录存在于映像的较低层中,而另一层(包括可写层)需要对其进行读访问,则它只使用现有文件。当另一层第一次需要修改该文件时(当构建映像或运行容器时),该文件被复制到该层并进行修改。
我希望这能帮助到像我一样的人。
*在docker中,镜像是一个不可变的文件,它包含docker应用程序运行所需的源代码和信息。它可以独立于容器而存在。
Docker容器是在运行时创建的虚拟化环境,需要镜像才能运行。docker网站上有一张图片显示了这种关系:
映像或容器映像是一个包含应用程序代码、应用程序运行时、配置和依赖库的文件。映像基本上是将所有这些包装成一个单一的、安全的不可变单元。使用适当的docker命令构建映像。图像有图像id和图像标签。标签的格式通常为<docker-user-name>/image-name:tag。
当您开始使用映像运行应用程序时,实际上是启动了一个容器。你的容器是一个运行图像的沙盒。Docker软件用于管理映像和容器。
Image是一个安全的包,其中包含应用程序工件、库、配置和应用程序运行时。容器是映像的运行时表示形式。
简单地说,如果一个图像是一个类,那么容器就是一个类的实例,一个运行时对象。