作者:书友56183408 | 来源:互联网 | 2023-09-15 16:02
一、核心架构Docker使用Google公司推出的Go语言进行开发实现,基于Linux内核的cgroup,namespace,以及OverlayFS类的UnionFS等技术,对进程
一、核心架构
Docker 使用 Google 公司推出的 Go 语言 进行开发实现,基于 Linux 内核的 cgroup,namespace,以及 OverlayFS 类的 Union FS 等技术,对进程进行封装隔离,属于操作系统层面的虚拟化技术。由于隔离的进程独立于宿主和其它的隔离的进程,因此也称其为容器。
官网上给出的Docker的核心架构图,如下所示:
Docker采用client-server架构。Docker客户端与Docker守护进程对话,守护进程承担构建、运行和分发Docker容器的繁重工作。Docker客户端和守护进程可以运行在同一个系统上,或者你可以连接一个Docker客户端到一个远程Docker守护进程。Docker客户端和守护进程通过UNIX套接字或网络接口使用REST API进行通信。另一个Docker客户端是Docker Compose,它允许你使用由一组容器组成的应用程序。
二、Docker客户端
Docker客户端(也叫Docker,或The Docker client)是许多Docker用户与Docker交互的主要方式。当使用像docker run这样的命令时,客户端将这些命令发送给dockerd(即Docker daemon),由dockerd执行它们,docker命令使用docker API,Docker客户端可以与多个守护进程通信。
三、守护进程
Docker守护进程(也叫dockerd,或The Docker daemon)监听Docker API请求,并管理Docker对象,如镜像images、容器containers、数据卷volume。守护进程也可以与其他守护进程通信来管理Docker服务。
四、Docker仓库
Docker仓库用于存储Docker镜像。Docker Hub是一个任何人都可以使用的公有仓库,默认情况下,Docker被配置为在Docker Hub上查找镜像。也可以运行自己的私有仓库。当使用docker pull或docker run命令时,所需的镜像会从你配置的仓库中提取出来,当使用docker push命令时,你的镜像会被推送到你配置的仓库中。
五、Docker对象
1、镜像(images)
Docker 镜像可以看作是一个特殊的文件系统,除了提供容器运行时所需的程序、库、资源、配置等文件外,还包含了一些为运行时准备的一些配置参数(如匿名卷、环境变量、用户等)。镜像不包含任何动态数据,其内容在构建之后也不会被改变。镜像是 Docker 运行容器的前提,仓库是存放镜像的场所,可见镜像更是Docker的核心。
你可以使用远程仓库中别人发布的镜像,也可以定制自己的镜像,要构建自己的镜像,需要创建一个Dockerfile文件,其中包含一个简单的语法,用于定义创建和运行镜像所需的步骤,Dockerfile中的每条指令都在镜像中创建一个层,当改变Dockerfile并重建镜像时,只有那些已经改变的层才会被重建,与其他虚拟化技术相比,镜像之所以如此轻巧、小巧和快速,部分原因就在于此。
2、容器(containers)
容器是镜像的运行时实例,使用Docker API或CLI创建、启动、停止、移动或删除容器。可以将容器连接到一个或多个网络,通过数据卷volume为其附加存储,甚至根据其当前状态创建一个新镜像。默认情况下,容器与其他容器及其主机是相对隔离的。容器由其镜像以及在创建或启动时提供给它的任何配置选项定义,当容器被移除时,没有存储在持久存储中的任何对其状态的更改都将消失。
六、Docker API
Docker API中最重要的就是操作镜像,容器的相关命令,也是学习和使用Docker必需熟练使用的,Docker API的官网参考:https://docs.docker.com/engine/api/ 。
这里还有张思维导图,很形象,值得参考学习:
总结
Docker是一个用于开发、发布和运行应用程序的开放平台,利用Docker可以快速发布、测试和部署代码,显著减少编写代码和在生产环境中运行代码之间的延迟。它提供了在一个称为容器的松散隔离环境中打包和运行应用程序的能力,容器是轻量级的,包含运行应用程序所需的所有内容,因此不需要依赖当前安装在主机上的内容。另外,容器可以随时随地的创建和销毁,使用起来可谓是随心所欲啊。因此,Docker能为我们做到以下方面:
- 快速、一致地交付应用程序;
- 响应式部署和扩展;
- 在同一硬件上运行更多的工作负载。
个人最大的感受是入门简单,使用便利。比如,以前需要在Linux系统中安装jdk,tomcat,mysql等软件环境需要费半天的工夫,而且一不小心还会出现软件环境的版本不兼容问题,现在通过Docker将软件环境和应用程序打包在一起,保持环境的一致性外,还可以轻松的迁移到其他机器执行。又比如,公司的一台服务器不可能只有你一个人去使用吧,而是很多同事都会在上面部署或者测试程序,这样很容易造成自己部署的东西受到其他同事部署的影响,而Docker通过容器很好的解决了环境隔离问题,这样自己的程序就不会受到他人程序的影响了。