• Docker架构简介


    【原文链接】Docker架构简介

    一、Docker架构

    docker的架构图如下所示

    • Docker daemon
      docker daemon 是docker的服务端守护进程(dockerd),它监听docker api 请求,并且可以对docker对象进行操作,比如镜像、容器、网络和存储,平常我们使用的docker命令实际上就是docker client 向 docker daemon发送的rest api请求的过程。此外,docker daemon还可以通过与其他的docker daemon进程进行通信进而去管理docker对象资源。

    • Docker client
      docker client也就是我们平时使用的docker命令,平时当我们执行docker命令时,实际上就是docker client向docker daemon服务发送docker api请求的过程。当然docker client也是可以向多个 docker daemon服务进程发送请求的。

    • Docker Desktop
      docker desktop 可以理解为一个图形化的集成工具,它集成了docker daemon,docker client,docker compose等,目前一般主要用户在windows和mac系统的图形化界面。当然docker desktop是支持在linux上安装的,只不过话说回来,已经选择使用linux了,就没有必要去安装docker desktop了。因此如果是常年和linux打交道的开发运维人员,那么是没有必要去了解docker desktop的,当然docker desktop也自然不能作为docker的一个组件,它更像是一个图形化工具把docker client 和docker daemon包装了一下。

    • Docker registries
      docker registries 是一个镜像存储服务,目前公共的公开的docker的镜像存储服务为docker hub,即https://hub.docker.com/ ,当执行docker pull、docker push等操作时,就是从docker hub上拉取镜像或者将本地镜像推送到 docker hub 服务,当然在企业内部也是可以通过一些开源工具进行私有hub服务的搭建,比如常见的harbor就是用于搭建私有部署的docker hub

    • Docker objects
      docker objects,即docker对象,主要是指docker中涉及的比如容器、镜像、网络、存储、插件等。

    • Images
      docker images 是用来启动docker 容器使用的模板文件,通常情况下,docker镜像都是基于其他额基础镜像制作的,通过在dockerfile文件中增加自定义的内容,比如安装自定义软件和构建自定义应用程序等,因为docker镜像是根据dockerfile中自定义语句进行分层的,每次重新编译会根据dockerfile的变更情况进行重新编译,对于没有变化的层,不需要重新编译,只对dockerfile中有变更的层进行重新编译,这也是docker轻量级快速的一个重要原因。

    • Containers
      docker container 容器可以理解为是docker image的一个实例,通过docker命令行或者docker api可以对docker容器进行创建、启动、停止、迁移或者删除等操作。容器与容器之间以及与宿主机之间都是隔离的,此外还可以通过设置docker 网络做到同一个网络下的容器互通,而不同网络下的容器是不通的。此外还可以通过存储挂载技术将容器中的目录挂载到宿主机上,这样当容器被删除后,挂载的目录时存储在宿主机上的,数据时不会丢失的,对于数据库、存储文件等一般都是需要进行存储目录挂载的。

    二、docker run 命令的执行流程

    比如执行如下命令,即使用Ubuntu镜像启动一个容器,并且以交互的方式进入docker容器中的shell窗口(/bin/bash)

    docker run -i -t ubuntu /bin/bash
    
    • 1
    • 步骤1:首先会检查本地是否有Ubuntu镜像,如果没有,则会向docker hub(https://hub.docker.com/ ) 请求下载 Ubuntu镜像。

    • 步骤2:Docker 首先创建一个容器,相当于手动执行 docker container create 命令

    • 步骤3:Docker创建一套可读可写的文件系统,并且允许正在执行的容器对此文件系统进行操作

    • 步骤4:Docker创建一个网络接口,然后将容器链接到默认的网络上,同时为容器分配一个IP地址,此时容器可以通过宿主机上的IP地址与外部网络通信

    • 步骤5:Docker启动容器,并且执行 /bin/bash 命令,并且通过 -i -t 参数指定了以交互的方式打开shell

    • 步骤6:当在容器中执行exit命令,此时会退出 /bin/bash 程序,容器停止运行,但是此时容器仍然存在,如果彻底删除容器需要使用删除命令将容器删除

  • 相关阅读:
    哈希表 | 有效字母异位词 | leecode刷题笔记
    10款自媒体人必备的免费工具,快速高效运营
    esbuild中文文档-路径解析配置项(Path resolution - External、Main fields)
    6、maven
    阿里云:加大NoSQL数据库软硬件一体化技术自研
    Linux服务器搭建Docker
    Arduino ESP8266使用AliyunIoTSDK.h连接阿里云物联网平台
    nginx网络服务配置
    SpringBoot集成RabbitMQ使用建议
    springboot中注解介绍
  • 原文地址:https://blog.csdn.net/redrose2100/article/details/126991729