认识 Docker 的世界

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

Docker 简介

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

image.png

Docker 运行时与编排引擎

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

image.png

Docker 开源项目(Moby)

image.png

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 应用场景

  • 微服务架构

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

image.png

  • 持续集成(CI)与持续交付/部署(CD)

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

image.png

  • 快速弹性伸缩

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

image.png

Docker VS VM(虚拟机)

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

image.png

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

  • Docker容器模型

服务器启动之后,所选择的操作系统会启动。在 Docker 世界中可以选择 Linux,或者内核支持内核中的容器原语的新版本 Windows。 与虚拟机模型相同,OS 也占用了全部硬件资源。在 OS 层之上,需要安装容器引擎(如:Docker)。 容器引擎可以获取系统资源,比如进程树、文件系统以及网络栈,接着将资源分割为安全的互相隔离的资源结构,称之为容器。 每个容器看起来就像一个真实的操作系统,在其内部可以运行应用。按照前面的假设,需要在物理机上运行 4 个应用。 因此,需要划分出 4 个容器并在每个容器中运行一个应用,如上图(左侧)所示。

  • VM 模型

在虚拟机模型中,首先要开启物理机并启动 Hypervisor 引导程序。一旦 Hypervisor 启动,就会占有机器上的全部物理资源,如 CPU、RAM、存储和 NICHypervisor 接下来就会将这些物理资源划分为虚拟资源,并且看起来与真实物理资源完全一致。 然后 Hypervisor 会将这些资源打包进一个叫作虚拟机(VM)的软件结构当中。这样用户就可以使用这些虚拟机,并在其中安装操作系统和应用。 前面提到需要在物理机上运行 4 个应用,所以在 Hypervisor 之上需要创建 4 个虚拟机并安装 4 个操作系统,然后安装 4 个应用。当操作完成后,结构如上图(右侧)所示。

Docker 核心体系

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

Docker 外部运行架构图

image.png

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

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

Docker 的组成关系

image.png

说明: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 使用了客户端—服务端模型。客户端使用 CLI,同时服务端(daemon)实现功能,并对外提供 RESTFul API

image.png

image.png

客户端叫作 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 签发。

同时使用两种模式能提供最高的安全等级。

App(应用程序)容器化构建过程

image.png

image.png

Docker 总结

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

以上资料部分参考:

目录
相关文章
|
7月前
|
监控 应用服务中间件 nginx
|
6月前
|
关系型数据库 MySQL 应用服务中间件
|
7月前
|
关系型数据库 MySQL Linux
初识 Docker
在这个快速发展的技术时代 , 我们经常面临着应用部署的复杂性、环境差异以及不同操作系统之间的兼容性问题 . 这些问题不仅消耗大量时间 , 还可能导致项目延期和成本增加 . Docker 的出现解决了我们在应用部署过程中遇到的障碍和挑战 . 通过将应用程序及其依赖环境封装在一个轻量级的、可移植的容器中 , Docker 不仅简化了开发和部署流程 , 还确保了不同环境间的无缝衔接和一致性 .
78 9
|
数据可视化 应用服务中间件 nginx
|
7月前
|
运维 Java 虚拟化
[Docker] Docker为什么出现
[Docker] Docker为什么出现
|
关系型数据库 MySQL 虚拟化
docker介绍
docker介绍
98 0
|
Docker 容器
|
JavaScript 应用服务中间件 API
Docker
Docker 是一种开源的容器化平台,可以让开发者在容器中快速构建、打包、发布和运行应用程序,从而实现应用程序的快速交付和部署。
473 1
|
Linux 虚拟化 开发者
|
运维 NoSQL Java
一文让你了解Docker的前世今生
一文让你了解Docker的前世今生
142 0
下一篇
DataWorks