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

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

什么是容器?


当前回答

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

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

其他回答

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

Docker容器是在运行时创建的虚拟化环境,需要镜像才能运行。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.

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

码头工人客户:

允许用户与Docker守护进程交互的命令行工具。

码头工人商店:

Store是一个Docker映像的注册表。您可以将注册表视为所有可用Docker映像的目录

这篇博文中的一张图片胜过千言万语。

简介:

从Docker中心提取图像或从Dockerfile构建=>给出一个 Docker图像(不可编辑)。 运行image (docker Run image_name:tag_name) =>给出一个运行 图片即容器(可编辑)

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.