认识 Docker 的世界

Docker 简介:

  • Docker 是一种运行于 Linux 和 Windows 上的软件,用于创建、管理和编排容器。
  • Docker 是在 GitHub 上开发的 Moby 开源项目的一部分。
  • Docker 公司,位于旧金山,是整个 Moby 开源项目的维护者。Docker 公司还提供商业版和社区版。

 认识 Docker 的世界_第1张图片

 

Docker 运行时与编排引擎:

  • Docker 引擎是用于运行和编排容器的基础设施工具。有 VMware 管理经验的读者可以将其类比为 ESXi。
  • ESXi 是运行虚拟机的核心管理程序,而 Docker 引擎是运行容器的核心容器运行时。
  • 其他 Docker 公司或第三方的产品都是围绕 Docker 引擎进行开发和集成的。

认识 Docker 的世界_第2张图片

 

 

Docker 开源项目(Moby):

  • 国内码云平台 =》https://gitee.com/mirrors/moby

认识 Docker 的世界_第3张图片

 Moby is an open-source project created by Docker to enable and accelerate software containerization.

It provides a "Lego set" of toolkit components, the framework for assembling them into custom container-based systems, and a place for all container enthusiasts and professionals to experiment and exchange ideas. Components include container build tools, a container registry, orchestration tools, a runtime and more, and these can be used as building blocks in conjunction with other tools and projects.

Docker 首席技术官 Solomon Hykes 对于此举的解释是:

按照设计,Moby 面向的是希望基于容器构建自己的系统的系统构建者,而不是可以使用 Docker 或其他容器平台的应用程序开发人员。Moby 项目的参与者可以从源于 Docker 的组件库中选择,或者他们也可以选择“带来自己的组件”(BYOC),包括可以打包成容器,然后混合搭配所有组件,创建一个定制化的容器系统。

 

Docker 应用场景:

  • 【微服务架构】通过对特定的业务领域进行分析和业务建模,将复杂的业务逻辑剥离成小而专一、耦合度低并且高度自治的一组服务,原生容器轻量级、统一部署的特性为解决各个微服务统一管理、调度、部署带来了全新的思路,并且大大降低了服务和服务之间、版本和版本之间的依赖关系,让同一个微服务在不同环境中保持良好的一致性。

认识 Docker 的世界_第4张图片

  • 【持续集成(CI)与持续交付/部署(CD)】基于原生容器的DevOps平台为用户提供基础的开发环境,使开发者只需要关注代码开发减少相关工具的安装和配置工作量。同时丰富的容器镜像,可以让运维人员在平台上快速部署开发所需要的服务,支持通过环境变量绑定服务。实现开发环境、测试环境以及生产环境的隔离以及环境的快速搭建和回收,提高了整体效率。

认识 Docker 的世界_第5张图片

  • 【快速弹性伸缩】借助容器快速启动、快速部署、海量并发的能力,对于需求变化量大,并且需要快速启动几百甚至上千台机器的应用,容器可以非常好地满足业务的突发需求。

认识 Docker 的世界_第6张图片

 

Docker VS VM(虚拟机):

认识 Docker 的世界_第7张图片

容器和虚拟机都依赖于【宿主机】才能运行。宿主机可以是 =》【笔记本】,【PC主机】,【树莓派】,【数据中心的物理服务器】,【公有云的某个实例】。

在上面的示例中,假设宿主机是一台需要运行 4 个业务应用的物理服务器。

  • 【Docker容器模型】服务器启动之后,所选择的操作系统会启动。在 Docker 世界中可以选择 Linux,或者内核支持内核中的容器原语的新版本 Windows。 与虚拟机模型相同,OS 也占用了全部硬件资源。在 OS 层之上,需要安装容器引擎(如 Docker)。 容器引擎可以获取系统资源,比如进程树、文件系统以及网络栈,接着将资源分割为安全的互相隔离的资源结构,称之为容器。 每个容器看起来就像一个真实的操作系统,在其内部可以运行应用。按照前面的假设,需要在物理机上运行 4 个应用。 因此,需要划分出 4 个容器并在每个容器中运行一个应用,如上图(左侧)所示。
  • 【VM模型】在虚拟机模型中,首先要开启物理机并启动 Hypervisor 引导程序。一旦 Hypervisor 启动,就会占有机器上的全部物理资源,如 CPU、RAM、存储和 NIC。 Hypervisor 接下来就会将这些物理资源划分为虚拟资源,并且看起来与真实物理资源完全一致。 然后 Hypervisor 会将这些资源打包进一个叫作虚拟机(VM)的软件结构当中。这样用户就可以使用这些虚拟机,并在其中安装操作系统和应用。 前面提到需要在物理机上运行 4 个应用,所以在 Hypervisor 之上需要创建 4 个虚拟机并安装 4 个操作系统,然后安装 4 个应用。当操作完成后,结构如上图(右侧)所示。

Docker 总结:

  • Docker 是一个开源应用容器引擎,支持第三方开发和集成;
  • Docker 可以让开发者打包他们的应用以及依赖包到一个轻量级、可移植的镜像中,然后发布部署到任何流行的Linux机器上,也可以实现虚拟化;
  • Docker 容器通过 Docker 镜像来创建。
  • Docker 容器之间不会有任何接口冲突,实现进程级隔离;
  • Docker 容器的性能开销极其低,占用资源少,启动速度快,相对 VM 更加轻量级;

 

【Docker核心体系】:

  • 容器:集装箱 ---集装箱模块 《==》 对象 --- 独立运行的应用;
  • 镜像:集装箱模块 类 《==》 独立运行的应用程序;
  • 仓库:码头,程序集 《==》存储镜像;

 

【Docker外部运行架构图】

认识 Docker 的世界_第8张图片

Docker 是典型的客户端-服务器 (C/S) 架构模式,使用远程API来管理和创建Docker容器,其中客户端常用工具有:

  1. Bash Shell (Linux默认)
  2. XShell (是一个强大的安全终端模拟软件)
  3. PowerShell(是开源,跨平台的构建于 .net core 上基于任务的命令行 shell 和脚本语言,兼容 cmd) 
  4. Windows PowerShell (Windows 平台,基于.net 构建,兼容 cmd)

【Docker的组成关系】

认识 Docker 的世界_第9张图片

 注:pwsh 更多参考=》https://docs.microsoft.com/zh-cn/powershell/scripting/overview?view=powershell-7

Docker 镜像(Images) Docker 镜像是用于创建 Docker 容器的模板。
Docker 容(Container) 容器是独立运行的一个或一组应用。
Docker 客户端(Client) Docker 客户端通过命令行或者其他工具使用 Docker API (https://docs.docker.com/reference/api/docker_remote_api) 与 Docker 的守护进程通信。
Docker 主机(Host) 一个物理或者虚拟的机器用于执行 Docker 守护进程和容器。
Docker 仓库(Registry)

Docker 仓库用来保存镜像,可以理解为代码控制中的代码仓库。

Docker Hub(https://hub.docker.com) 提供了庞大的镜像集合供使用。

Docker Machine Docker Machine是一个简化Docker安装的命令行工具,通过一个简单的命令行即可在相应的平台上安装Docker,比如VirtualBox、 Digital Ocean、Microsoft Azure。

 

【Docker daemon 通信与安全客户端】

认识 Docker 的世界_第10张图片

Docker 使用了客户端—服务端模型。客户端使用 CLI,同时服务端(daemon)实现功能,并对外提供 REST API。 

客户端叫作 docker(在 Windows 上是 docker.exe),daemon 叫作 dockerd(在 Windows 上是 dockerd.exe)。默认安装方式将客户端和服务端安装在同一台主机上,并且配置通过本地安全 PIC Socket 进行通信。

  • Linux:/var/run/docker.sock。
  • Windows://./pipe/docker_engine。

默认使用 2375 作为客户端和服务端之间未加密通信方式的端口,而 2376 则用于加密通信。在实验室这样还可以,但是生产环境却是不能接受的。TLS 就是解决之道!
Docker 允许用户配置客户端和 daemon 间只接收安全的 TLS 方式连接。生产环境中推荐这种配置,即使在可信内部网络中,也建议如此配置!
Docker 为客户端与 daemon 间使用基于 TLS 的安全通信提供了两种模式。

  • daemon 模式:Docker daemon 只接收认证客户端的链接。
  • 客户端模式:Docker 客户端只接收拥有证书的 Docker daemon 发起的链接,其中证书需要由可信 CA 签发。

同时使用两种模式能提供最高的安全等级。下面会使用简单的实验环境来完成 Docker 的 daemon 模式和客户端模式 TLS 的配置过程。

 

【应用容器化构建过程】:

以上资料部分参考:

  • 【Docker简介及历史】=》http://c.biancheng.net/view/3118.html
  • 【Docker开源Moby和LinuxKit】=》https://www.sohu.com/a/143808015_464005
  • 【Docker 通信与安全客户端】=》http://c.biancheng.net/view/3268.html

你可能感兴趣的:(Docker,&,Podman,docker,容器,镜像,VM,moby)