在使用Docker时,我们从一个基本映像开始。我们启动它,创建更改,这些更改被保存在图层中形成另一个图像。
因此,最终我为我的PostgreSQL实例和我的web应用程序提供了一个图像,对这些图像的更改将持续保存。
什么是容器?
在使用Docker时,我们从一个基本映像开始。我们启动它,创建更改,这些更改被保存在图层中形成另一个图像。
因此,最终我为我的PostgreSQL实例和我的web应用程序提供了一个图像,对这些图像的更改将持续保存。
什么是容器?
当前回答
容器只是一个可执行的二进制文件,由主机操作系统在一组限制下运行,这些限制是由应用程序(例如Docker)预先设置的,该应用程序知道如何告诉操作系统应用哪些限制。
典型的限制是与进程隔离相关的、与安全性相关的(比如使用SELinux保护)和与系统资源相关的(内存、磁盘、CPU和网络)。
直到最近,只有基于unix的系统中的内核支持在严格限制下运行可执行文件的能力。这就是为什么今天大多数容器讨论主要涉及Linux或其他Unix发行版的原因。
Docker是知道如何告诉操作系统(主要是Linux)在什么限制下运行可执行文件的应用程序之一。可执行文件包含在Docker映像中,它只是一个tarfile。该可执行文件通常是Linux发行版用户空间(Ubuntu、CentOS、Debian等)的精简版本,预先配置为在其中运行一个或多个应用程序。
尽管大多数人使用Linux基础文件作为可执行文件,但它可以是任何其他二进制应用程序,只要主机操作系统的内核可以运行它(参见使用scratch创建一个简单的基础映像)。无论Docker镜像中的二进制文件是一个OS用户空间还是一个简单的应用程序,对于OS主机来说,它只是另一个进程,一个被预设的OS边界所控制的包含进程。
其他应用程序,如Docker,可以告诉主机操作系统在进程运行时应用哪些边界,包括LXC、libvirt和systemd。Docker曾经使用这些应用程序间接地与Linux操作系统交互,但现在Docker使用自己的库“libcontainer”直接与Linux交互。
因此容器只是在受限模式下运行的进程,类似于chroot的功能。
在我看来,Docker与其他容器技术的区别在于它的存储库(Docker Hub)和管理工具,这些工具使得使用容器变得非常容易。
参见Docker(软件)。
其他回答
映像是构建容器(正在运行的实例)的蓝图。
Docker容器正在运行一个映像的实例。你可以将图像与程序关联起来,将容器与进程关联起来:)
映像的实例称为容器。你有一个图像,它是你描述的一组图层。如果启动这个映像,就有了这个映像的运行容器。同一个映像可以有多个正在运行的容器。
你可以用docker images看到你所有的图像,而你可以用docker ps看到你正在运行的容器(你可以用docker ps -a看到所有的容器)。
因此,映像的运行实例就是一个容器。
容器只是一个可执行的二进制文件,由主机操作系统在一组限制下运行,这些限制是由应用程序(例如Docker)预先设置的,该应用程序知道如何告诉操作系统应用哪些限制。
典型的限制是与进程隔离相关的、与安全性相关的(比如使用SELinux保护)和与系统资源相关的(内存、磁盘、CPU和网络)。
直到最近,只有基于unix的系统中的内核支持在严格限制下运行可执行文件的能力。这就是为什么今天大多数容器讨论主要涉及Linux或其他Unix发行版的原因。
Docker是知道如何告诉操作系统(主要是Linux)在什么限制下运行可执行文件的应用程序之一。可执行文件包含在Docker映像中,它只是一个tarfile。该可执行文件通常是Linux发行版用户空间(Ubuntu、CentOS、Debian等)的精简版本,预先配置为在其中运行一个或多个应用程序。
尽管大多数人使用Linux基础文件作为可执行文件,但它可以是任何其他二进制应用程序,只要主机操作系统的内核可以运行它(参见使用scratch创建一个简单的基础映像)。无论Docker镜像中的二进制文件是一个OS用户空间还是一个简单的应用程序,对于OS主机来说,它只是另一个进程,一个被预设的OS边界所控制的包含进程。
其他应用程序,如Docker,可以告诉主机操作系统在进程运行时应用哪些边界,包括LXC、libvirt和systemd。Docker曾经使用这些应用程序间接地与Linux操作系统交互,但现在Docker使用自己的库“libcontainer”直接与Linux交互。
因此容器只是在受限模式下运行的进程,类似于chroot的功能。
在我看来,Docker与其他容器技术的区别在于它的存储库(Docker Hub)和管理工具,这些工具使得使用容器变得非常容易。
参见Docker(软件)。
虽然将容器看作一个运行的映像是最简单的,但这并不十分准确。
An image is really a template that can be turned into a container. To turn an image into a container, the Docker engine takes the image, adds a read-write filesystem on top and initialises various settings including network ports, container name, ID and resource limits. A running container has a currently executing process, but a container can also be stopped (or exited in Docker's terminology). An exited container is not the same as an image, as it can be restarted and will retain its settings and any filesystem changes.