在使用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(软件)。

其他回答

I would like to fill the missing part here between docker images and containers. Docker uses a union file system (UFS) for containers, which allows multiple filesystems to be mounted in a hierarchy and to appear as a single filesystem. The filesystem from the image has been mounted as a read-only layer, and any changes to the running container are made to a read-write layer mounted on top of this. Because of this, Docker only has to look at the topmost read-write layer to find the changes made to the running system.

容器只是一个可执行的二进制文件,由主机操作系统在一组限制下运行,这些限制是由应用程序(例如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(软件)。

A docker image or a container image in general is a software package which wraps your application executable, dependencies, configurations and application runtime into a secure and immutable unit. When I am saying application executable it differs from application to application. For example if it is a java application it would a jar file, for node application may be a js file. Similarly the application runtime depends on your application itself. For java application it will be JRE, for node application it is node binaries.

您可以根据映像清单文件中提供的说明构建映像。Dockerfile)。构建映像后,可以将其存储在本地或一些容器映像存储库(如hub.docker.com)中。

当您希望将映像作为应用程序工作负载运行时,您可以启动一个需要映像的容器。容器是映像的运行时实例。

要构建一个映像,存储它并将其作为容器运行,你需要一个名为容器运行时的软件,比如Docker。这些容器运行时符合Open container Initiative为映像创建和容器运行提供的标准。

在编程方面,

图片是源代码。

当编译和构建源代码时,它被称为应用程序。

类似于“当为映像创建实例时”,它被称为“容器”。

映像或容器映像是一个包含应用程序代码、应用程序运行时、配置和依赖库的文件。映像基本上是将所有这些包装成一个单一的、安全的不可变单元。使用适当的docker命令构建映像。图像有图像id和图像标签。标签的格式通常为<docker-user-name>/image-name:tag。

当您开始使用映像运行应用程序时,实际上是启动了一个容器。你的容器是一个运行图像的沙盒。Docker软件用于管理映像和容器。

Image是一个安全的包,其中包含应用程序工件、库、配置和应用程序运行时。容器是映像的运行时表示形式。