• Docker 应用架构


    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
    
    • 1

    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
    
    • 1
    • 2
    • 3

    image-20220906111859229

    2、重启 Docker 服务端(Daemon)

    systemctl daemon-reload
    systemctl restart docker.service
    
    • 1
    • 2

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

    docker -H 10.150.16.95 info
    
    # 10.150.16.95:远程Docker服务端(Daemon)的IP地址
    
    • 1
    • 2
    • 3

    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 的基础架构及各组件的功能介绍。

  • 相关阅读:
    Thinkphp5x远程命令执行及getshell
    物联网 嵌入式 单片机 毕设如何选题 【项目分享】
    【无标题】
    【Elasticsearch教程8】Mapping字段类型之keyword
    MidJourneyAI绘画之月满中秋情更浓
    在 Python 3 中释放 LightGBM 的力量:您的机器学习大师之路
    open函数的应用
    Java抽象类
    java基于Springboot+vue的宠物销售商城网站 elementui
    【UniApp】-uni-app-路由
  • 原文地址:https://blog.csdn.net/IT_ZRS/article/details/126725135