0x00 前言
因为要学习docker相关的检测技术,所以需要对docker的原理进行基本的原因,不求彻底弄懂,但求懂点皮毛,如有不妥之处,还请斧正。
0x01 docker概述
docker起源
docker公司是在旧金山,由法裔美籍开发者和企业家Solumon Hykes创立。
docker公司期初是一家PaaS的提供商。之后做了一款工具,最后命名为docker。
docker 来源于英国口语,意为码头工人,即词从船上装卸货物的人。
docker的大多数内容都是go语言开发的。
0x02 Docker 底层原理
docker的底层原理是利用了linux的Cgroups和Namespace技术。
1.Cgroups
Cgroups主要的作用是用作资源的分配和限制,英文是Control groups。
Cgroup主要控制的资源包括,CPU,内存,网络和磁盘。
也就是说容器可以通过cgroups来生成一个新的主机。
2.Namespace
命名空间,实际上这个功能的作用就是进行隔离,资源划分,让划分的内容成为独立的一个部分。
主要分割的内容包括进程ID、主机名、用户名、用户ID,文件名,网络和通信资源的隔离。
0x03 Docker引擎架构
先来看图,图是深入浅出docker的作者提供的。
从高到低看
1.Docker Deamon
字面意思就是docker的守护线程的意思。docker Client和docker Deamon进行通信,完成用户的各种操作请求。这里有一个潜在的问题就是,既然有Docker Client端,那么就有可能Client端和Docker Deamon不在同一个主机的问题,那么这里的Docker Deamon接口配置不当,就会存在一系列的安全问题。甚至是同一台服务器上如果接口存在问题也会面临相同的风险。
1.1 Libcontainer
新版的docker通过Libcontainer功能去进行创建容器等相关操作
1.2 runc
runc是对Libcontainer进行的一个工具封装。
1.3 shim
shim 实际上就是一个代理程序,用来管理Docker容器。
0x04 Docker镜像层
镜像层主要分为:
- 基础镜像层,系统
- 应用程序依赖
- 应用程序代码层
- 只读层
- 共享层
- 镜像的唯一识别
补充知识
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 公司是 Docker 技术的开发者和支持者,成立于 2013 年,并于 2019 年被 Mirantis 公司收购。
Docker 公司提供了 Docker Engine、Docker Swarm、Docker Hub 等一系列工具和服务,帮助用户构建和管理容器化应用。其中,Docker Engine 是 Docker 公司最核心的产品,它是一个轻量级的容器引擎,可以在任何基础设施上运行。
Docker Swarm 是 Docker 公司提供的容器编排工具,可以让用户轻松构建和管理容器集群。Docker Hub 是 Docker 公司的官方镜像仓库,用户可以从中获取官方和社区维护的容器镜像。
除了开源产品和服务,Docker 公司还提供了商业版本的 Docker Enterprise,它提供了更多的功能和支持服务,适合于企业级应用的部署和管理。
k8s
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.
k8s的优势
Kubernetes的主要优势包括:
-
高可用性:Kubernetes是设计为高可用性的平台,它采用了容错,自动修复和重新调度的机制,确保应用程序在节点故障或系统崩溃时不会中断。
-
可扩展性:Kubernetes可以轻松地扩展应用程序,根据需要进行水平扩展或垂直扩展,并提供自动负载平衡。
-
自动化:Kubernetes自动管理容器的部署,伸缩,升级和维护,使开发人员和DevOps人员可以专注于应用程序的构建和测试,而不必担心基础设施的管理。
-
灵活性:Kubernetes支持多种容器运行时(如Docker,CRI-O,Containerd等),可以运行在任何云环境或自建的物理机群集上,并且可以与多种服务和工具(如服务网格,CI /CD工具,监控和日志记录工具等)集成。
-
安全性:Kubernetes提供了内置的安全机制,如身份验证,授权和加密,以确保应用程序数据的机密性和完整性。它还支持网络隔离和容器映像签名验证等高级安全特性。
-
社区支持:Kubernetes有庞大的社区支持,它积极开发新特性和修复bug,并提供详细的文档和培训资源,以帮助开发人员和DevOps人员快速掌握技能。