Docker 应用架构

本文详细介绍了Docker架构,包括客户端(Client)、服务端(Daemon)、镜像(Image)、仓库(Registry)和容器(Container),展示了它们在Docker中的协作与工作原理。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

docker-ct

Author:rab



前言

Docker 采用 C/S 网络应用模型,其核心组件包括:Docker 客户端(Client)、Docker 服务端(Docker Daemon)、Docker 镜像(Image)、Docker 仓库(Registry)及 Docker 容器(Container)。接下来通过架构图,详细说明一下 Docker 架构组件的功能及作用。

一、架构

Docker-cs

流程:Docker 客户端(Client)向 Docker 服务端(Docker Daemon)发起请求(如 docker pull/run/build … 等),Docker 服务端(Docker Daemon)收到请求后就会做出响应。假如是一个 pull 请求,那 Docker 服务端(Docker Daemon)就会向 Docker 仓库(Registry)拉取指定的镜像至 Host 本地进行存储,最后再根据 Docker 客户端(Client)的请求决定是否运行容器或做其他请求操作。

二、组件

2.1 客户端(Client)

Docker 客户端(Client),即 Docker 的客户端管理命令(如上图所示),Docker 客户端(Client) 可以与 Docker 服务端(Daemon)处于同个 Host 下,也可以分开(然后可通过 socket/RESET API 进行交互)。Docker 客户端(Client)向 Docker 服务端(Daemon)发起请求,然后 Docker 服务端(Daemon)负责构建、运行和分发容器。

2.2 服务端(Daemon)

Docker 服务端(Daemon),即以 Linux 后台服务方式运行的服务器组件,作为服务端,其为 Docker 客户端(Client)的相关请求提供服务和响应,并为客户端的请求负责创建、运行容器,及镜像构建与存储等。下图为后台运行的状态:

systemctl status docker.service

image-20220906111549565

Docker 服务端(Daemon)只能响应本地 Host 的 Docker 客户端(Client)请求,如果需要运行远程客户端的请求,需要启用 TCP 监听服务,具体步骤如下:

1、修改 Docker 配置文件

vim /etc/systemd/system/multi-user.target.wants/docker.service

# 追加 -H tcp://0.0.0.0

image-20220906111859229

2、重启 Docker 服务端(Daemon)

systemctl daemon-reload
systemctl restart docker.service

3、远程请求 Docker 服务端(Daemon)

docker -H 10.150.16.95 info

# 10.150.16.95:远程Docker服务端(Daemon)的IP地址

image-20220906112508384

2.3 镜像(Image)

在前面的博文已经提到,Image 是一种分层结构的只读镜像,它可通过服务端运行(run)为容器。而什么是镜像呢?又如何创建镜像呢?我们说,镜像是容器的基础。首先要了解镜像就先要了解一个概念——base 镜像,我们的任何镜像都是基于一个基础(base)镜像构建而成的。

而什么又是基础镜像呢?你需要明确基础镜像的两个特点:

  • 基础镜像不依赖于其他镜像,也即是说它是镜像的基本单元;
  • 其他镜像就可以以基础镜像为基准进行构建。

那这些(基础)镜像又存储于什么位置呢?一般我们可以通过创建自己的私有 docker 镜像仓库(如 Harbor)或直接使用官方的镜像仓库来实现基础镜像及其他镜像的存储,这就是接下来即将说到的 docker 仓库(Registry)。关于如何拉取 docker 仓库(Registry)中的镜像或其他镜像管理指令,大家可以自行看官方文档,这里不作为重点。

如下图就是从镜像仓库中拉取下来的镜像:

image-20220906114947026

那问题来了:既然镜像只读,那我其他镜像又是如何基于某个基础镜像来进行构建的呢?

关于这个问题我也已经做了总结,大家可以看看我前面的文章《Docker 的 Copy-on-Write 特性》

2.4 仓库(Registry)

在镜像一节中我们说了,仓库(Registry)就是用来存放镜像(Image)的,它分为私有镜像仓库和公有镜像仓库,所谓的私有镜像仓库就是你个人或你们公司内部搭建的镜像仓库(如 Harbor),只有你个人或你公司内部相关技术人员可使用。而公有镜像仓库默认是 Docker Hub,由 Docker 公司进行维护,该镜像仓库所有人都可进行下载使用。

关于如何部署一个私有 Docker 镜像仓库,大家可以参考我这篇部署文档《Harbor 私有镜像仓库部署》

2.5 容器(Container)

有了以上的基础后,紧接着就是通过镜像(Image)来运行一个容器实例了,用户可通过 Docker 客户端工具来运行、停止、删除容器了。如下图就是运行中的一个 Nginx 容器实例:

image-20220906110737069

以上就是 Docker 的基础架构及各组件的功能介绍。

Docker架构通常包括以下几个关键组件,它们协同工作以支持容器化应用的生命周期管理: 1. **客户端(Client)**: 这是用户与Docker交互的主要界面,无论是命令行工具还是图形界面,它向`docker daemon`发送请求并接收响应。用户在这里创建、推送到仓库、拉取镜像和管理容器。 2. **Docker Daemon(守护进程)**: 作为后台服务,它运行在主机上并与客户端通信。Docker Daemon负责处理所有的低级别操作,如启动、暂停、重启容器,以及管理本地存储和网络配置。 3. **镜像(Image)**: Docker的核心概念,它是已打包的软件环境,包括所有依赖和配置。镜像可以视为静态的,包含应用程序的完整状态。 4. **镜像仓库(Repository)**: 共享镜像的地方,例如Docker Hub,开发者可以在那里发布他们创建的镜像供其他人使用,或者直接下载公共镜像。 5. **容器(Container)**: 镜像的运行实例,一个完全隔离的执行环境,包含所有必要的文件和服务端口映射。每个容器有自己的文件系统,但共享主机的操作系统内核。 6. **存储驱动(Storage Driver)**: 负责存储和管理容器的数据卷。Docker支持多种存储驱动,如aufs、overlay2、ZFS等,用于持久化数据。 7. **网络设施(Network)**: 包括内建的网络模式(bridge、host、none等),以及第三方插件,允许容器之间的网络通信。 8. **Swarm和Kubernetes集成**: 对于大规模部署,Docker提供Swarm集群管理工具,以及与Kubernetes的集成,支持更复杂的微服务架构。 整体来看,Docker架构设计强调了轻量、模块化和标准化,使得容器化应用的部署和管理变得更加简单和高效。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

云计算-Security

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值