在轻松打包、部署和运行分布式应用程序方面,Docker 已成为 IT 行业的标准。Docker 的主要优点是它允许用户将应用程序及其所有依赖项打包到一个称为容器的标准化单元中。
由于 Docker 是一个容器化平台,因此了解容器化背后的历史非常重要。
容器化之前的历史
在容器化出现之前,隔离、组织应用程序及其依赖项的主要方法是将每个应用程序放在自己的虚拟机中。这些机器在同一个物理硬件上运行多个应用程序,这个过程只不过是虚拟化。
但是虚拟化几乎没有缺点,例如虚拟机体积庞大。运行多个虚拟机会导致性能不稳定。启动过程通常需要很长时间,VM 无法解决可移植性、软件更新或持续集成和持续交付等问题。
这些缺点导致了一种称为容器化的新技术的出现。
容器化是一种将虚拟化带到操作系统级别的虚拟化。虚拟化为硬件带来了抽象,而容器化为操作系统带来了抽象。
容器与虚拟机
术语“容器”和“虚拟机”经常互换使用,然而,这往往是一种误解。但是,两者只是提供操作系统虚拟化的不同方法。
虚拟机
通常包括完整的操作系统、操作系统包,如果需要,还包括少量应用程序。这是通过为虚拟机提供硬件虚拟化的管理程序实现的。这允许单个服务器作为虚拟来宾运行许多独立的操作系统。一般来说,虚拟机是一个完全类似于计算机的系统。
容器
类似于虚拟机,只是容器不是完整的操作系统。容器通常只包含必要的操作系统包和应用程序。它们通常不包含完整的操作系统或硬件虚拟化,这就是它们“轻量级”的原因。
而容器通常用于隔离单个主机内正在运行的进程,以确保隔离的进程无法与同一系统内的其他进程交互。容器之间的沙箱进程。现在,您可以将 Docker 容器视为虚拟机的轻量级等价物。Docker 可以尽可能轻松地创建和使用容器。
使用 Docker 容器的原因
容器没有来宾操作系统并使用主机的操作系统。因此,他们会在需要时共享相关的库和资源。
应用程序隔离:如果你想在一台服务器上运行多个应用程序,将每个应用程序的组件保存在单独的容器中可以防止依赖管理出现问题。
由于应用程序特定的二进制文件和容器库在主机内核上运行,因此应用程序的处理和执行速度非常快。
启动一个容器只需要几分之一秒。
容器比虚拟机轻量级且速度更快。
什么是 Docker 容器?
Docker 是一个以容器的形式将应用程序及其所有依赖项打包在一起的平台。它使用容器使应用程序的创建、部署和运行变得更加容易。Docker 在容器内绑定应用程序及其依赖项。
容器允许开发人员将应用程序及其所需的所有部分(例如库和其他依赖项)打包在一起,然后将其作为一个包发送出去。
假设您需要构建一个应用程序。为了使该应用程序可供公众使用,您需要在某个地方托管它。过去,您需要构建自己的计算机。您需要设置一个名为“server”的专用 Web 服务,它基本上是一台专用于托管网站或 Web 服务的计算机。但是,您的应用程序开始时可能只有大约 300 兆字节的大小。那么,当您的应用程序远小于 1GB 大小时,您为什么想要一个“虚拟机”,它是由虚拟化产生的虚拟化环境?
这就是“容器”的概念来解决这个问题的地方。Docker 通过以下方式完成它。不需要为每个应用程序托管每个操作系统,而是可以共享一些公共资源,并且有一种叫做“docker 引擎”的东西,它位于操作系统之上。
采用 Docker 或容器的结果是可以更快地部署或取消部署应用程序。更快地开始和停止,更快地转换到另一个“image”,更快地处理和做很多事情。
Docker 生态系统中元素和工具
Dockerfile
Dockerfile 是一组精确的指令,说明如何创建新的 Docker 镜像。为基于它运行的容器设置默认值等等。它是一个文本文档,其中包含用户可以在命令行上调用以组合图像的所有命令。因此,Docker 可以通过读取 Dockerfile 中的指令自动构建镜像。
Docker Image(映像)
Docker Image 可以比作用于创建 Docker 容器的只读模板。Image是一个蓝图,可以从中启动任意数量的全新容器。没有“当前运行的命令”保存在Image中。当您启动容器时,有点像在关闭电源后启动机器。
Docker Container(容器)
它是 Docker Image 的运行实例,因为它们包含运行应用程序所需的整个包。
想象一下,您想运行一个与系统上其他所有内容隔离的命令。它应该只访问它被允许访问的资源,并且不知道机器上还有其他任何东西。在容器内运行的进程认为它是唯一的进程,并且只能看到一个准系统的 Linux 发行版,这些内容在图像中描述。
运行容器的机器不应该过多关心里面的内容,而 dockerized 应用程序并不关心它是在Kubernetes 集群还是单个服务器上——它无论如何都能运行。
一个容器一次可以运行多个进程。您可以将许多服务打包到一个容器中,并让它们并排运行。
当一个 Docker 容器被删除时,重新启动镜像将启动一个新的容器,而不会对之前运行的容器进行任何更改——这些更改将丢失。
Docker Volume(数据卷)
容器默认不会留下任何东西。对容器所做的任何更改(假设您没有将其另存为 Image)都会在删除后立即丢失。
为了能够保存(持久化)数据并在容器之间共享数据,Docker 提出了Volume(数据卷)的概念 。很简单,Volume是默认文件系统之外的目录(或文件),并作为主机文件系统上的普通目录和文件存在。
Docker Volume使我们能够保存数据并在容器之间共享。