什么是 "docker container"?

what is "docker container"?

我知道 docker engine 位于 docker host 之上(即 OS)并且 docker 引擎从 docker 集线器拉动 docker/container images (或任何其他回购协议)。 Docker 引擎与 OS 交互以配置和设置作为“Docker Run”命令的一部分拉取的镜像容器。

不过我也经常遇到术语“Docker Container”。这是另一种工具吗?它在整个架构中的作用是什么?我知道 docker 主机有 windows 容器或 linux 容器..但是 Docker Container 本身是什么?是不是人们松散地泛指容器?

docker 容器是一个映像,它是一个可以独立存在的(将其视为 tarball 或存档)可执行包。该图像具有 运行 所需的一切,例如软件、运行 时间、工具、库等。查看 Docker 了解更多信息。

简而言之,当您执行 docker 图像时,它会生成一个 docker 容器。 您可以将它与 Java class(如 docker 图像)相关联,当我们初始化一个 class 时,它将创建一个对象(docker 容器)。

因此 docker 容器是 docker 映像的可执行形式。您可以从单个 docker 图像中拥有多个 Docker 容器。

Docker 容器只不过是使用图像作为源生成的进程

这些进程在命名空间方面与其他进程沙盒化(隔离),并在内存方面受到控制,cpu,等使用控制组。控制组和命名空间是 Linux 内核功能,有助于为 运行 进程创建一个沙盒环境来隔离。

容器是 docker 用来表示这些沙盒进程的名称。


一些琐事 - FreeBSD 中也存在沙盒进程的概念,它被称为 Jails。 虽然这个概念在核心技术方面并不新鲜。 Docker 创新地从容器的角度想象整个生态系统,并在内核功能之上提供出色的工具。

首先,您(通常)从 Dockerfile 开始,这是一个脚本,您可以在其中设置 docker 您将要工作的环境(OS,额外的包裹等)。如果你想要像典型编程语言中的源代码。

构建 Dockerfiles(使用命令 sudo docker build pathToDockerfile/,结果是一个图像。它基本上是 Dockerfile 中描述的环境的构建(或编译)和可执行版本。 实际上,您可以直接从 dockerhub 下载 docker 图片。 继续比喻它就像编译后的可执行文件。

现在您可以运行为图像指定名称或设置不同的属性。这是一个容器。例如,考虑一个服务器环境,您可能需要在同一时间多次实例化相同的服务。 继续这个比喻,这就像在同一时间多次启动相同的可执行程序。