Docker 简介
Docker
是一种运行于Linux
和Windows
上的软件,用于创建、管理和编排容器。Docker
是在GitHub
上开发的Moby
开源项目的一部分。Docker
公司,位于旧金山,是整个Moby
开源项目的维护者。Docker
公司还提供商业版和社区版。
Docker 运行时与编排引擎
Docker
引擎是用于运行和编排容器的基础设施工具。有VMware
管理经验的读者可以将其类比为ESXi
。ESXi
是运行虚拟机的核心管理程序,而 Docker 引擎是运行容器的核心容器运行时。- 其他
Docker
公司或第三方的产品都是围绕Docker
引擎进行开发和集成的。
Docker 开源项目(Moby)
- 国内码云(Gitee.com)平台 =》https://gitee.com/mirrors/moby
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 应用场景
- 微服务架构
通过对特定的业务领域进行分析和业务建模,将复杂的业务逻辑剥离成小而专一、耦合度低并且高度自治的一组服务,原生容器轻量级、统一部署的特性为解决各个微服务统一管理、调度、部署带来了全新的思路,并且大大降低了服务和服务之间、版本和版本之间的依赖关系,让同一个微服务在不同环境中保持良好的一致性。
- 持续集成(CI)与持续交付/部署(CD)
基于原生容器的 DevOps
平台为用户提供基础的开发环境,使开发者只需要关注代码开发减少相关工具的安装和配置工作量。同时丰富的容器镜像,可以让运维人员在平台上快速部署开发所需要的服务,支持通过环境变量绑定服务。实现开发环境、测试环境以及生产环境的隔离以及环境的快速搭建和回收,提高了整体效率。
- 快速弹性伸缩
借助容器快速启动、快速部署、海量并发的能力,对于需求变化量大,并且需要快速启动几百甚至上千台机器的应用,容器可以非常好地满足业务的突发需求。
Docker VS VM(虚拟机)
容器和虚拟机都依赖于【宿主机】才能运行。
宿主机可以是 =》【笔记本】、【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 是典型的 C/S
(客户端/服务器)架构模式,使用远程 API
来管理和创建 Docker
容器,其中客户端常用工具有:
Bash Shell
(Linux默认)XShell
(是一个强大的安全终端模拟软件)PowerShell
(是开源,跨平台的构建于.net core/.net
上基于任务的命令行shell
和脚本语言,兼容cmd
)Windows PowerShell
(Windows 平台,基于.netfx 构建,兼容cmd
)
Docker 的组成关系
说明: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
。
客户端叫作 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(应用程序)容器化构建过程
Docker 总结
Docker
是一个开源应用容器引擎,支持第三方开发和集成;Docker
可以让开发者打包他们的应用以及依赖包到一个轻量级、可移植的镜像中,然后发布部署到任何流行的Linux机器上,也可以实现虚拟化;Docker
容器通过Docker
镜像来创建。Docker
容器之间不会有任何接口冲突,实现进程级隔离;Docker
容器的性能开销极其低,占用资源少,启动速度快,相对VM
更加轻量级;
以上资料部分参考:
- Docker 开源 Moby 和 LinuxKit,https://www.sohu.com/a/143808015_464005