Docker.1-了解

Docker 是一个用于开发、发布和运行应用程序的开放平台。Docker 使你能够将应用程序与基础设施分离,以便你可以快速交付软件。借助 Docker,你可以像管理应用程序一样管理基础设施。通过利用 Docker 的方法来快速交付、测试和部署代码,你可以显著减少编写代码和在生产中运行代码之间的延迟。

Docker 平台

Docker 提供了在称为容器的松散隔离环境中打包和运行应用程序的能力。隔离和安全性允许你在给定主机上同时运行多个容器。容器是轻量级的,包含运行应用程序所需的一切,因此你不需要依赖主机上当前安装的内容。你可以在工作时轻松共享容器,并确保与你共享的每个人都获得以相同方式工作的相同容器。

Docker 提供了工具和平台来管理容器的生命周期:

  • 使用容器开发你的应用程序及其支持组件。
  • 容器成为分发和测试应用程序的单元。
  • 准备就绪后,将应用程序作为容器或编排服务部署到生产环境中。无论你的生产环境是本地数据中心、云提供商还是两者的混合,这都是一样的。

我们可以用 Docker 做什么

快速、一致地交付你的应用程序

Docker 允许开发人员使用提供应用程序和服务的本地容器在标准化环境中工作,从而简化了开发生命周期。容器非常适合持续集成和持续交付 (CI/CD) 工作流程。

考虑以下示例场景:

  • 你的开发人员在本地编写代码并使用 Docker 容器与同事共享他们的工作。
  • 他们使用 Docker 将应用程序推送到测试环境中并执行自动和手动测试。
  • 当开发人员发现错误时,可以在开发环境中修复它们,并将其重新部署到测试环境中进行测试和验证。
  • 测试完成后,向客户提供修复就像将更新的镜像推送到生产环境一样简单。

响应式部署和扩展

Docker 基于容器的平台支持高度可移植的工作负载。Docker 容器可以在开发人员的本地笔记本电脑、数据中心的物理机或虚拟机、云提供商或混合环境中运行。

Docker 的可移植性和轻量级特性还使得动态管理工作负载、根据业务需求几乎实时地扩展或拆除应用程序和服务变得很容易。

在相同硬件上运行更多工作负载

Docker 轻量且快速。它为基于虚拟机管理程序的虚拟机提供了可行且经济高效的替代方案,因此你可以利用更多服务器容量来实现业务目标。Docker 非常适合高密度环境以及需要用更少的资源做更多事情的中小型部署。

Docker 架构

Docker 使用 C/S(客户端-服务器)架构。Docker客户端与 Docker守护进程通信,后者负责构建、运行和分发 Docker 容器的繁重工作。Docker 客户端和守护进程可以 在同一系统上运行,也可以将 Docker 客户端连接到远程 Docker 守护进程。Docker 客户端和守护进程使用 REST API 通过 UNIX 套接字或网络接口进行通信。另一个 Docker 客户端是 Docker Compose,它允许你使用由一组容器组成的应用程序。

image-20230701140437279

Docker 守护进程

Docker 守护进程 ( dockerd) 侦听 Docker API 请求并管理 Docker 对象,例如镜像、容器、网络和卷。守护进程还可以与其他守护进程通信来管理 Docker 服务。

Docker 客户端

Docker 客户端 ( docker) 是许多 Docker 用户与 Docker 交互的主要方式。当你使用诸如docker run之类的命令时,客户端会将这些命令发送到dockerd,由后者执行这些命令。该docker命令使用 Docker API。Docker 客户端可以与多个守护进程通信。

Docker 桌面

Docker Desktop 是一款适用于 Mac、Windows 或 Linux 环境的易于安装的应用程序,使你能够构建和共享容器化应用程序和微服务。Docker Desktop 包括 Docker 守护进程 ( dockerd)、Docker 客户端 ( docker)、Docker Compose、Docker Content Trust、Kubernetes 和 Credential Helper。有关更多信息,请参阅Docker 桌面

Docker 注册表

Docker注册表存储 Docker 镜像。Docker Hub 是任何人都可以使用的公共注册表,并且 Docker 默认配置为在 Docker Hub 上查找镜像。你甚至可以运行自己的私人注册表。

跟 npm 一样,都用镜像源

Docker 对象

镜像

镜像是一个只读模板,包含创建 Docker 容器的说明通常,一个镜像基于另一个镜像,并进行一些额外的自定义。例如,你可以构建一个基于该ubuntu 镜像的镜像,但会安装 Apache Web 服务器和你的应用程序,以及运行应用程序所需的配置详细信息。

你可以创建自己的镜像,也可以仅使用其他人创建并在注册表中发布的镜像。要构建你自己的镜像,你可以使用简单的语法创建一个Dockerfile ,用于定义创建镜像并运行它所需的步骤。Dockerfile 中的每条指令都会在镜像中创建一个层。当你更改 Dockerfile 并重建镜像时,只会重建那些已更改的层。与其他虚拟化技术相比,这就是镜像如此轻量、小型且快速的部分原因。

容器

容器是镜像的可运行实例。你可以使用 Docker API 或 CLI 创建、启动、停止、移动或删除容器。你可以将容器连接到一个或多个网络,为其附加存储,甚至可以根据其当前状态创建一个新镜像。

默认情况下,容器与其他容器及其主机相对较好地隔离。你可以控制容器的网络、存储或其他底层子系统与其他容器或主机的隔离程度。

容器由其镜像以及你在创建或启动它时提供给它的任何配置选项来定义。当容器被删除时,任何未存储在持久存储中的状态更改都会消失

docker run命令示例

以下命令运行一个ubuntu容器,以交互方式附加到本地命令行会话,然后运行/bin/bash.

1
2
3
docker run -i -t ubuntu /bin/bash
# 简写方式
docker run -it ubuntu /bin/bash

当你运行此命令时,会发生以下情况(假设你使用默认注册表配置):

  1. 如果你本地没有该ubuntu镜像,Docker 会从你配置的注册表中提取该镜像,就像你docker pull ubuntu手动运行一样。
  2. Docker 创建一个新容器,就像你手动运行命令一样docker container create
  3. Docker 为容器分配一个读写文件系统,作为其最后一层。这允许正在运行的容器在其本地文件系统中创建或修改文件和目录。
  4. Docker 创建一个网络接口来将容器连接到默认网络,因为你没有指定任何网络选项。这包括为容器分配 IP 地址。默认情况下,容器可以使用主机的网络连接来连接到外部网络
  5. Docker 启动容器并执行/bin/bash. 由于容器以交互方式运行并附加到你的终端(由于-i-t 标志),因此你可以使用键盘提供输入,同时将输出记录到你的终端。
  6. 当你键入exit终止/bin/bash命令时,容器会停止但不会被删除。你可以重新启动它或将其删除。

底层技术

Docker 使用Go 编程语言编写,并利用 Linux 内核的多个特性来提供其功能。Docker 使用一种称为容器namespaces的技术来提供隔离的工作空间。当您运行容器时,Docker 会 为该容器创建一组命名空间。

这些命名空间提供了一层隔离。容器的每个方面都在单独的命名空间中运行,并且其访问仅限于该命名空间。

后续步骤

  • 阅读有关安装 Docker 的信息。
  • 通过 Docker 入门教程获得实践经验 。

相关链接

[1] Docker 官网

[2] Github Docker 源码