因为要学习docker相关的检测技术,所以需要对docker的原理进行基本的原因,不求彻底弄懂,但求懂点皮毛,如有不妥之处,还请斧正。
docker公司是在旧金山,由法裔美籍开发者和企业家Solumon Hykes创立。
docker公司期初是一家PaaS的提供商。之后做了一款工具,最后命名为docker。
docker 来源于英国口语,意为码头工人,即词从船上装卸货物的人。
docker的大多数内容都是go语言开发的。
docker的底层原理是利用了linux的Cgroups和Namespace技术。
Cgroups主要的作用是用作资源的分配和限制,英文是Control groups。
Cgroup主要控制的资源包括,CPU,内存,网络和磁盘。
也就是说容器可以通过cgroups来生成一个新的主机。
命名空间,实际上这个功能的作用就是进行隔离,资源划分,让划分的内容成为独立的一个部分。
主要分割的内容包括进程ID、主机名、用户名、用户ID,文件名,网络和通信资源的隔离。
先来看图,图是深入浅出docker的作者提供的。

从高到低看
字面意思就是docker的守护线程的意思。docker Client和docker Deamon进行通信,完成用户的各种操作请求。这里有一个潜在的问题就是,既然有Docker Client端,那么就有可能Client端和Docker Deamon不在同一个主机的问题,那么这里的Docker Deamon接口配置不当,就会存在一系列的安全问题。甚至是同一台服务器上如果接口存在问题也会面临相同的风险。
新版的docker通过Libcontainer功能去进行创建容器等相关操作
runc是对Libcontainer进行的一个工具封装。

shim 实际上就是一个代理程序,用来管理Docker容器。
镜像层主要分为:
Docker是一个开源的应用程序容器引擎,可以在linux、windows和macOS上运行。它可以将应用程序和它们的依赖项打包到一个可移植的容器中,从而实现更轻松快捷的应用程序开发、交付、部署和运行。
Docker 的主要组件包括 Docker引擎、Docker Hub 和 Docker Compose。
Docker引擎是一个客户端-服务器应用程序,可以通过 REST API 或命令行与它进行交互。它包括 Docker daemon、Docker CLI、Docker REST API 和 Docker SDK。
Docker Hub 是一个公共的镜像仓库,让用户可以在其中存储和共享 Docker 容器镜像。
Docker Compose 是一个工具,可将多个容器组合成一个应用程序,从而更轻松地管理多个容器部署。
Docker的主要特点包括:
轻量级容器:Docker 容器使用宿主机的内核,因此比虚拟机更轻量级。
简化配置:Docker 容器可以使用 Dockerfile 来描述应用程序的环境和依赖关系,从而使配置更加简单。
可移植性:Docker 容器可以在任何支持 Docker 引擎的环境中运行,从而实现更高的可移植性。
快速部署:Docker 容器可以快速地打包、部署和启动,从而大大缩短部署时间。
管理容器:Docker 容器可以通过 Docker 命令行或 Docker SDK 进行管理,从而更方便地管理容器。
Docker 是一个开源的容器化平台,可以简化应用程序的创建、部署和运行。Docker 公司是 Docker 技术的开发者和支持者,成立于 2013 年,并于 2019 年被 Mirantis 公司收购。
Docker 公司提供了 Docker Engine、Docker Swarm、Docker Hub 等一系列工具和服务,帮助用户构建和管理容器化应用。其中,Docker Engine 是 Docker 公司最核心的产品,它是一个轻量级的容器引擎,可以在任何基础设施上运行。
Docker Swarm 是 Docker 公司提供的容器编排工具,可以让用户轻松构建和管理容器集群。Docker Hub 是 Docker 公司的官方镜像仓库,用户可以从中获取官方和社区维护的容器镜像。
除了开源产品和服务,Docker 公司还提供了商业版本的 Docker Enterprise,它提供了更多的功能和支持服务,适合于企业级应用的部署和管理。
K8s is short for Kubernetes, an open-source container orchestration platform developed by Google. It automates the deployment, scaling, and management of containerized applications. K8s provides a framework for deploying and managing containerized applications across a cluster of nodes and allows for flexible configuration of compute, storage, and network resources. It is designed to be highly scalable and resilient, enabling organizations to easily manage large-scale container deployments.
Kubernetes的主要优势包括:
高可用性:Kubernetes是设计为高可用性的平台,它采用了容错,自动修复和重新调度的机制,确保应用程序在节点故障或系统崩溃时不会中断。
可扩展性:Kubernetes可以轻松地扩展应用程序,根据需要进行水平扩展或垂直扩展,并提供自动负载平衡。
自动化:Kubernetes自动管理容器的部署,伸缩,升级和维护,使开发人员和DevOps人员可以专注于应用程序的构建和测试,而不必担心基础设施的管理。
灵活性:Kubernetes支持多种容器运行时(如Docker,CRI-O,Containerd等),可以运行在任何云环境或自建的物理机群集上,并且可以与多种服务和工具(如服务网格,CI /CD工具,监控和日志记录工具等)集成。
安全性:Kubernetes提供了内置的安全机制,如身份验证,授权和加密,以确保应用程序数据的机密性和完整性。它还支持网络隔离和容器映像签名验证等高级安全特性。
社区支持:Kubernetes有庞大的社区支持,它积极开发新特性和修复bug,并提供详细的文档和培训资源,以帮助开发人员和DevOps人员快速掌握技能。