在使用Docker时,我们从一个基本映像开始。我们启动它,创建更改,这些更改被保存在图层中形成另一个图像。

因此,最终我为我的PostgreSQL实例和我的web应用程序提供了一个图像,对这些图像的更改将持续保存。

什么是容器?


当前回答

*在docker中,镜像是一个不可变的文件,它包含docker应用程序运行所需的源代码和信息。它可以独立于容器而存在。

Docker容器是在运行时创建的虚拟化环境,需要镜像才能运行。docker网站上有一张图片显示了这种关系:

其他回答

Image相当于OOP中的类定义,层是该类的不同方法和属性。

容器是图像的实际实例化,就像对象是实例化或类的实例一样。

Docker Client, Server, Machine, Images, Hub, composites都是项目工具和软件,聚在一起形成了一个平台,在这个平台上,围绕着创建和运行一些叫做容器的东西,现在如果你运行Docker run redis命令,一个叫做Docker CLI的东西到达了一个叫做Docker Hub的东西,它下载了一个叫做image的文件。

码头工人形象:

一个镜像是一个单独的文件,包含运行一个非常特定的程序所需的所有依赖项和所有配置,例如redis是你刚刚下载的(通过运行docker run redis命令)应该运行的镜像。

这是存储在硬盘上的单个文件,在某些时候,您可以使用此映像来创建称为容器的东西。

容器是一个映像的实例你可以把它想象成一个运行的程序它有自己孤立的一组硬件资源它有自己的一小块内存有自己的一小块网络技术空间也有自己的一小块硬盘空间。

现在让我们看看当你发出下面的命令时: Sudo docker run hello-world

Above command will starts up the docker client or docker CLI, Docker CLI is in charge of taking commands from you kind of doing a little bit of processing on them and then communicating the commands over to something called the docker server, and docker server is in charge of the heavy lifting when we ran the command Docker run hello-world, That meant that we wanted to start up a new container using the image with the name of hello world, the hello world image has a tiny tittle program inside of it whose sole purpose or sole job is to print out the message that you see in the terminal.

现在,当我们运行该命令并将其发送到docker服务器时,后台很快就会发生一系列操作。Docker服务器看到我们试图使用名为hello world的映像启动一个新容器。

docker服务器做的第一件事是检查它是否已经有一个本地副本,比如你个人机器上的hello world映像或那个hello world文件的副本。因此,docker服务器研究了一种叫做图像缓存的东西。

现在,因为你和我刚刚在我们的个人电脑上安装了Docker,图像缓存目前是空的,我们没有之前已经下载过的图像。

因此,由于映像缓存是空的,docker服务器决定求助于一个名为docker hub的免费服务。Docker Hub是一个免费的公共映像库,您可以免费下载并在个人计算机上运行。所以Docker服务器联系了Docker Hub,下载了hello world文件,并将其存储在你的计算机上的image-cache中,现在它可以在未来的某个时候重新运行,而不必从Docker Hub重新下载它。

之后,docker服务器将使用它创建一个容器的实例,我们知道容器是一个映像的实例,它的唯一目的是运行一个非常特定的程序。因此,docker服务器从图像缓存中取出图像文件,并将其加载到内存中,从中创建一个容器,然后在其中运行一个程序。这个程序的目的就是打印出你看到的信息。

什么是容器: 首先,图像是如何创建容器的蓝图。

容器是一个进程或一组进程的资源专门分配给它的分组,在波形图,当我们考虑一个集装箱我们有一些正在运行的进程发送一个系统调用内核,内核会看那个传入系统调用,直接一个非常具体的部分硬盘,内存,CPU或其他什么它可能需要这些资源的一部分用于奇异的过程。

简而言之:

容器是内核中的一个分区(虚拟),它共享一个公共操作系统并运行一个镜像(Docker镜像)。

容器是一个自我维持的应用程序,它将包含包和运行代码所需的所有依赖项。

就像对象是面向对象编程语言中类的实例一样,Docker容器也是Docker映像的实例。

Dockerfile类似于生成tarball (Docker映像)的Bash脚本。

Docker容器就像tarball的提取版本。您可以在不同的文件夹(容器)中拥有尽可能多的副本。